本文共4500余字,預計閱讀時(shí)間14分鐘,本文同步發(fā)布于知乎(賬號silaoA)和微信公眾號平臺(賬號偽碼人)。
前面連續多篇折騰了終端和命令行,本篇先初步了解X,并敬請期待下一篇:在Windows上折騰X。
圖形環(huán)境不是計算機系統與生俱來(lái)的,現在習慣了Windows、Mac OS的用戶(hù),對于圖形用戶(hù)界面(GUI)得心應手,然而早期的計算機系統只有個(gè)黑框框,僅少數專(zhuān)業(yè)人員能夠駕馭。一般認為,是施樂(lè )公司帕洛阿爾托研究中心 (Xerox PARC)在1973年首次研發(fā)出圖形用戶(hù)界面,具備了現代圖形環(huán)境基本元素。這個(gè)激動(dòng)人心的發(fā)明,還沒(méi)有被施樂(lè )公司好好利用起來(lái)掙錢(qián)的時(shí)候,很快被蘋(píng)果、微軟等多家公司“借鑒”,伴隨著(zhù)PC發(fā)展,各家GUI系統群雄逐鹿,沒(méi)有統一標準。
1984年MIT大學(xué)創(chuàng )造了X規范,就類(lèi)似TCP/IP協(xié)議棧一樣。本義是在UNIX系統構建圖形化視窗系統的設計方案,準確名稱(chēng)叫“X Window System”,注意拼寫(xiě)不是“Windows”,與微軟、與Windows沒(méi)任何關(guān)系。
X規范在1987年形成了第11版(Version 11),1994年發(fā)布第11版的第6次發(fā)行(Release 6),確切版本名即為“X11R6”,后來(lái)成為UNIX上圖形視窗系統標準規范,也簡(jiǎn)稱(chēng)“X11”或者“X”,目前最新版本是2012年發(fā)布的“X11R7.7”。
“X11”采用了C/S的架構,在其設計下,整個(gè)圖形視窗系統主要分為3個(gè)部分:
3個(gè)部分, X Server是整個(gè)X Window System的中心,協(xié)調X客戶(hù)端和窗口管理器的通信。
“X11”充分遵循UNIX設計哲學(xué),盡可能簡(jiǎn)單,除非必要絕不新增功能,其實(shí)也意味著(zhù)粗糙、原始;提供機制而非具體策略,如菜單、按鈕等元素細節并不做規定,交給窗口管理器、客戶(hù)端程序等自主實(shí)現,于是不同的實(shí)現風(fēng)格各異。任何遵循了X11規范的客戶(hù)端程序和服務(wù)器程序配合起來(lái),即可正常運行,X11得益其開(kāi)放性,迅速發(fā)展,成為UNIX系統的事實(shí)標準。
假定多個(gè)X客戶(hù)端程序及窗口管理器在主機A上,某個(gè)X Server(如下文X.Org Server)運行在主機B上,程序運行過(guò)程可簡(jiǎn)化如下過(guò)程。

