FreeBSD連載(48):X Window的基本概念
設(shè)置好X服務(wù)器之后,就可以使用startx啟動(dòng)圖形界面,以使用其他圖形界面的經(jīng)驗(yàn)來使用X Window,但使用者常常會(huì)發(fā)現(xiàn)這個(gè)界面相當(dāng)簡單和粗糙。這是因?yàn)閄 Window具有很大的靈活性和可配置性,其最基本的系統(tǒng)只提供了最基本設(shè)置,如果要真正得到好用的界面,還需要進(jìn)一步的設(shè)置。
為了設(shè)置和使用X Window系統(tǒng),首先就需要了解相關(guān)的X Window概念。
X Window的基本概念
第一次接觸X Window系統(tǒng)的使用者很容易混淆X Window系統(tǒng)中的客戶機(jī)/服務(wù)器的概念,初次接觸X Window的使用者會(huì)認(rèn)為X Window下的客戶機(jī)/服務(wù)器的概念與普通網(wǎng)絡(luò)中的客戶機(jī)/服務(wù)器的概念不太相同。通常的觀念中,使用者使用客戶工作站,使用遠(yuǎn)端服務(wù)器提供的文件或打印服務(wù),而在X Window下,使用者使用X服務(wù)器進(jìn)行操作,而客戶程序可以運(yùn)行在本地或者遠(yuǎn)端計(jì)算機(jī)上。
如果進(jìn)一步理解客戶/服務(wù)器的概念,就會(huì)了解客戶/服務(wù)器的概念指的是具體運(yùn)行的進(jìn)程,而非計(jì)算機(jī)或使用者。不是與使用者聯(lián)系最密切的計(jì)算機(jī)就是客戶,而是首先要明確服務(wù)資源,然后再以資源提供者和資源占用者來進(jìn)行區(qū)分。在一般的客戶/服務(wù)器方式的應(yīng)用中,一般是客戶程序直接與使用者交互,因此就容易造成錯(cuò)誤的概念,以使用者為中心來區(qū)分客戶和服務(wù)器。
但在X Window下,服務(wù)資源為X服務(wù)器的顯示處理能力,X客戶程序要顯示圖形圖象,但它不能直接控制顯示硬件,只能使用由用戶面前的X服務(wù)器提供的顯示資源,同樣它也不能接受用戶輸入,也只能使用X服務(wù)器控制的鍵盤或鼠標(biāo)資源來接受輸入。在這里,X服務(wù)器是硬件的控制者,X客戶只是單純的執(zhí)行程序,只能使用X服務(wù)器提供的服務(wù)進(jìn)行輸入輸出。
X服務(wù)器(X Server)是一個(gè)管理顯示的進(jìn)程,必須運(yùn)行在一個(gè)有圖形顯示能力的計(jì)算機(jī)上。理論上,一臺(tái)計(jì)算機(jī)上可以同時(shí)運(yùn)行多個(gè)X服務(wù)器,每個(gè)X服務(wù)器能管理多個(gè)與之相連的顯示設(shè)備。
X客戶程序(X ClIEnt)是一個(gè)使用X服務(wù)器顯示其數(shù)據(jù)的程序,它可以運(yùn)行在與X服務(wù)器不同的計(jì)算機(jī)上。
X協(xié)議(X protocol)是X客戶程序和服務(wù)器進(jìn)行通信的一套協(xié)議,X協(xié)議支持網(wǎng)絡(luò),能在本地系統(tǒng)中和網(wǎng)絡(luò)實(shí)現(xiàn)這個(gè)協(xié)議,支持的網(wǎng)絡(luò)協(xié)議有TCP/IP、DECnet等。
X的這種任務(wù)劃分有幾個(gè)優(yōu)點(diǎn):
客戶程序可以在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行計(jì)算任務(wù),而使用的X服務(wù)器僅負(fù)責(zé)復(fù)雜的圖形顯示,充分發(fā)揮X服務(wù)器在顯示上的優(yōu)勢。
只有X服務(wù)器與硬件打交道,所有的客戶程序都是硬件無關(guān)的,很容易在不同的平臺(tái)上移植。
客戶程序可以在不同的計(jì)算機(jī)上運(yùn)行,從巨型機(jī)到個(gè)人計(jì)算機(jī),充分發(fā)揮網(wǎng)絡(luò)計(jì)算的優(yōu)越性。
盡管每個(gè)X客戶程序都可以對(duì)整個(gè)屏幕范圍內(nèi)進(jìn)行顯示操作,但標(biāo)準(zhǔn)的做法是先創(chuàng)建一個(gè)顯示窗口,此后客戶程序的所有顯示都相對(duì)于這個(gè)窗口進(jìn)行操作。這樣在同一屏幕內(nèi),就能同時(shí)顯示多個(gè)獨(dú)立的客戶程序,通過對(duì)窗口的管理在不同的程序之間進(jìn)行切換。每個(gè)窗口應(yīng)該位于屏幕的哪個(gè)位置,何時(shí)顯示,何時(shí)隱藏,以及窗口的標(biāo)題、四周如何顯示,這些都不應(yīng)該由產(chǎn)生這個(gè)窗口的客戶程序自己控制和維護(hù),否則就不能達(dá)到簡化設(shè)計(jì)的目的。X Window并沒有自己實(shí)現(xiàn)這些任務(wù),在X的設(shè)計(jì)原則中,這些代表GUI風(fēng)格的任務(wù)仍然是客戶程序的任務(wù),因此X將管理窗口的任務(wù)給予了一個(gè)特殊客戶程序 ── 窗口管理器,使用不同的窗口管理器將使X Window的外觀看起來截然不同。
X系統(tǒng)只負(fù)責(zé)顯示圖形,并不限制顯示和操作的風(fēng)格,因此不同的X Window的風(fēng)格并不相同,使用者可以根據(jù)自己的喜好進(jìn)行選擇。
因此X Window上,所有的窗口形成了一個(gè)樹狀結(jié)構(gòu)。X Window的窗口管理程序運(yùn)行在根窗口上,所有的其他窗口為根窗口的子窗口,而其他窗口上也有相應(yīng)的按鈕、對(duì)話框等組件,這些是它的子窗口。
由于X Window系統(tǒng)只提供了最基本的系統(tǒng)調(diào)用,而具體的窗口都有很多共性,因此要開發(fā)X應(yīng)用程序,應(yīng)該首先使用開發(fā)工具包,而沒有必要直接使用最基本的X Window的系統(tǒng)調(diào)用,以簡化寫作程序的工作量。不同的公司或組織開發(fā)了各種工具包來提供創(chuàng)建和管理具體窗口的構(gòu)件,例如Motif套件,OpenLook套件等。每種套件都提供了菜單、按鈕、對(duì)話框等圖形界面的標(biāo)準(zhǔn)構(gòu)件,還提供基本的窗口管理器。使用不同套件開發(fā)的程序,其顯示風(fēng)格也不相同,因此就在不同程序之間形成了不同的GUI風(fēng)格。Motif和Openlook就是兩種不同的圖形界面風(fēng)格,當(dāng)前Motif成為了商業(yè)X Window的一個(gè)標(biāo)準(zhǔn),很多商業(yè)軟件均基于Motif進(jìn)行開發(fā),而Openlook則沒有獲得更普遍的支持。
未完,待續(xù)。。。
