當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 很多人在用 Xwindow,但是他們是在用一些包裝掩蓋下的 Xwindow,那些包裝有些很不穩(wěn)定,占用大量資源,以至于有人說(shuō) Xwindow 是垃圾。其實(shí) Xwindow 是一個(gè)非常出色的圖形

 很多人在用 Xwindow,但是他們是在用一些包裝掩蓋下的 Xwindow,那些包裝有些很不穩(wěn)定,占用大量資源,以至于有人說(shuō) Xwindow 是垃圾。其實(shí) Xwindow 是一個(gè)非常出色的圖形系統(tǒng),你應(yīng)該抱怨的是那些不穩(wěn)定的包裝,而不是 Xwindow 本身。

Xwindow 是非常巧妙的設(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ò)要求不太高的用戶也可以用它們。[!--empirenews.page--]

用 Xwindow 做一個(gè)有趣的試驗(yàn)

現(xiàn)在我們來(lái)做一個(gè)試驗(yàn)來(lái)引起你對(duì) Xwindow 的興趣。

很多人離開(kāi)了 xdm 就不知道怎樣啟動(dòng) "Xwindow" 了。其實(shí) Xwindow 的啟動(dòng)方式很簡(jiǎn)單。

首先,啟動(dòng)你的 X server。在 Linux 下,你可以直接輸入 "X&",讓一個(gè) X server 在后臺(tái)運(yùn)行。這樣,一個(gè)占據(jù)整個(gè)屏幕的布滿斜紋的窗口(根窗口)就出現(xiàn)了。如果是 Exceed 或者 X-win32,你需要把屏幕設(shè)置為 "single window" 才能看到這個(gè)窗口。

接著,Linux 用戶需要用 xauth 給你的 X server 設(shè)置一個(gè)密碼,這樣別人就不能非法連接你的 X server。你需要 Ctrl-Alt-F1切換到tty1才能輸入這個(gè)命令。Exceed 和 X-win32 的用戶不需要這步。以下的例子只用 Linux 作為實(shí)例,其它系統(tǒng)的用戶可以依葫蘆畫(huà)瓢。

xauth add :0 . `mcookie`

好了,現(xiàn)在你可以試試啟動(dòng)一個(gè) xterm 到這個(gè) X server 上:

xterm -display :0

按 Alt-F7 切換到 X,你看到了一個(gè)不受窗口管理器管理的 xterm。試試移動(dòng)它呢?再切換到 tty1 啟動(dòng)另一個(gè) xterm,兩個(gè) xterm 重合了嗎?你怎樣在第一個(gè) xterm 里輸入呢?這樣用起來(lái)很痛苦吧?那么你可以在 xterm 里啟動(dòng)一個(gè)窗口管理器,比如 twm,直接運(yùn)行 "twm&" 就行了。

你發(fā)現(xiàn)xterm的窗口都被加上了標(biāo)題欄,按鈕和邊框,你現(xiàn)在可以移動(dòng)它們了。試試把 twm 殺死,看看那些標(biāo)題欄,按鈕,邊框是不是都消失了?你知道了窗口管理器的作用了吧。

現(xiàn)在告訴你怎樣不用 XDMCP broadcast,繞過(guò) CDE 的登陸界面,而使用 Sun 機(jī)器上的 CDE。其實(shí)你只需要把剛才那個(gè)例子里的 "twm" 換成 CDE 的窗口管理器 dtwm 就行了,或者啟動(dòng) dtsession。它們一般在 /usr/dt/bin 下。Sun 還有另外一個(gè)窗口管理器叫做 OpenLook, 它在系統(tǒng)里的名字叫做 olwm,你自己找找吧。

現(xiàn)在如果你自己在 Sun 機(jī)器上裝一個(gè) FVWM,你知道怎么繞過(guò) CDE 登錄而啟動(dòng) FVWM 了吧?你不需要成為 root 就可以使用你喜歡的FVWM了。

.Xdefaults 文件的作用