以上過(guò)程,主機A和B的CPU架構、操作系統可能都不相同,若A和B是同一個(gè)主機,就相當于在本地繪圖、顯示了。
X11只是規范,并不是代碼實(shí)現。MIT另外只給了工具包和參考實(shí)現,參考實(shí)現的意思是不考慮性能只演示工作原理。
1992年,XFree86項目順利開(kāi)展,作為X Window System的一個(gè)早期開(kāi)源實(shí)現,兼容IBM PC機(XFree86中86的含義),得到廣泛應用,項目地址http://www.xfree86.org。至2004年,由于項目?jì)炔繝幷摵驮S可證分歧,XFree86從GPL協(xié)議改為XFree86 License發(fā)布,項目從開(kāi)放走向封閉。
2004年,X.Org基金會(huì )成立,開(kāi)始領(lǐng)導X項目,不僅推動(dòng)X(jué)規范本身發(fā)展,還在XFree86 4.4 RC2版基礎上開(kāi)發(fā)了X規范的另一個(gè)實(shí)現——X.Org Server,原來(lái)XFree86上很多開(kāi)發(fā)者也轉向了X.Org Server,由于更加開(kāi)放而被多數GNU/Linux發(fā)行版使用,項目官網(wǎng)https://www.x.org,源代碼庫地址 http://cgit.freedesktop.org/xorg/xserver,2019年發(fā)布的穩定版為1.20.5。
X.Org Server實(shí)現了2個(gè)開(kāi)發(fā)庫,Xlib和XCB,便于開(kāi)發(fā)者編寫(xiě)X應用程序。X.Org Server實(shí)現了“X Window System”核心規范及多個(gè)擴展組件。X.Org Server繼承XFree86項目的twm。xdm。通常透過(guò)字符終端登錄Linux主機時(shí),用戶(hù)僅能獲得字符環(huán)境,而X顯示管理器實(shí)現XDMCP規范(X Display Manager Control Protocol),為多用戶(hù)提供圖形登錄、會(huì )話(huà)管理服務(wù),允許用戶(hù)登錄時(shí)自主選擇使用哪個(gè)Window Manager等。除上X Server,X11系統客戶(hù)端、窗口管理器也有著(zhù)很多種實(shí)現。
Xlib及其替代者XCB開(kāi)發(fā)庫過(guò)于靠近底層,于是就出現了進(jìn)一步封裝、抽象級別更高的GUI庫,如QT、GTK等,比方說(shuō)前者提供繪制點(diǎn)線(xiàn)面的方法,后者提供繪制按鈕、滾動(dòng)條、下拉菜單等控件的方法,更高層次的抽象對于簡(jiǎn)化開(kāi)發(fā)工作的重要性不言而喻。在眾多X客戶(hù)端程序中,有一個(gè)比較著(zhù)名——xterm,它是基于X的終端模擬器,兼容VT102,也是X研發(fā)初期所計劃的少數客戶(hù)端程序之一。GNU/Linux發(fā)行版中設備/dev/tty1~tty6對應著(zhù)6個(gè)全屏純字符的終端模擬器,通過(guò)Ctrl-Alt-F1~F6切換,顯示能力有限;如果運行到圖形環(huán)境(通過(guò)Ctrl-Alt-F7切換),一般都集成了xterm,可配置的特性十分豐富,其他的諸如Gnome Terminal、Konsole、xfce-term等終端模擬器,或基于xterm,或參考xterm,增加了更多高級功能,如tab標簽頁(yè)、圖片顯示等。Metacity、Mutter、KWin、 vtwm、Xfwm、Compiz等,功能、風(fēng)格各異,有的注重簡(jiǎn)潔高效,有的注重外觀(guān)酷炫。X.Org Server占絕對統治地位,但也有其他衍生變種或移植,如XQuartz以及Cygwin/X、Xming、WeirdX,它們所支持的系統平臺、底層庫也都不一樣。需注意的是,X Window System誕生比Linux早,也不是UNIX或Linux內核的一部分,而是用戶(hù)態(tài)的軟件組件,用戶(hù)在系統上可以選擇啟用或禁用X。
X Window System各個(gè)部分都有著(zhù)多種實(shí)現,X規范本身特別偏底層,加之GNU/Linux自由開(kāi)放的特點(diǎn),有不少項目在X規范基礎之上進(jìn)一步封裝,并把上述各組件、圖標、主題、及其他特色組件打包在一起,形成開(kāi)箱即用的桌面環(huán)境(Desktop Environment),常見(jiàn)如Gnome、KDE、Unity、XFCE、LXDE等,不一一列舉,每種桌面環(huán)境都有不少用戶(hù)群體,所支持的系統平臺、底層庫也各不一樣。
另值得一提的是,中國武漢深之度科技公司基于Debian(早先基于Ubuntu)打造的GNU/Linux發(fā)行版Deepin,擁有自己的桌面環(huán)境DDE,即Deepin Desktop Environment,Deepin系統在DistroWatch上排名比較靠前,DDE也同時(shí)支持其他GNU/Linux發(fā)行版。

