理解 Xwindow
很多人在用 Xwindow,但是他們是在用一些包裝掩蓋下的 Xwindow,那些包裝有些很不穩(wěn)定,占用大量資源,以至于有人說 Xwindow 是垃圾。其實 Xwindow 是一個非常出色的圖形系統(tǒng),你應(yīng)該抱怨的是那些不穩(wěn)定的包裝,而不是 Xwindow 本身。
本文引用地址:http://butianyuan.cn/article/201609/304104.htmXwindow 是非常巧妙的設(shè)計,很多時候它在概念上比其它窗口系統(tǒng)先進,以至于經(jīng)過很多年它仍然是工作站上的工業(yè)標準。許多其它窗口系統(tǒng)的概念都是從 Xwindow 學(xué)來的。
Xwindow 可以說的東西太多了。下面只分辨一些容易混淆的概念,提出一些正確使用它的建議。
分辨 X server 和 X client
這是我被別人問了好多次的問題,我實在不想再對人說一遍了,所以寫在這里偷個懶,嘿嘿。
很多熟悉 Internet 原理的人首次遇到 Xwindow 的這兩個概念都會搞錯。如果他從一臺 Windows 機器上使用 Exceed 通過 XDMCP 登錄到一臺 Sun 服務(wù)器,他就說 Exceed 是客戶端(client),而 Sun 機器是服務(wù)器 (server)。這就完全搞錯了。
理解了 Xwindow 的工作原理,這個區(qū)別就會很明顯。X server 不是指你登錄的那臺機器,而是指一個程序,它負責在某臺機器上接受客戶的要求,在屏幕上顯示客戶請求的圖形,并且把消息(鍵盤,鼠標,窗口消息)通知客戶程序。
比如上面例子里的 Exceed 就是一個 X server,它負責控制那臺 Windows 機器上的顯示(display),Sun 機器上的程序,xterm, xxgdb, dtwm(CDE的窗口管理器),……是客戶程序。它們通常會使用 TCP 6000 號端口連接 Windows 機器,而Windows機器的 6000 號端口是由 Exceed bind 和 listen 的,怎么樣,我們的 Internet 專家,Exceed 看起來是一個 server 吧 :)
比如,當你通過 telnet 啟動 Sun 機器上的 xterm,就會在 Exceed 的屏幕上顯示一個窗口。實際發(fā)生的事情是: xterm 請求連接 Windows 機器的 6000 號端口,與Exceed 跟 Exceed 連接,然后xterm請求得到資源,然后 xterm 請求在屏幕上顯示一個窗口。
你在 xterm 的窗口里按下A鍵時,Exceed 會把這個事件通知 xterm 進程,然后 xterm 會發(fā)送數(shù)據(jù)報,請求 Exceed, “請在坐標(100,30)處顯示一個字母A,然后在后面顯示一個矩形作為光標。”,這樣你的 xterm 窗口里就會多顯示一個字母。
這下你理解了嗎?不?那還是自己多用用,體會體會吧。
Xwindow 的網(wǎng)絡(luò)透明性
剛才那個 Exceed 用戶,他的客戶程序不僅可以運行在那臺 Sun 機器上,而且可以運行在網(wǎng)絡(luò)里其它的機器上,或者在本機上。比如他有可能同時通過 telnet 登錄到幾臺 Sun 工作站,幾臺 Linux PC,他可以在那些機器上都起動 xterm,在這臺 Windows 機器上的 Exceed 上顯示。如果它安裝了 cygwin,他還可以啟動本機上的 cygwin里 的 xterm,用同樣的方式顯示。
如果他使用 xrdb 在本機的 Exceed 設(shè)置了 xterm 的樣式,比如背景 midnightblue, 前景 白色,字體 -*- adobe-courier-*,……,那么,Sun, Linux, cygwin 里的 xterm,雖然沒有經(jīng)過配置,但是它們知道:“這個 X server 要求我用這個背景色,這個前景色,這個字體……”,它們會在你的屏幕上顯示同樣風(fēng)格的窗口。
使用鼠標選擇一段字符,然后就可以在另外的程序里按鼠標中間,把字符粘貼過去。不論這個程序運行在哪里。
看看更大的一個圖景:你的屏幕上有三臺機器上的 xterm, 兩臺機器上的 gvim,兩臺機器上的 mozilla 在顯示,而它們都受本機的 FVWM 操縱,它們之間可以隨意進行拷貝粘貼…… 從這里你可以初步體會到 Xwindow 的網(wǎng)絡(luò)透明性,它使你方便的操作很多機器。
什么是窗口管理器?
很多人不知道窗口管理器是怎么回事。他們認為 Gnome 和 KDE 是窗口管理器,認為窗口管理器就是能夠提供一個工具條,能夠配置桌面背景,能夠設(shè)置很多菜單的東西。而其實,窗口管理器只是 Gnome 和 KDE 的一部分,它的主要功能是你平時根本沒有注意,但是卻非常重要的操作。窗口管理器的主要功能是:移動窗口,改變窗口大小,圖標化(最小化)窗口,改變窗口層疊順序……
通常的X客戶程序不需要知道有人想移動它,它只知道乖乖聽窗口管理器的話。如果沒有窗口管理器運行,你的程序會一個堆一個,你沒有辦法操縱被蓋在下面的程序,你只能使用最上面一個程序,而且你不能移動它,你不能改變它的大小。這樣的系統(tǒng)根本不能用!
其實你的窗口上的標題,按鈕,漂亮的邊框,全都是窗口管理器提供的,而不是程序自己的,這樣你用窗口管理器就能改變?nèi)魏未翱诘臉邮搅?。當你點擊關(guān)閉窗口的那個按鈕,你其實點擊的是窗口管理器放在你的程序窗口上面的一個小窗口,發(fā)現(xiàn)它受到點擊后,窗口管理器就會通知那個程序:“喂!有人想關(guān)掉你,你自己準備準備后事,然后退出吧。”
不同的機器在本機顯示的窗口,由窗口管理器統(tǒng)一裝飾和指揮。比如,窗口管理器決定: xterm 窗口上面都應(yīng)該有四個按鈕,一個在左邊,點擊它會顯示窗口操作菜單,另外三個在右邊,分別是最大化,最小化和關(guān)閉。窗口都使用 7pixel 厚的邊框,窗口首次出現(xiàn)的時候首先在桌面上找一個空位置,如果找不到,就找一個能夠最少的遮蓋其它窗口的位置……
這些都是窗口管理器的職責。
Gnome 和 KDE 是什么?
有人把 Gnome 和 KDE 叫做窗口管理器,甚至還有人把它們叫做 Xwindow。經(jīng)??吹接腥藛枺?ldquo;裝哪種 Xwindow 好啊?Gnome 還是 KDE?” 其實你不安裝 Gnome 和 KDE 也可以使用 Xwindow.
Gnome 和 KDE 是“桌面系統(tǒng)”,一種很多程序和函數(shù)庫的集合。它們的設(shè)計目的是提供一致的方便的操作方式來滿足普通用戶的需要。它們不但包含窗口管理器,還有很多實用程序和應(yīng)用程序,比如配置程序,工具條,編輯器,繪圖工具…… 其實 Gnome 可以和很多窗口管理器合作,在歷史上, Gnome 使用過的窗口管理器包括 englightenment, sawmill, sawfish, metacity。KDE 的窗口管理器叫做 kwin。
你也知道,設(shè)計整整一套應(yīng)用程序:編輯器,繪圖程序,瀏覽器,…… 是非常不容易的。所以它們肯定是不如專用的編輯器,繪圖程序,瀏覽器的。不過要求不太高的用戶也可以用它們。
評論