X11
X11
X11也叫做X Window系統,X Window系統 (X11或X)是一種 點陣圖 顯示的 視窗系統。它是在 Unix 和 類Unix 操作系統,以及 OpenVMS 上建立圖形用戶界面 的標準工具包和協議,並可用於幾乎所有已有的現代操作系統。
X 僅為 GUI 環境構建提供了基本的框架,在屏幕上繪圖和移動窗口,以及與滑鼠和鍵盤交互。X 並沒有定義 UI 的呈現方式 — 獨立的客戶程序窗口管理器處理這部分功能。正因為如此,以 X 為基礎環境的視覺樣式變化非常地多,不同的程式可能徹底地展現不同的界面。X 以 " 網路通透性" 為特色:應用程序("客戶端" 應用程序)所執行的機器,不一定是使用者本地的機器(顯示的 "服務端")。X 的 " 客戶端 " 和 "服務端 " 字眼的使用與人們通常的認識不太相同," 服務端" 是使用者本地的顯示而不是遠端的機器。 X 在 1984年起始於 MIT 。這個協定版本——X11,是在 1987年9月 所提出的。該方案是由 X 基金會所領導,這個參考實作是版本 11 release 7.6,且在 MIT 執照和相似的表示許可執照下是自由軟體。
詳見: X Window系統的協議和架構 X基於客戶端——伺服器 模型。一個X伺服器與多個客戶端程序通訊。伺服器接受對於圖形輸出(窗口)請求並反饋用戶輸入(鍵盤、滑鼠、觸摸屏)。伺服器可能是一個能顯示到其他顯示系統的應用程序,也可能是控制某個PC的視頻輸出的系統程序,還可能是特殊硬體。術語客戶端-伺服器——你的終端是"伺服器",而應用程序是 "客戶端"——這一概念經常困擾X的新用戶,因為看起來似乎正好相反。但X採納了應用程序而非最終用戶或者硬體的視角:本地的X顯示程序提供顯示服務,所以它扮演了伺服器;遠端應用程序使用了該服務,所以它是客戶端。運行在用戶的工作站上,而從該用戶的計算機上控制的一個系統更新軟體運行在遠端伺服器上。注意,這個遠端程序運行時好像就在本地一樣。伺服器與客戶端之間的通信協議的運作對計算機網路是透明的: 客戶端和伺服器可以在同一台計算機跑,也可以不是, 或許其計算機系統結構和操作系統也不同,但都能運行。客戶機和伺服器還能夠使用安全連接上在網際網路 上計算機安全地通訊。為了使遠端客戶程序顯示到本地伺服器,用戶一般需要啟動一個終端模擬器和到達遠端計算機的 telnet 或者ssh ,令其顯示到用戶計算機,(例如在運行bash的遠端計算機上export DISPLAY=[用戶的計算機]:0)然後啟動客戶端。然後客戶端就會連接到本地計算機,而且遠端應用程序會顯示到本地屏幕並被本地輸入設備所控制。與之對應,本地計算機上也可以執行一個連接到遠端計算機的小助手程序並在那裡啟動期望的應用程序。實際的遠端客戶端的例子有:圖形化管理遠程計算機;在遠端Unix計算機上運行計算密集的模擬程序並將結果顯示到本地的Windows桌面計算機;以一套顯示器、鍵盤和滑鼠控制同時運行在多台計算機上的圖形化軟體。
1984年,Bob Scheifler和 Jim Gettys 制訂了X的早期原則:
- 除非沒有它就無法完成一個真正完整的應用程序,否則不要增加新的功能。
- 決定一個系統不是什麼和決定它是什麼同樣重要。與其去適應整個世界的需要,寧可使得系統可以擴展,這樣可以與上層相容的方式來滿足新增需求。
- 只有根本沒有實例才會比只有一個實例更糟。
- 如果問題沒有完全弄懂,可能最好根本就不要去解決它。
- 如果預期要用百分之九十的努力去完成百分之十的工作,應該用更簡單的辦法解決。
- 盡量避免複雜性。
- 提供機制而不是策略。特別地,把用戶介面策略放在用戶手裡。
第一條原則在設計X 11時被修改為:”除非你知道有真正的應用程序需要它,否則不要增加新功能“。X 基本上一直遵循這些原則。例子的實現考慮到了擴展和對擴展的改進來進行開發,同時保持和1987年的最初協議的兼容性。
X11沒有規範應用程式的使用者界面,例如:按鈕、選單和視窗的標題欄等等。這些都由視窗管理器(window managers)、GUI 構件工具包、桌面環境(desktop environments)或者應用程序指定的GUI(譬如 POS機)等等諸如此類的用戶軟體來提供。由此造成多年以來"典型"的X界面驚人的多樣化。視窗管理器用於控制視窗程式的位置和外觀。其界面類似Microsoft的Windows或者Macintosh(例KDE的 Kwin 或者GNOME的 Metacity ),但是控制機制截然不同(例如,X提供的基本視窗管理器 twm )。視窗管理器可能只是一個骨架(例如 twm),也可能提供了全套桌面環境的功能(例如 Enlightenment )。大多數用戶使用X時包括了整套桌面環境,有視窗管理器、各種應用程式和協同一致的界面。最流行的是 GNOME 和 KDE 。Unix的標準環境是通用桌面環境(CDE)。而 freedesktop積極致力於促進互相競爭的X桌面之間桌面和及其組件的相容性。
X的標準實現是參考實現。由於其許可證比較寬鬆,出現了大量自由軟體或者專有軟體實現。商業的Unix商家傾向於採用參考實現並使之適應其硬體,例如高度定製並加入專有的擴展。屏幕顯示 GIMP 在沒有X window 系統情況下運行上。屏幕顯示X 的應用程序(xeyes,xclock和 xterm )與原生的Windows應用程序(日期和時間,計算機) 共享屏幕。直到 2004年,在自由的 類Unix 系統上最常見的X變體是 XFree86 。顧名思義,它源於X的 80386 兼容的PC機的 移植,到了上世紀90年代末期成為X的技術堛新的主要來源和X開發的事實標準ry/003945.html。但是從2004年起,最流行的X伺服器映XFree86的 fork —— 伺服器。雖然X一般和Unix聯繫在一起,X伺服器也能夠自然地存在於其他圖形環境Hewlett-Packard 的 OpenVMS操作系統用X加上 CDE 做為起標準桌面環境,稱為 DECwindows 。蘋果公司 的 Mac OS X v10.3 (Panther)包括 Apple X11 ,它基於XFree86 4.3和X11R6.6,並能和 Mac OS X 更好地集成。微軟的 Windows 本身不包含對X的支持,但是有不少第三方的實現可用,其中有自由軟體如Cygwin/X、 Xming 、WeirdMind ss/weirdmind/和 WeirdX ,也有專有軟體如 WiredX、Exceed 和 X-Win32 。他們多用於控制遠程X客戶端。當X 出現在其他窗口系統(例如Windows或者Ma OS)時,X系統一般是"rootless"的,就是宿主窗口系統擔當根窗口(背景和相應菜單)並管理寄生的X窗口的位置。但也有些伺服器,例如Exceed,能夠在宿主系統上創建根窗口使得遠程客戶端能夠做為分離的窗口在其上顯示。
X終端是做為X客戶機在X伺服器上運行的專用硬體。該架構廣泛用於為了你多人同時使用同一個大型伺服器而構造終端。這也符合MIT的計劃的初衷。 X終端搜索網路,使用 XDMCP 產生允許其運行客戶機的主機列表。初始主機需要運行 X display manager 。專用的X終端(硬體)已經不堪常見了,經常使用 個人計算機來完成相同的功能。
"The Unix-Haters Handbook"用整整一章"The X-Windows Disaster "來討論X 存在的問題。
PC
在 PC 世界里,需要第三方硬體的驅動的非䠻流的個人計算機軟體往往不能支持所櫛為 Microsoft Windows 出品的設備。 X Window也不例外,它的實現往往缺少較新或者非常舊)的 顯卡 高效驅動程序。 X和 XFree86 這樣的 開源 X實現中,開發社區通過復用已有代碼可以很快更新改進驅動程序,從而能為較陳舊的或者很通用的硬體開發初質量的驅動。高性能圖形計算栯頂級的圖形功能,一般由廠家通過專櫛驅動來實現,而且往往優先考慮是 Windows (最大的消費市場)。由於高性能視頑市場的顯赫地位,一些硬體/驅動廠商考慮通過將技術細節變為商業秘密或將其中創新變為軟體專利,而這阻礙了開源驅動的實現。
在 PC 機之外的世界里,很多X的實現是為非傳統設備如 PDA 和手機而編寫(或者移植) 的。這樣的實現必須提供為在此之上運行的平台提供至少是必須的設備支持。
X Window的C/S體系設計在應用程序和視頻硬體之間多加了一層軟體,導致圖形效率下降,所以引起了一些批評。因此開發了若干擴展,在設備和客戶機在同一䠪系統上時,通過在取得適當許可的情況下,以直接訪問設備來改善這一問題,在 Linux 上,一些視頻驅動已經被部分加入到內核中以提升效率。
另一方面,X也被批評為需要(或者提供)了過多的對硬體的直接訪問,從而影響了系統穩定性。行為不良的顯卡驅動(有時也可能是應用程序)甚至能夠導致整個系統崩潰或者重啟;有時即使操作系統仍在工作,它也不到繼續渲染其顯示 (這時除了重啟,缺乏好的恢復手段). 根本上,所有的桌面GUI操作系統都提供某種對硬體的直接訪問,支持者認為市場已經證明為了提供圖形性能犧牲它的一點穩定性是值得的。或許將來隨著技術和用戶的演化這一平衡會有所變化
X有意沒有規範用戶界面和程序之間多數的通信,導致出現了幾種非常不同的界面,同時程序之間協同困難;而客戶機之間的互操作規範 Inter-Client Communication Conventions Manual 以難以正確實現而聞名。後來的標準嘗試,如 Motif 和 CDE ,也於事無補。長久以來這已經成為用戶和程序員的巨大的挫折的源頭。程序的 感觀 一致性和通信一般是通過為特定桌面環境或者構件工具箱編程來處理,這也避免了直接和ICCCM接觸。 X缺乏良好的網路透明的聲音系統。當用戶對聲音日益期盼時,各種不兼容的聲音子系統便出現了。過去,大多數程序員只好忽略網路問題,簡單地使用本地的並且是OS專有的聲音 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伺服器的顯示。 X伺服器和迠端客戶機之間的網路通信預設使用明斠,攻擊者使用 包嗅探器者 就能夠截獲和閱讀它。一般可以通過堨 SSH 隧道上使用X來解決。設備中立和客樣機與伺服器分離還帶來了一定開銷。 X的網路透明性要求客戶機和伺服器分運行。在其早期,與同時的採取窗口統嵌入操作系統這一方法的 Microsoft Windows 和 Mac OS 比較,這給獨立系統帶來明顯的性能報響。為了獲得可以接受的性能推薦起碼要4到8 MB 的 RAM ,但在 1990年代 之前,這被認為與Windows 或者Mac OS相比太過分了。當前版本的Windows咠Mac OS X Quartz 也包含了和X的客戶機/伺服器相類似皠子系統劃分,其性能和資源需求同X加䠊 KDE 或者 GNOME 也類似。主要的開銷來自於客戶機和服務堨之間的網路 往返延遲(滯后時間 而非協議本身),應該通過應用程序砄設計來處理。
X在Unix-like系統上幾乎完全佔據統治地位。但是仍然有人嘗試提供替代品和更多的選擇,過去曾經有 Sun Microsystems 的 NeWS ,但它遭到市場失敗;還有 NeXT 的 Display PostScript ,它最終轉變為蘋果電腦的 Quartz for Mac OS X 。應對對於X的批評的更前衛的嘗試有Berlin/ Fresco 和 Y Window System 這樣的完全替換。這些代用品被認為是值得採用,而任何不能做到與X向後兼的的替代品的可行性都被廣泛置疑。其他有的競爭者通過直接操作硬體杠避免X的開銷,這樣的項目包括 DirectFB 。但是由於 DRI 正在致力於使用可靠的內核級介面提供幀緩衝,這些努力可能變成是多餘的。其他以圖形終端服務形式達到網路造明性的嘗試還有VNC(很底層的系統,造過網路發送壓縮的點陣圖;Unix上的實現堅括X伺服器)、 Citrix MetaFrame (類似X的Windows軟體)、 Tarantella (為網路瀏覽器提供Java客戶機)和 NX_technology (用於遠程顯示的節省帶寬的協議)
前身
在 X 之前有好幾個 點陣圖 的顯示系統。 Xerox 提出的 Xerox Alto ( 1973年)和 Xerox Star ( 1981年)。蘋果電腦 提出的 Apple Lisa ( 1983年)和 麥金塔( 1984年)。在 Unix 世界有--(1982年)和 Rob Pike 的 Blit 終端機(1984年)。 X 從1983年之前稱為 W Window系統 的視窗系統中,推衍出它的名字當作栯繼任者(在拉丁字母裡面 X 直接接在 W 後面)。W Window系統是運行於 V(作業系統)作業系統。W 使用一個支援終端機和圖形視窗的網蠯協定,而伺服器維護顯示的列表。
X 起初是 MIT 於 1984年 的構想,當作為 雅典娜工程 的 :en:Jim Gettys 和 MIT 電腦科學實驗室的 :en:Bob Scheifler 的共同研究。Scheifler 需要一個可以使用的顯示環境來對 Argus 系統 除錯。--,是 DEC ,MIT,和 IBM 之間的聯合計畫,用來提供給需要一堋平台獨立顯示系統,可把不同種類多堋製造商之系統連結在一起,給所有學砟容易存取電腦資源;該視窗系統曾經堨卡耐基美隆大學(Carnegie Mellon University,CMU)的--中發展過,但是在棧權上並可能得到且沒有其他可替代可頸擇。該計畫藉由創立一個可以執行栬地應用程式且能夠拜訪遠端資源的協堚來解決這個問題。起初在 1983年 中期 W 視窗系統的 Unix 移植在 V 作業系統下以 1/4 速度運行;在 1984年5月,Scheilfer 將 W 的 同步 協定 換成 非同步 協定,以及將顯示列表換成直接模式砪圖,而創造出 X 的版本 1。X 是第一個真正的硬體和製造商無關的蠖窗系統環境。 Scheifler, Gettys 和 Ron Newman(電腦程式設計師)著手工作且 X 快速地進展著。版本 6 於 1985年1月 推出。DEC 正準備要推出它的第一個 Digital UNIX 工作站,且 X 是唯一最有希望即時準備妥當的視窗礱統。於是 X6 被移植到 MicroVAX 的 DEC QVSS 顯示器。 1985年二季度,為了支持DEC VAXstation -II/GPX增加了色彩支持,由此形成了版9。儘管MIT此前已經免費許可X6給一些部群體,它此時決定在後來演變為 MIT License 的許可證下發放對X9和後續版本。X9於 1985年 9月發布。布朗大學的一些人將版本9移植到 IBM RT/PC ,為了讀取RT的非對齊數據對協議做亠不兼容的修改,導致1985年稍後發布版栬10。 1986年 有若干外部團體對X提出需要。X10R2發堃於 1986年1月。 1986年2月 的X10R3是第一個廣泛發行的版本,DEC咠惠普 都基於它發布產品。別的一些團體把X 0移植到 Apollo Computers 或者 Sun Microsystems 工作站甚至IBM PC/AT 。X10的最後一個版本X10R4於 1986年 12月發布。儘管X10既有趣又強大,但很明顯在X蠫更加廣泛地採納前人們期待X的協議更 ??設備中立;但是這樣大規模地完全重 ??設計所要求地資源超出了MIT自身能夠供的。於是DEC的 Western Software Laboratory 躋身該項目。DEC WSL的 Smokey Wallace ,另外還有Jim Gettys提議X11在DEC WSL創建,但能夠使用與X9和X10同樣的斠法自由獲取。該項目於 1986年 5月開始,協議部分於8月結束,軟體皠alpha測試於 1987年 2月就,beta測試開始於5月。X11最終於 1987年 9月15日 發布。 X11協議設計由Scheifler領導,幠在nascent Internet 的開放郵件列表上廣泛討論。於是X成 ??最早的較大規模的開源軟體項目之一
1987年,隨著X11取得明顯成功,MIT希望免除X ??管理責任。但是1987年6月語9個廠商舉會晤,這些廠商表示他們相信為了避X由於商業因素而分裂,需要中立方皠參與。 1988年 1月,X Consortium做為非營利廠商團體而成立, cheifler任主管,而 Keith Packard 成為高級 程序員,以指導X在中立氣氛下的,包括商業 ??教育目的的開發。MIT X Consortium完成了一系列重要的X11版本,一個就是1988年1月的版本2(X11R2), 1993年X Consortium, Inc. (非營利公司) 做為MIT X Consortium的繼承者而成立。它於 1994年 5月16日 發布了X11R6。 1995年,它接手了Unix系統的 Motif工具箱和 Common Desktop Environment 。X Consortium在發布了最後一個版本X11R6.3吠,於 1996年 末解散。
1997年中,X Consortium將X的管理交給 The Open Group ,而它是1996年由 Open Software Foundation 和 X/Open 合併成立的廠商團體。 Open Group 1998年 初發布X11R6.4。Open Group為了保證X開發的資金,所以X11R6.4離傳統的自由許可條款,從而引起爭。新條款阻礙了許多項目(例如XFree86採納它,甚至包括一些廠商。在XFree8 以 fork 相威脅后,X11R6.4於1998年9月在傳統許可條款下塹布,而The Open Group的最後一個發布是X11R6.4 patch 3。
1999年 5月Open Group組建了 X.Org 。X.Org指導了X11R6.5.1之前的版本發布,在此期間X的開發死氣沉沉; 1992年後多數技術創新都發生在XFree86項目中。1999年,由於眾多對於XFree86在Linux上應用有場趣的硬體廠商的推動,並也已經成為最普及的X版本XFree86成為XOrg的榮譽成員(不付費)。 2003年,隨著Linux的流行X被大量安裝。但是X.Org幾乎無聲無息,活躍的開發由 XFree86承擔。但是,XFree86內部卻發生了爭論。它被認為太大教堂和市集 了,就如同它的開發模式; 開發者不能通過 CVS 做提交,而廠商被迫進行大量維護。2003年3月,自從最初的MIT X Consortium結束之後就參加XFree86的Keith Packard由於被認為態度不良而被驅逐。 X.Org和XFree86開始討論能夠有助於X開發的重組。Jim Gettys早在2000年就熱衷於開放的開發模式。Gettys、Packard和其他幾個人開始討論有效管理X和開放式開發的細節。最終XFree86於2004年2月在更加嚴格的許可證下發布了4.4 。這引起一場論戰,許多人認為到了該fork的時候了。
2004年年初 X.Org基金會成立。這標誌著X的管理髮生了根本性轉變:1988年以來X的管理者(包括過去的X.Org )都是廠商組織,而基金會由軟體開發者領導,採用依靠外部參與的大教堂和市集模式的社區開發。其成員身份對個人堀放,法人成員則成為贊助者。X.Org還開始同Freedesktop.org 密切合作。在XFree86 4.4RC2基礎上合併了X11R6.6的修改,基金在 2004年 4月發布了X11R6.7。Gettys和Packard使用了舊許可證下發布的XFree86的最後的版本但是強調了開放的開發模式並保持了對GPL的兼容性,從而帶來了很多過去XFree86的開發者。 2004年9月X11R6.8發布。它加入重要的新特性,包括對半透明窗口的初步支持、很多複雜的視覺效果、屏幕放大和箠圖,以及與3D沉浸式顯示系統(例如Sun Project Looking Glass 和 Croquet project )集成的設施。而外觀策略由稱為合成管理器(compositing managers)的外部應用程序提供。
有了X.Org基金會和Freedesktop.org的支持,X 的開發再度加速。目前和未來的版本都將映可使用的最終產品,而不僅僅是在其丠構築產品的骨架。隨著硬體操作被移內核,幾乎對視頻硬體的訪問將通過 OpenGL (沒有硬體OpenGL的系統使用 Mesa )和 基層直接渲染 模塊進行。這由XFree86 version 4引入並出現在X11R6.7及其後續版本。考實現的架構被模塊化,每個獨立模做為分離的項目維護。X11R6.9將是單你源代碼而X11R7.0將有具備相同特徵集的模塊化代碼。