複製鏈接
請複製以下鏈接發送給好友

X Window

鎖定
X Window即X Window圖形用户接口,是一種計算機軟件系統和網絡協議,提供了一個基礎的圖形用户界面(GUI)和豐富的輸入設備能力聯網計算機。其中軟件編寫使用廣義的命令集,它創建了一個硬件抽象層,允許設備獨立性和重用方案的任何計算機上實現。
中文名
X Window
外文名
X Window
別    名
X11
X
別    名
X窗口系統
全    稱
X Window系統
產生時間
1984年
類    別
系統

X Window系統簡介

X Window是一種以位圖方式顯示的軟件窗口系統,最初是1984年麻省理工學院的研究成果,之後變成UNIX類UNIX、以及OpenVMS等操作系統所一致適用的標準化軟件工具包及顯示架構的運作協議。
X Window通過軟件工具及架構協議來建立操作系統所用的圖形用户界面,此後則逐漸擴展適用到各形各色的其他操作系統上,幾乎所有的操作系統都能支持與使用X Window,GNOMEKDE也都是以X Window為基礎建構成的。
X Window向用户提供基本的窗口功能支持,而顯示窗口的內容、模式等可由用户自行定製,在用户定製與管理X Window系統時,需要使用窗口管理程序,窗口管理程序包括AfterStep、Enlightenment、FvwmMWM和TWM Window Maker等,供習慣不同的用户選用。
可以定製的窗口環境在給用户帶來了個性化與靈活性的同時,要求用户有相對比較高的使用水平,不過這種機制帶來的好處也是明顯的,它不象Microsoft Window那樣將窗口元件的風格、桌面、操作方式等千篇一律地規定死,只可以換一下牆紙、圖標、調整字體大小等等,在X Window系統中可以有多種桌面環境的選擇。

X 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起源

版本發展歷史一 版本發展歷史一
X-Window於1984年在麻省理工學院(MIT)電腦科學研究室開始開發的,當時Bob Scheifler正在發展分散式系統(distributed system),同一時間DEC公司的 Jim Gettys 正在麻省理工學院Athena計劃的一部分。兩個計劃都需要一個相同的東西——一套UNIX機器上運行優良的視窗系統。因此合作關係開始展開,他們從斯坦福大學得到了一套叫做W的實驗性視窗系統。因為是根據W視窗系統的基礎開始發展的,當發展到了足以和原先系統有明顯區別時,X Window為開發基於圖形的分佈式應用程序提供軟件工具和標準應用程序編程接口。完成的應用與硬件無關,這意味着它們可以在支持X Window環境的任何系統上運行,這種完整環境通常被簡稱“X”。

X Window部分版本

第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 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服務端提供的服務進行輸入輸出。 [1] 

X Window基本部件

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 Window用户接口

X的設計目標之一就是能創建許多不同形式的用户接口。其他的是視窗系統提供具體的交互方式,而X只提供一般的架構,讓系統創建者建造所需的交互風格。這種特性使得開發者可以在X的基礎上建造全新的接口,並且可以在任何時刻根據自己的需要選用適當的接口。
一般來説,用户接口可以分為兩部分。管理接口也就是視窗管理器,是命令的最高層,它負責在屏幕上創建或重建視窗,改變視窗的大小、位置,或者將視窗改變成圖示等。
應用接口確定了用户和應用程序之間的交互風格,即用户如何利用視窗系統的設備程序來控制應用程序並傳遞輸入行為。例如,如何用鼠標來選定一個選項。

X Window用户界面

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的兼容本色。 [2] 

X Window優點

