一.X-Window系統(tǒng)簡(jiǎn)介
X-Window(也常稱為X11或X)系統(tǒng)是一種以位圖方式顯示的軟件視窗系統(tǒng),,最初是1984年麻省理工學(xué)院的研究,之后變成UNIX,、類UNIX,、以及OpenVMS等操作系統(tǒng)所一致適用的標(biāo)準(zhǔn)化軟件工具包及顯示架構(gòu)的運(yùn)作協(xié)議。X Window系統(tǒng)通過軟件工具及架構(gòu)協(xié)議來(lái)建立操作系統(tǒng)所用的圖形用戶界面,,此后則逐漸擴(kuò)展適用到各形各色的其他操作系統(tǒng)上?,F(xiàn)在幾乎所有的操作系統(tǒng)都能支持與使用X。更重要的是,,今日知名的桌面環(huán)境——GNOME和KDE也都是以X Window系統(tǒng)為基礎(chǔ)建構(gòu)成的,。
二.X-Window的發(fā)展歷史
知曉過去才能明白現(xiàn)在,預(yù)見將來(lái),,我們需要清楚的了解X-Window的發(fā)展歷史,,盡管這有些曲折。
1,、 前身:
事實(shí)上,,早在X出現(xiàn)前已有幾個(gè)位圖式的軟件顯示系統(tǒng)已經(jīng)存在,例如帕洛阿爾托研究中心(施樂公司)提出的Alto(1973年)和Star(1981年),、蘋果計(jì)算機(jī)提出的Lisa(1983年)和麥金塔(1984年),、在UNIX世界也有雅典娜工程(1982年)和Rob Pike的Blit終端機(jī)(1984年),。
1983年之前稱為W-Window系統(tǒng)的窗口系統(tǒng)是X的真正前身(在拉丁字母里面 X 直接接在 W 后面)。W-Window系統(tǒng)運(yùn)行于系統(tǒng)V之上,,W使用一個(gè)支持終端機(jī)和圖形窗口的網(wǎng)絡(luò)協(xié)議,,而服務(wù)器維護(hù)顯示的列表。
2,、 起源:
X-Window于1984年在麻省理工學(xué)院(MIT)電腦科學(xué)研究室開始開發(fā)的,,當(dāng)時(shí)Bob Scheifler正在發(fā)展分散式系統(tǒng)(distributed system),同一時(shí)間DEC公司的 Jim Gettys 正在麻省理工學(xué)院Athena計(jì)劃的一部分,。兩個(gè)計(jì)劃都需要一個(gè)相同的東西——一套UNIX機(jī)器上運(yùn)行優(yōu)良的視窗系統(tǒng),。因此合作關(guān)系開始展開,他們從斯坦福(Stanford)大學(xué)得到了一套叫做W的實(shí)驗(yàn)性視窗系統(tǒng),。因?yàn)槭歉鶕?jù)W視窗系統(tǒng)的基礎(chǔ)開始發(fā)展的,,當(dāng)發(fā)展到了足以和原先系統(tǒng)有明顯區(qū)別時(shí),他們把這個(gè)新系統(tǒng)叫做X,。
3,、版本發(fā)展歷史
(注:X11協(xié)議設(shè)計(jì)由Scheifler領(lǐng)導(dǎo),并在nascent Internet的開放郵件列表上廣泛討論,。于是X成為最早的較大規(guī)模的開源軟件項(xiàng)目之一)
4,、 對(duì)X-Window的管理歷史
1)MIT X協(xié)會(huì)與X協(xié)會(huì)公司
1987年,隨著X11取得明顯成功,,MIT希望免除X的管理責(zé)任,。但是1987年6月與9個(gè)廠商舉行會(huì)晤,這些廠商表示他們相信為了避免 X 由于商業(yè)因素而分裂,,需要中立方的參與,。1988年1月,X協(xié)會(huì)(X Consortium)做為非營(yíng)利廠商團(tuán)體而成立,,由Scheifler擔(dān)任主管,,而Keith Packard擔(dān)任高級(jí)開發(fā)人員,確保 X 能持續(xù)以中立超然的立場(chǎng)提供商業(yè)與學(xué)術(shù)教育所需的開發(fā),。1993年,,X協(xié)會(huì)公司(X Consortium, Inc.;非營(yíng)利性質(zhì)的公司)做為MIT X協(xié)會(huì)的接繼者而成立
2)開放團(tuán)體
1997年中,,X Consortium將X的管理交給開放團(tuán)體(The Open Group),,而它是1996年由開源軟件基金會(huì)(Open Software Foundation;OSF)和X/Open合并成立的廠商團(tuán)體,。
3)X.Org
1999年5月開放團(tuán)體組建了X.Org,。X.Org指導(dǎo)了X11R6.5.1之前的版本發(fā)布。在此期間X的開發(fā)死氣沉沉,。2003年,,隨著Linux的流行X被大量安裝。但是X.Org幾乎無(wú)聲無(wú)息,,活躍的開發(fā)由XFree86承擔(dān),。
4)XFree86
在19*至1990年期間,托馬斯?羅爾把X11R4分類器上提供的X服務(wù)器程序的源代碼下載到運(yùn)行速度僅為33MHz的386PC 上,,成功運(yùn)行了被他稱為是X38611.1的X服務(wù)器,。這就是XFree86的雛形。
1992年后多數(shù)技術(shù)創(chuàng)新都發(fā)生在XFree86項(xiàng)目中,。1999年,,由于眾多對(duì)于XFree86在Linux上應(yīng)用有興趣的硬件廠商的推動(dòng),并也已經(jīng)成為最普及的X版本,,XFree86成為X.Org的榮譽(yù)成員(不付費(fèi)),。
但是自2003年開始,XFree86內(nèi)部卻發(fā)生了爭(zhēng)論,。它被認(rèn)為太教堂式了,,如同它的開發(fā)模式;開發(fā)者不能通過CVS做提交,,而廠商被迫維護(hù)大量補(bǔ)丁,。2003年3月,自從最初的MIT X Consortium結(jié)束之后就參加XFree86的Keith Packard由于被認(rèn)為態(tài)度不良而被驅(qū)逐
X.Org和XFree86開始討論能夠有助于X開發(fā)的重組Jim Gettys早在2000年就熱心于開放的開發(fā)模式,。Gettys,、Packard和其他幾個(gè)人開始討論有效管理X和開放式開發(fā)的細(xì)節(jié)。
最終就像是X11R*許可證爭(zhēng)議的回響,,XFree86于2004年2月在更加嚴(yán)格許可證下發(fā)布了4.4 ,。許多依賴X的項(xiàng)目認(rèn)為該許可證無(wú)法接受,特別是它和GNU General Public License不兼容,。這引起一場(chǎng)論戰(zhàn),,許多人認(rèn)為到了該對(duì)XFree86分叉(fork)的時(shí)候了,許多Linux發(fā)行版,,包括Fedora,、Gentoo都紛紛在最新的版本中使用X.Org基金會(huì)的發(fā)布代替XFree86。
5)X.Org基金會(huì)
2004年年初X.Org基金會(huì)成立,。這意味著 X 在管理上的根本轉(zhuǎn)變,。1988年以來(lái) X 的管理者(包括過去的X.Org)都是廠商組織,而基金會(huì)由軟件開發(fā)者領(lǐng)導(dǎo),,采用依靠外部參與的集市模式的社區(qū)開發(fā),。其成員身份對(duì)個(gè)人開放,法人成員則成為贊助者,。X.Org還開始同freedesktop.org密切合作
三.X的設(shè)計(jì)原則
X的設(shè)計(jì)原則,,早在最初仍在麻省理工學(xué)院的階段(1984年)就已經(jīng)成形,,由Bob Scheifler和Jim Gettys兩人制訂出X最早的開發(fā)、強(qiáng)化,、改進(jìn)原則,,原則大體如下:
1、除非沒有它就無(wú)法完成一個(gè)真正完整的應(yīng)用程序,,否則不用增加新的功能,。
2、決定一個(gè)系統(tǒng)不是什么和決定它是什么同樣重要,。與其去適應(yīng)整個(gè)世界的需要,,寧可使得系統(tǒng)可以擴(kuò)展,如此才能以持續(xù)兼容的方式來(lái)滿足新增需求
3,、只有完全沒實(shí)例時(shí),,才會(huì)比只有一個(gè)實(shí)例來(lái)的糟。
4,、如果問題沒完全弄懂,,最好不要去解決它
5、如果可以通過10%的工作量得到90%的預(yù)期效果,,應(yīng)該用更簡(jiǎn)單的辦法解決,。
6、盡量避免復(fù)雜性,。
7,、提供機(jī)制而不是策略,有關(guān)用戶界面的開發(fā)實(shí)現(xiàn),,交給實(shí)際應(yīng)用者自主,。(這和驅(qū)動(dòng)開發(fā)的思想一脈相承)
之后,上述原則中的第一項(xiàng)原則在設(shè)計(jì)X11時(shí)被加以修改,,修訂成:“除非已有真正的應(yīng)用程序,,真的需要X為其修訂、增訂等支持,,否則不會(huì)為X增加新功能,。”X基本上一直遵循這些原則,參考實(shí)現(xiàn)的擴(kuò)展及改進(jìn)也是以此原則的角度來(lái)著手,,也因?yàn)榉钚猩鲜鲈瓌t,,使至今的最新版X仍能與最初(1987年)發(fā)布的協(xié)議標(biāo)準(zhǔn)近乎完全兼容。
這些原則性的東西短短幾句話,,就為一個(gè)龐大項(xiàng)目奠定了一個(gè)良好的基調(diào)和發(fā)展方向,,使X問世以來(lái)經(jīng)久不衰,沒有這幾個(gè)原則是做不到的。
四.X-Window的功能
X-Window提供了一組非常底層的服務(wù),,客戶端程序發(fā)送請(qǐng)求給X-Window, X Window根據(jù)請(qǐng)求完成相應(yīng)服務(wù),。通過這些服務(wù),客戶端程序可以構(gòu)建期望的用戶界面,。根據(jù)不同的功能,,可以把這些服務(wù)分為以下幾大類:
1、處理輸入
X-Window從鍵盤和鼠標(biāo)接受輸入,,這些輸入數(shù)據(jù)被當(dāng)作”事件”傳送給適當(dāng)?shù)目蛻舳顺绦颉V劣谀膫€(gè)窗口應(yīng)該接受到這些事件,,是依賴于窗口管理器的(窗口管理器實(shí)際上也是一個(gè)客戶端),,典型的事件包括按鍵,鼠標(biāo)移動(dòng),,鼠標(biāo)按下/放開等,。
輸入設(shè)備往往是與硬件平臺(tái)相關(guān)的,而且又是獨(dú)占資源,,所以用X-Window管理是理所當(dāng)然的,。應(yīng)用程序通常不需要關(guān)心具體的設(shè)備,只要處理相應(yīng)的事件就行了,,像mouse和筆點(diǎn)可能發(fā)出同樣的事件,,而應(yīng)用程序不用區(qū)分它們。輸入事件也可以通過XTest擴(kuò)展,,由軟件模擬出來(lái)的(通常用來(lái)實(shí)現(xiàn)軟件鍵盤)
2,、按層次形組織窗口
X-Window提供服務(wù)讓客戶端程序創(chuàng)建/銷毀窗口,所謂的窗口就是屏幕上的矩形區(qū)域,,它是可以層層嵌套的,,有很多操作可以作用于窗口(如,查詢或改變窗口的大小和位置等),,X-Window的主要功能之一就是負(fù)責(zé)管理這種按層次形組織的窗口,。
不過X-Window管理這些窗口是被動(dòng)進(jìn)行的,由窗口管理器根據(jù)用戶的行為決定,。它請(qǐng)求X-Window做相應(yīng)的動(dòng)作,,比如移動(dòng)窗口,調(diào)整窗口的大小,,改變窗口的前后關(guān)系等等,。第一次接觸X-Window時(shí),得知窗口管理器是一個(gè)普通的客戶端時(shí),,我覺得驚訝,,這種設(shè)計(jì)真是太先進(jìn)了,其實(shí)它正是遵循了提供機(jī)制而不是策略這一原則。
現(xiàn)在已經(jīng)有很多窗口管理器的實(shí)現(xiàn)可用,,它們提供不同的風(fēng)格和功能,,有的用于PC,有的用于嵌入式系統(tǒng),,像matchbox就是在嵌入式上比較流行的,,像Nokia的N770/N800就是用的matchbox。
3,、提供圖形操作
X-Window提供了一些基本的畫圖操作,,如畫直線、矩形,、圓弧和多邊形等,。這些圖形的顏色、線寬,、填充類型都可以由客戶端程序指定,。X-Window同時(shí)提供了許多位圖操作,這些位圖操作可以作用于了窗口的各個(gè)區(qū)域,。
X-Winwod還會(huì)充分挖掘硬件的加速特性,,像填充、畫直線和圖像疊加等操作,,如果硬件支持相應(yīng)的加速功能,,就可以通過硬件實(shí)現(xiàn),否則就用軟件實(shí)現(xiàn),。
4,、提供文本和字體操作
X-Window提供了字體相關(guān)的操作??蛻舳顺绦蚩梢哉?qǐng)求X-window在指定的區(qū)域用指定的字體顯示指定的字符串,,當(dāng)然在此之前應(yīng)該請(qǐng)求X-window加載字體,加載后客戶端程序可以得到關(guān)于字體的一些信息,。
實(shí)際上,,這一功能由于客戶端字體繪制的流行,而大大弱化了,,現(xiàn)在的字體差不多都是在客戶端繪制好后,,再通過X Render擴(kuò)展顯示到X-Window去的。在fontconfig/freetype/pango/cairo的幫助,,在客戶端繪制字體更容易使用,。
名詞解釋:
位圖:
位圖(Bitmap),又稱光柵圖(Raster graphics),,是使用像素陣列來(lái)表示的圖像,,每個(gè)像素的色彩信息由RGB組合或者灰度值表示。根據(jù)顏色信息所需的數(shù)據(jù)位分為1、4,、8,、16、24及32位等,,位數(shù)越高顏色越豐富,,相應(yīng)的數(shù)據(jù)量越大。其中使用1位表示一個(gè)像素顏色的位圖因?yàn)橐粋€(gè)數(shù)據(jù)位只能表示兩種顏色,,所以又稱為二值位圖,。通常使用24位RGB組合數(shù)據(jù)位表示的的位圖稱為真彩色位圖。
視窗系統(tǒng):
視窗系統(tǒng)(Windowing system) 是“使用視窗當(dāng)作它的主要象征之一”的圖形使用者接口的構(gòu)成元件,。更為明確的說(shuō),,是桌面環(huán)境的構(gòu)成元件。視窗系統(tǒng)支撐著視窗管理員的實(shí)現(xiàn)(implementation),;對(duì)于“圖像硬件(graphics hardware)、指向裝置(pointing devices)比如鼠標(biāo)與鍵盤等裝置”提供基本支持,。繪制鼠標(biāo)光標(biāo),,一般也與視窗系統(tǒng)相關(guān)。
從程式設(shè)計(jì)師的觀點(diǎn)來(lái)看,,視窗系統(tǒng)是作出繪圖的基本單位,,比如字型繪制,或是在屏幕上劃線,,有效地提供繪圖硬件的一種抽象概念,。
視窗系統(tǒng)能讓電腦使用者同時(shí)與數(shù)個(gè)程式一起工作。每個(gè)程式在他自己的視窗中執(zhí)行,,也就是屏幕上的矩形之中,。大部份的視窗系統(tǒng)允許視窗重疊,且提供使用者執(zhí)行標(biāo)準(zhǔn)的操作,,像是移動(dòng)/改變視窗尺寸,,把視窗送到前景/背景,和最小化/最大化一個(gè)視窗,。
有些視窗系統(tǒng),,像是 X,有先進(jìn)的能力比如網(wǎng)絡(luò)通透性,,允許使用者在遠(yuǎn)端機(jī)器上執(zhí)行圖形的應(yīng)用程式,。
雅典娜工程:
雅典娜工程是MIT、DEC以及IBM的一個(gè)聯(lián)合工程,,歷時(shí)八年,,于1991年6月30日告一段落。該工程意圖建立一個(gè)計(jì)算機(jī)環(huán)境,容納多達(dá)一萬(wàn)臺(tái)工作站,,以及各種硬件,。用戶可以訪問其中的任何工作站,存取任何文件,、程序,,但在用戶界面以及服務(wù)傳遞上,看起來(lái)不會(huì)有大的區(qū)別,。
這個(gè)工程產(chǎn)生了許多現(xiàn)在被廣為使用的技術(shù),,比如X Window System、Kerberos,。雅典娜工程開發(fā)的其他技術(shù)包括Xaw部件工具箱,、Zephyr通知服務(wù)、第一個(gè)即時(shí)通訊服務(wù),,以及Hesiod名,,還有目錄服務(wù)。