X11規范的模塊化設計,最大的好處是X Client和X Server相互獨立,并不需要了解彼此所處的硬件、軟件環(huán)境。常見(jiàn)的X應用程序諸如xterm、輸入法、Web瀏覽器、Office套件等等,部署在一臺Linux主機上,如果這個(gè)主機也同時(shí)部署了X Server,那么運行這些X應用程序毫無(wú)障礙,這是作為桌面計算機的常見(jiàn)應用場(chǎng)景。
另一種應用場(chǎng)景,Linux主機通常作為服務(wù)器使用,未配備比較好的圖形顯卡等硬件,也沒(méi)有必要部署X Server,從終端登錄到Linux主機也僅有字符界面,那X應用程序該如何運行呢?可以在圖形顯卡等硬件設備比較好的Windows/Mac主機上部署X Server,保持與Linux主機網(wǎng)絡(luò )連通,在Linux主機上寫(xiě)好配置文件,配置好X Server地址和X11請求轉發(fā)(X11 Forwarding),從任意一個(gè)終端登錄到Linux主機并啟動(dòng)X(jué)客戶(hù)端應用程序,就可以使程序的圖形界面顯示在Windows/Mac主機上,并與用戶(hù)交互。事實(shí)上,在1990年代初期,就有這樣的硬件設備,稱(chēng)為“X終端機(X terminal)”,專(zhuān)門(mén)部署X Server,將遠端UNIX主機上的圖形界面程序顯示出來(lái),這也正是MIT研發(fā)X的初衷之一。
從場(chǎng)景描述看出,與常規Client/Server所不同的是,通常X Server部署在本地用戶(hù)主機上,監聽(tīng)、調控本地用戶(hù)主機的硬件設備,而X Client可能部署在遠端服務(wù)器/嵌入式設備上,也可能在本地。
一方面,X工作在用戶(hù)空間,X客戶(hù)端程序不能直接訪(fǎng)問(wèn)顯示驅動(dòng)、X Server與X客戶(hù)端及窗口管理器之間繁瑣的通信流程,拉低了繪圖效率;另一方面,通過(guò)擴展、補丁手段允許在本地直接訪(fǎng)問(wèn)顯示驅動(dòng),又造成穩定性問(wèn)題??傊?,X的設計隨著(zhù)新技術(shù)發(fā)展而顯得臃腫、過(guò)度復雜,背負了沉重的歷史包袱。
2008年,紅帽公司(RedHat)的開(kāi)發(fā)者Kristian H?gsberg利用業(yè)余時(shí)間搞起了Wayland項目,2010年Wayland加入了Freedesktop.org項目,項目官網(wǎng)為https://wayland.freedesktop.org,代碼開(kāi)源地址https://cgit.freedesktop.org/wayland/wayland。
Wayland是一個(gè)新的圖形窗口系統方案,一套旨在取代X的新規范。與X最大的不同是,Wayland將X中的Server和窗口管理器整合到一起作為服務(wù)端,稱(chēng)為合成器(Compositor),架構上只分了客戶(hù)端和合成器兩大部件,有沒(méi)有覺(jué)得終于看著(zhù)舒服了一些。
假定多個(gè)Wayland客戶(hù)端程序在主機A上,某個(gè)Wayland Compositor(如Weston)運行在主機B上。

Wayland適用于桌面設備,也適用于移動(dòng)設備,原來(lái)基于X的GUI庫、桌面環(huán)境很快適配了對Wayland的支持,如Qt、Gnome、KDE、Compiz等,Ubuntu更是早在2010年就將Unity切換到適配Wayland。Wayland依賴(lài)了較多Linux內核技術(shù),不易移植到其他系統平臺。
Wayland開(kāi)發(fā)者在X.Org Server基礎上打上系列補丁,稱(chēng)為XWayland,目的是在Wayland規范之上搞成新的X Server,在Wayland環(huán)境中運行X客戶(hù)端程序時(shí),Wayland合成器(如Weston)調用XWayland進(jìn)行服務(wù),以便在過(guò)渡到Wayland過(guò)程中保持對X的兼容性。
2013年,Ubuntu背后的開(kāi)發(fā)商Canonical公司搞出來(lái)Mir項目,計劃用Mir取代X并兼容X客戶(hù)端程序,并且同時(shí)支持桌面設備和移動(dòng)設備,統一用戶(hù)體驗。這種搞分裂的行為招致了批評,萬(wàn)萬(wàn)沒(méi)想到的是,2017年Canonical公司又放棄了Mir項目并加大對Wayland的支持。
盡管有這樣那樣的問(wèn)題,X仍然是GNU/Linux、UNIX上的主力,Wayland作為強有力的競爭對手,在遠程桌面方面亦存在問(wèn)題,重度依賴(lài)Linux內核技術(shù)不易移植到其他系統平臺。在微軟的WSL崛起之時(shí),X的優(yōu)勢倒可以盡情發(fā)揮出來(lái)。
敬請期待下一篇,在Windows上折騰X。
聯(lián)系客服