任務劃分優點
客户端可以在遠程電腦上執行計算任務,而X Server僅負責複雜的圖形顯示,充分發揮X Server在顯示上的優勢。
只有X Server服務端與硬件打交道,所有的客户端都與硬件無關,這讓不同的平台上的移植變得很容易。
客户端可以在不同的電腦上運行,從巨型機到個人電腦,從而充分發揮網絡計算的優越性。
儘管每個X客户端都可以對整個屏幕範圍進行顯示操作,但標準的做法是先創建一個顯示視窗,此後客户端的所有顯示都是相對於這個視窗進行操作。這樣在同一屏幕內就能同時顯示多個獨立的客户端,通過對視窗的管理可以在不同的程序之間切換。每個視窗應該位於屏幕的位置、何時顯示、何時隱藏,以及視窗的標題、四周如何顯示等,這些都不應該由產生這個視窗的客户端進行控制和維護,否則就不能達到簡化設計的目的。X Window並沒有自己實現這些任務,在X的設計原則中,這些代表 GUI風格的任務仍然是客户端的任務,因此X將管理視窗的任務給予了一個特殊客户端——視窗管理器,使用不同的視窗管理器會使X Window的外觀看起來截然不同。
X系統只負責顯示圖形,並不限制顯示和操作的風格,因此不同的X Window的風格並不相同,用户可以根據自己的喜好進行選擇。
在X Window上,所有的視窗形成了一個樹狀結構。X Window的視窗管理程序運行在根視窗上,所有的其他視窗為根視窗的子視窗,而其他視窗上也有相應的按鈕、對話框等元件,這些是它的子視窗。
由於X Window系統只提供了最基本的系統調用,而具體的視窗都有很多共性,因此要開發X應用程序,應該首先使用開發工具包,而沒有必要直接使用最基本的X Window 的系統調用,以簡化編寫程序的工作量。不同的公司或組織開發了各種工具包來提供創建和管理具體視窗的構件,例如Motif套件、OpenLook套件等。每種套件都提供了菜單、按鈕、對話框等圖形接口的標準組件,還提供基本的視窗管理器。使用不同套件開發的程序,其顯示風格也不相同,因此就在不同程序之間形成了不同的GUI風格。Motif和Openlook 就是兩種不同的圖形接口風格,當前Motif成為了商業X Window的一個標準,很多商業軟件均基於Motif進行開發,而Openlook則沒有獲得更普遍的支持。
獨立於操作系統
X不是內置於操作系統,它只是比用户層次稍高一些。在系統中也是一個相對獨立的元件。這樣做有如下優點:
易於安裝和改版,甚至去除。這種工作不需要重啓系統,也不會對其他應用程序造成干擾。
第三方很容易支持並加強它的功能。例如你的生產廠商提供的系統不夠好,你可以向別人買更好或更快的版本。
X不會制定操作系統,只是一個標準,這也是第三方開發軟件的原動力。
為了開發者。在Server上進行工作時,如果程序異常中斷,只會影響到視窗系統,不會造成機器的損壞或操作系統內核的破壞。 [3] 

X Window缺點

穩定性不強
在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也類似。主要的消耗來自於客户機和服務器之間的網絡延遲(非協議本身產生的滯後時間),應該通過應用程序的設計來改善。 [4] 

X Window發展狀況

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技術(用於遠程顯示的節省帶寬的協議)。 [5] 
參考資料
  • 1.    喬梁. X窗口系統的設計與實現[J]. 成都信息工程學院學報, 2003, 18(4):390-392.
  • 2.    王春蕊, 楊壽保. X窗口系統中應用程序構造技術探討[J]. 計算機工程, 2001, 27(10):186-188.
  • 3.    樊葆華, 竇文華. X窗口系統中的實時視頻圖像顯示技術研究[J]. 計算機工程與科學, 2005, 27(2):43-45.
  • 4.    周笑庭, 楊紅雨, 遊志勝,等. 基於X窗口系統的操作回放模型研究[J]. 中國民航飛行學院學報, 2003, 14(2):31-33.
  • 5.    魏際洲, 李顯濟. X窗口系統漢化軟件及其可移植性技術[J]. 計算機工程, 1998, 24(2):60-62.