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