弄明白 X 的工作原理后,你就可以使用 .Xdefaults 來(lái)配置你的程序了。有人不理解 .Xdefaults 是用來(lái)干什么的,喜歡用 shell alias 出一些帶有很多參數(shù)的命令,或者寫(xiě)一些 shell script,里面只有一行帶有很多參數(shù)的程序調(diào)用,然后他說(shuō): “.Xdefaults 沒(méi)用。”

其實(shí) .Xdefaults 比起這些辦法有很多好處。首先,幾乎所有的 X 客戶程序都可以從 .Xdefaults 文件得到配置信息,比如前景色,背景色,字體…… 這樣你可以在同一個(gè)文件里配置所有 X 程序的樣式,而不用寫(xiě)那么多 shell script。

另外,如果你用 xrdb .Xdefaults 把這些配置信息寫(xiě)入到根窗口的數(shù)據(jù)結(jié)構(gòu)里,不是本地機(jī)器上的 X 程序也會(huì)遵守同樣的樣式。比如如果你的 .Xdefaults 里面有這些內(nèi)容:

XTerm.background: midnightblue

XTerm.foreground: white

然后你用 xrdb ~/.Xdefaults,那么所有的 xterm 都會(huì)使用 midnightblue 作為背景色,使用白色顯示字符。這些配置,用X術(shù)語(yǔ)叫資源(resource)。

有時(shí)候你會(huì)開(kāi)很多 xterm 窗口在機(jī)器上,它們來(lái)自不同的遠(yuǎn)程機(jī)器,這時(shí)候如果它們都用同樣的樣色和字體,你就不容易分辨它們了。比如有一天,我在實(shí)驗(yàn)室的PC機(jī)上打開(kāi)了很多 xterm,它們來(lái)自本機(jī),實(shí)驗(yàn)室的 Sun 服務(wù)器,我宿舍的機(jī)器和數(shù)據(jù)庫(kù)實(shí)驗(yàn)室一臺(tái) HP 服務(wù)器。在我走之前,想關(guān)閉本地的機(jī)器,我輸入 “shutdown -h now” 在一個(gè)我自認(rèn)是本地的 xterm 上,結(jié)果,等了一會(huì)兒,我回頭看到機(jī)器沒(méi)關(guān)掉,只是那個(gè) xterm 停止了響應(yīng)。我一拍腦袋:糟了,我把宿舍的機(jī)器給關(guān)掉了!

為了避免這種情況,你可以在不同的機(jī)器上編輯不同的 .Xdefaults,而不使用 xrdb 在根窗口導(dǎo)入這些配置。這樣不同的機(jī)器上的 xterm 使用不同的顏色,你就不容易搞錯(cuò)了。

怎樣更加深入的了解 Xwindow?

哎喲!我本來(lái)想寫(xiě)很多東西,后來(lái)發(fā)現(xiàn)要需要寫(xiě)的實(shí)在太多了。我沒(méi)那么多時(shí)間,沒(méi)辦法,給參考書(shū)目吧,你們自己去看。

學(xué)習(xí)使用 Xwindow 不是學(xué)習(xí)使用 Gnome,KDE,…… 很多書(shū)籍教用戶怎樣使用 Gnome, KDE 的菜單,配置程序…… 結(jié)果到了最后用戶還是沒(méi)能知道 Xwindow 是怎么回事。用那些菜單誰(shuí)不會(huì)啊?真是浪費(fèi)大家時(shí)間。

學(xué)習(xí) Xwindow,其實(shí)最好的一個(gè)辦法是看看 Xlib 編程的書(shū)籍,你可以在圖書(shū)館找到這樣的書(shū),我推薦 O'reily 的那本 Xlib 程序設(shè)計(jì)書(shū)(我忘了名字了),雖然它很老,但是那上面講解的 Xwindow 的工作原理一直都沒(méi)有變過(guò)。

如果你不會(huì)編程序,你可以不看編程的部分而得到很多深入的概念上的認(rèn)識(shí),比如窗口屬性,字體,顏色,…… 這些東西在你使用 Xwindow 時(shí)會(huì)有很大幫助。如果你真的要編寫(xiě) Xlib 程序,這本書(shū)就過(guò)時(shí)了一點(diǎn),你最好到 www.x.org去免費(fèi)下載最新的 Xlib 手冊(cè)來(lái)看。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