簡介
X Window是一種以點陣圖方式顯示的軟體視窗系統,最初是1984年麻省理工學院的研究成果,之後變成UNIX、類UNIX、以及OpenVMS等作業系統所一致適用的標準化軟體工具包及顯示架構的運作協定。
X Window通過軟體工具及架構協定來建立作業系統所用的圖形用戶界面,此後則逐漸擴展適用到各形各色的其他作業系統上,幾乎所有的作業系統都能支持與使用X Window,GNOME和KDE也都是以X Window為基礎建構成的。
X Window向用戶提供基本的視窗功能支持,而顯示視窗的內容、模式等可由用戶自行定製,在用戶定製與管理X Window系統時,需要使用視窗管理程式,視窗管理程式包括AfterStep、Enlightenment、Fvwm、MWM和TWM Window Maker等,供習慣不同的用戶選用。
可以定製的視窗環境在給用戶帶來了個性化與靈活性的同時,要求用戶有相對比較高的使用水平,不過這種機制帶來的好處也是明顯的,它不象Microsoft Window那樣將視窗元件的風格、桌面、操作方式等千篇一律地規定死,只可以換一下牆紙、圖示、調整字型大小等等,在X Window系統中可以有多種桌面環境的選擇。
發展歷程
前身
在X-Window出現前已有幾個點陣圖式的軟體顯示系統已經存在。例如:施樂公司提出的Alto(1973年)和Star(1981年)、阿波羅電腦公司提出的Display Manager (1981)、蘋果計算機提出的Lisa(1983年)和麥金塔(1984年)、在UNIX世界也有雅典娜工程(1982年)和Rob Pike的Blit終端機(1984年)。
1983年之前稱為W-Window系統的視窗系統是X的真正前身(在拉丁字母裡面 X 直接接在 W 後面)。W-Window系統運行於系統V之上,W使用一個支持終端機和圖形視窗的網路協定,而伺服器維護顯示的列表。
起源
X-Window於1984年在麻省理工學院(MIT)電腦科學研究室開始開發的,當時Bob Scheifler正在發展分散式系統(distributed system),同一時間DEC公司的 Jim Gettys 正在麻省理工學院Athena計畫的一部分。兩個計畫都需要一個相同的東西——一套UNIX機器上運行優良的視窗系統。因此合作關係開始展開,他們從史丹福大學得到了一套叫做W的實驗性視窗系統。因為是根據W視窗系統的基礎開始發展的,當發展到了足以和原先系統有明顯區別時,X Window為開發基於圖形的分散式應用程式提供軟體工具和標準應用程式編程接口。完成的套用與硬體無關,這意味著它們可以在支持X Window環境的任何系統上運行,這種完整環境通常被簡稱“X”。
部分版本
第10版
1985年底。直到此時,在MIT以外的人和組織,才開始對X有實質的貢獻。
第一套商業化的X產品DEC於1986年1月推出 VAXstation-II/GPX。
第10版第3次發行:1986年 2月。從此時起,X開始流傳於世,人們把它移植到許多新的系統上。
第10版第4次發行:1986年11月。
1987年 1月在MIT舉辦第一次X技術會議。
在1986年,第10版X無法滿足所有的需求已非常明顯。MIT 和 DEC便從事於完整協定(protocal)的重新設計。這就是X第11版(這就是所謂的X11)。
第11版
第 1次發行:1987年 9月。
X協會成立:MIT X協會成立的目的是為了研究發展及控制標準。
第二次X技術會議:1988年 1月。
第11版第 2次發行:1988年 3月。
第11版第 3次發行:1988年10月。
特性
X Window在位映射螢幕上的一個或多個視窗中運行程式。用戶可以在每個視窗中同時運行多個程式,並且可以通過用滑鼠在視窗之間進行切換。
x伺服器的程式在本地工作站上運行,並且管理它的視窗和程式。
每個程式視窗都被稱為x Client,並且與在同一個機器上運行的x Server程式以C/S進行互動。
x Server處理所有X Client處理程式,以及通過訊息傳遞系統和其它客戶互動工作。x Server控制整個本地環境,因而當訪問存儲器和其它系統資源時,程式間進行合作。
x Server運行x Window管理器程式,這個程式提供GUI界面。可以使用兩種視窗管理器:Motif和Open Look。它們在功能上是類似的,並且運行相同的程式。
在本地機器運行的x Server可以和遠程計算機上運行的程式進行互動,並且在本地視窗顯示這些程式的輸出結果。它是一種C/S的關係,但是本地服務端具有完整許可權,遠程進程被稱為客戶端,而不是服務端,這是因為它們處於這個本地的x Server的控制之下。
在Internet和其它廣域網環境中,上面的最後一點是非常重要的。用戶可以對讓在遠程計算機上的程式工作。這個遠程程式在它需要經常訪問的資源(如磁碟數據)附近運行。只有修改用戶螢幕信息才會通過遠程鏈路進行傳輸,從而避免了整個程式和它的數據都傳輸到本地系統進行處理時可能出現的瓶頸。
x Server和遠程X Client之間的接口是面向事件的,並且是基於X協定的。這種協定在傳輸控制協定/Internet協定(TCP/IP)之上運行。在一些情況下,一些廠商通過增加像三維圖象這樣的功能來增強了X Window環境。X Window環境的一個優勢是,伺服器應用程式可以在任何平台上運行,並且這個應用程式可以在公用運輸協定之上與這個客戶機交換一組訊息。於是,開發人員就可以在許多系統上建立X Window-認可的應用程式,並且這些應用程式可以被任何支持X Window的工作站訪問。
X Window是開放軟體基金會(OSF)的Motif和Open Look系統的用戶接口。SunSoft的Solaris2作業系統也實現了由AT&T開發的X Window實現。
在X Window下,服務資源為X服務端的顯示提供處理能力,X客戶端用於顯示圖形圖像,但它不能直接控制顯示設備,只能使用用戶面前的X服務端提供的顯示資源。同樣它也不能接受用戶輸入,也只能使用X服務端控制的鍵盤或滑鼠接受輸入。在這裡,X服務端控制硬體的運行狀況,X客戶端只是單純的執行程式,只能使用X服務端提供的服務進行輸入輸出。
基本部件
X系統由3個相關的部分組合起來的。
服務端(Server)
Server是控制顯示器和輸入設備(鍵盤和滑鼠)的軟體。Server可以創建視窗,在視窗中繪圖和文字,回應Client程式的“需求”(requests),但它不會自己完成,只有在Client程式提出需求後才完成動作。
每一套顯示設備只對應惟一的Server,而Server一般由系統供應商提供,通常無法被用戶修改。對作業系統而言,Server只是一個普通的用戶程式而已,因此很容易更換新版本,甚至更換成第三方提供的原始程式。
客戶端(Client)
Client是使用系統視窗功能的一些應用程式。在X下的應用程式稱做Client,原因是它是Server的客戶,要求Server回應它的請求完成特定動作。
Client無法直接影響視窗行為或顯示效果,它們只能送一個請求(request)給Server,由Server來完成這些的請求。典型的請求通常是“在某個視窗中寫‘Hello World’的字元串”,或者從A到B劃一條直線。
Client的功能大致可分為兩部分:向Server發出“需求”只是它的一部分功能,其他的功能是為用戶執行程式而準備的。例如輸入文字信息、作圖、計算等等。通常,Client程式的這一部分是和X獨立的,它對於X幾乎不需要知道什麼。通常,應用程式(特別是只大型的標準繪圖軟體、統計軟體等)對許多輸出設備具有輸出的能力,而在X視窗中的顯示只是Client程式許多輸出中的一種,所以,Client程式中和X相關的部分只占整個程式中很小的一部分。
用戶可以通過不同的途徑使用Client程式:通過系統提供的程式使用;通過第三方的軟體使用;或者用戶為了某種特殊套用而自己編寫的Client程式來使用。
通訊通道 (communication channel)
client藉著它送 "需求" 給server,而server藉著它回送狀態 (status) 及一些其它的資訊 (information)。
只要 client 和 server 都知道如何使用通道,通道的本身並不是很重要,在系統或網路上支援通訊型態的需求是內建於系統基本的X視窗函式館(library),所有和通訊型態有關的事都從函式館獨立出來,client和server之間的通訊只要藉著使用這函式館(在標準X版為xlib)。
Server和Client之間的通信
Server和Client通信的方式大致有兩類,對應於X系統的兩種基本操作模式。
第一類,Server和Client在同一台機器上執行,它們可以共同使用機器上任何可用的通信方式做互動式信息處理。在這種模式下,X可以同其他傳統的視窗系統一樣高效工作。
第二類,Client在一台機器上運行,而顯示器和Server則在另一台機器上運行。因此兩者的信息交換就必須通過彼此都遵守的網路協定進行,最常用的協定為TCP/IP。這種通信方式一般被稱為網路透明性,這也幾乎是X獨一的特性。
用戶接口
X的設計目標之一就是能創建許多不同形式的用戶接口。其他的是視窗系統提供具體的互動方式,而X只提供一般的架構,讓系統創建者建造所需的互動風格。這種特性使得開發者可以在X的基礎上建造全新的接口,並且可以在任何時刻根據自己的需要選用適當的接口。
一般來說,用戶接口可以分為兩部分。管理接口也就是視窗管理器,是命令的最高層,它負責在螢幕上創建或重建視窗,改變視窗的大小、位置,或者將視窗改變成圖示等。
套用接口確定了用戶和應用程式之間的互動風格,即用戶如何利用視窗系統的設備程式來控制應用程式並傳遞輸入行為。例如,如何用滑鼠來選定一個選項。
用戶界面
X刻意不去規範應用程式在用戶界面上的具體細節設計,這些包括按鈕、選單和視窗的標題欄等等,這些都由視窗管理器(window manager)、GUI構件工具包、桌面環境(desktop environment)或者應用程式指定的GUI(如POS)等等的用戶軟體來提供,然而因為架構設計上保留了高度的彈性發揮空間,致使多年來X在“基礎、典型、一般性”的用戶界面上,也都有數目驚人的多樣性選擇。
在X的系統架構中,視窗管理器用於控制視窗程式的位置和外觀,其界面類似Microsoft的Windows或者Macintosh(例如:KDE的KWin或者GNOME的Metacity),不過在控制機制上卻截然不同(如:X提供的基本視窗管理器twm)。視窗管理器可能只是個框架(如:twm),但也可能提供了全套的桌面環境功能(如:Enlightenment)。
雖然不同的X用戶界面可以有很大的差異,然而絕大多數的用戶在使用X時,多是用已經打包的桌面環境,這種桌面環境不僅包含視窗管理器,還具備各種應用程式以及風格一致的界面,最流行的桌面環境是GNOME和KDE,二者已普遍套用於Linux作業系統上,而UNIX所用的標準桌面環境多是通用桌面環境CDE,然而有些UNIX也開始採用GNOME。
此外,X桌面環境及組件雖然很多,但同時也需要保持兼容性與互通性,這些由freedesktop org積極與努力地維持各種不同X桌面環境的兼容性,使競爭態勢下仍不失X的兼容本色。
優點
任務劃分優點
客戶端可以在遠程電腦上執行計算任務,而X Server僅負責複雜的圖形顯示,充分發揮X Server在顯示上的優勢。
只有X Server服務端與硬體打交道,所有的客戶端都與硬體無關,這讓不同的平台上的移植變得很容易。
客戶端可以在不同的電腦上運行,從巨型機到個人電腦,從而充分發揮網路計算的優越性。
儘管每個X客戶端都可以對整個螢幕範圍進行顯示操作,但標準的做法是先創建一個顯示視窗,此後客戶端的所有顯示都是相對於這個視窗進行操作。這樣在同一螢幕內就能同時顯示多個獨立的客戶端,通過對視窗的管理可以在不同的程式之間切換。每個視窗應該位於螢幕的位置、何時顯示、何時隱藏,以及視窗的標題、四周如何顯示等,這些都不應該由產生這個視窗的客戶端進行控制和維護,否則就不能達到簡化設計的目的。X Window並沒有自己實現這些任務,在X的設計原則中,這些代表 GUI風格的任務仍然是客戶端的任務,因此X將管理視窗的任務給予了一個特殊客戶端——視窗管理器,使用不同的視窗管理器會使X Window的外觀看起來截然不同。
X系統只負責顯示圖形,並不限制顯示和操作的風格,因此不同的X Window的風格並不相同,用戶可以根據自己的喜好進行選擇。
在X Window上,所有的視窗形成了一個樹狀結構。X Window的視窗管理程式運行在根視窗上,所有的其他視窗為根視窗的子視窗,而其他視窗上也有相應的按鈕、對話框等元件,這些是它的子視窗。如圖7-2所示。
由於X Window系統只提供了最基本的系統調用,而具體的視窗都有很多共性,因此要開發X應用程式,應該首先使用開發工具包,而沒有必要直接使用最基本的X Window 的系統調用,以簡化編寫程式的工作量。不同的公司或組織開發了各種工具包來提供創建和管理具體視窗的構件,例如Motif套件、OpenLook套件等。每種套件都提供了選單、按鈕、對話框等圖形接口的標準組件,還提供基本的視窗管理器。使用不同套件開發的程式,其顯示風格也不相同,因此就在不同程式之間形成了不同的GUI風格。Motif和Openlook 就是兩種不同的圖形接口風格,當前Motif成為了商業X Window的一個標準,很多商業軟體均基於Motif進行開發,而Openlook則沒有獲得更普遍的支持。
獨立於作業系統
X不是內置於作業系統,它只是比用戶層次稍高一些。在系統中也是一個相對獨立的元件。這樣做有如下優點:
易於安裝和改版,甚至去除。這種工作不需要重啟系統,也不會對其他應用程式造成干擾。
第三方很容易支持並加強它的功能。例如你的生產廠商提供的系統不夠好,你可以向別人買更好或更快的版本。
X不會制定作業系統,只是一個標準,這也是第三方開發軟體的原動力。
為了開發者。在Server上進行工作時,如果程式異常中斷,只會影響到視窗系統,不會造成機器的損壞或作業系統核心的破壞。
缺點
穩定性不強
在PC世界裡,需要第三方硬體驅動的非主流的個人計算機軟體往往不能支持那些專為Microsoft Windows出品的設備。X Window也不例外,它的實現往往缺少較新(或者非常舊)的高效的顯示卡驅動。
在X org和XFree86這樣的開源X中,開發社區通過復用已有代碼,可以很快更新改進驅動程式,從而能夠為較舊的或者通用的硬體開發出高質量的驅動。
圖形高效運算是頂級的圖形功能,一般由廠家通過專有驅動來實現,而且往往會優先考慮Windows(最大的消費市場)。由於高性能視頻市場的顯赫地位,一些硬體/驅動廠商會考慮通過將技術細節變為商業秘密或者將其中的創新申請專利,而這阻礙了開源驅動程式的實現。
在PC機之外的其他設備,很多X套用是為非傳統設備如PDA和手機編寫(或者移植)的。這樣的實現必須提供為在此之上運行的平台提供至少且必須的設備支持。
性能 X Window的C/S體系(C/S架構)設計在應用程式和顯示硬體之間多加了一層軟體,導致繪圖效率下降,所以引起了一些批評。因此開發了若干擴展,在設備和客戶機在同一個系統上時,通過在取得適當許可的情況下,以直接訪問設備來改善這一問題。而在Linux上,一些顯示卡驅動已經部分移入核心以提高效率。
穩定性 另一方面,X也被批評提供了過多的對硬體的直接訪問,從而影響了系統的穩定性。行為不良的顯示卡驅動(有時也可能是應用程式)可能導致整個系統的崩潰或重啟;有時即使作業系統仍在工作,也不能繼續渲染顯示效果(這時除了重啟,缺乏好的恢復手段)。
根本上,所有的桌面GUI作業系統都提供某種對硬體的直接訪問,支持者認為市場已經證明了為了提供圖形功能犧牲一點穩定性是值得的。或許將來隨著技術和用戶的演化這一平衡會有所變化。
不規範的用戶界面
X刻意不去規範用戶界面和程式之間大多數的通信,導致出現了許多非常不同的界面,同時造成程式之間協同的困難;而客戶機之間的互操作規範ICCCM以難以正確實現而聞名。後來的標準化嘗試,如Motif和CDE,也於事無補。長久以來這已經成為用戶和程式設計師的噩夢。程式的感觀一致性和通信一般是通過為特定桌面環境或者構件工具箱編程來處理,這也避免了直接和ICCCM接觸。
X缺乏良好的網路與透明的音效系統。當用戶對音效日益期盼時,各種不兼容的音效子系統便出現了。過去,大多數程式設計師只好忽略網路問題,簡單地使用本地操作專用的音效API。第一代客戶端-服務端音效系統有rplay和Network Audio System。而最近的努力產生了EsounD(GNOME)和ARts(KDE),而這也並非標準。而其他系統如Media Application Server則正在開發當中。
直到最近,X也沒有好地解決顯示與印表機所列印的內容一致性(所見即所得)的解決方案。許多X客戶機完全用PostScript實現列印,而這與傳送到服務端的幾乎是分離的。從X11R6.3起包含了Xprint,此時客戶端已經不錯,但是伺服器實現還不行。而從X11R6.8起實現的質量已經很好,並且獲得了組件支持。
網路通信能力弱
X不能像VNC那樣把客戶端的通信從一個服務端卸下然後再附加到另一個上,但正在為X增加此功能的工作,另外還要實現通過VNC實現X Server的顯示。
X Server和遠端客戶機之間的網路通信使用明文的缺陷,讓攻擊者使用封包截取程式就能夠截獲和閱讀它。這一缺陷一般可以通過在SSH通信上使用X來解決。
設備中立和客戶端與服務端的分離還帶來了一定開銷。X的網路透明性要求客戶機和伺服器分別運行。在其早期,與同時期採取視窗系統嵌入作業系統這一方法的Microsoft Windows和Mac OS比較,這給獨立系統的性能帶來明顯的影響。為了獲得可接受的性能,推薦起碼要保留4到8MB的RAM,但在1990年之前,這被認為與Windows或者Mac OS相比太耗資源了。
當前版本的Windows和Mac OS X Quartz也包含了和X的C/S相類似的子系統劃分,其性能和資源需求同X加上KDE或者GNOME也類似。主要的消耗來自於客戶機和伺服器之間的網路延遲(非協定本身產生的滯後時間),應該通過應用程式的設計來改善。
發展狀況
X在類UNIX系統上幾乎完全占據統治地位。但是仍然有人嘗試提供替代品和更多的選擇。過去曾經有Sun的NeWS,但它遭到市場淘汰;還有NeXT的Display PostScript,它最終轉變為蘋果電腦的Mac OS X內的Quartz。
應對對於X的批評的更前衛的嘗試有Berlin/Fresco和Y Window System這樣的完全替換。這些代用品被認為不值得採用,而任何不能做到與X向後兼容的的替代品的可行性都被廣泛置疑。
其他有的競爭者通過直接操作硬體來避免X的開銷,這樣的項目包括DirectFB。但是由於DRI正在致力於使用可靠的核心級接口提供幀緩衝,這些努力可能變成是多餘的。
其他以圖形終端服務形式達到網路透明性的嘗試還有VNC(很底層的系統,通過網路傳送壓縮的點陣圖;UNIX上的實現包括X Server)、Citrix MetaFrame(類似X的Windows軟體)、Tarantella(為網路瀏覽器提供Java客戶機)和NX技術(用於遠程顯示的節省頻寬的協定)。