1. 程式人生 > >X Server-Client

X Server-Client

參考:X Server-Client!! What the hell?

Beginner's Guide To The Deskop 2 of 5 | X11, Display Manager and Windows Manager

前言

  關於Linux的最美好的事情就是,它不像Windows或Mac那樣,是一個大型黑盒子,而是一個由像樂高積木搭成的一件藝術品。本文介紹的就是眾多積木中非常重要的一塊,X Server-Client。這也是Unix/Linux現代GUI框架的基礎。

  一致且設計良好的軟體始終經得起時間的考驗, X Server-Client architecture 也不例外。 它是由MIT實驗室於1987年開發的,從那時起它就被部署在人類已知的每個UNIX系統上。 目前它處於第11次迭代中,因此它也被稱為“X11”或簡稱為“X”。 如果有GUI,則稱為X Server,這為作業系統使用帶來了便利。X Server-Client architecture 中GUI的實現獨立於OS,這意味著作業系統可以保持非常輕量,如果機器需要,完全可以在沒有GUI的情況下提供全部功能。 例如,大型資料中心中的刀鋒伺服器(server blades)永遠不需要GUI,因此不必使用GUI來讓系統變得臃腫。

  由於X Server-Client architecture是跨平臺的,因此為開發人員帶來了便利,開發人員可以選擇某種framework 來編寫UI程式碼(例如QT framework ),並且無論什麼硬體,X Server都可以順利進行渲染。需要圖形顯示的程式不必考慮硬體型別,Linux發行版差異等問題,將生成的GUI直接外包(outsourced)給X就可以了。

X Client

  Unix/Linux伺服器通常具有強大的處理能力,但往往不是非常便攜。雖然可以ssh遠端訪問伺服器,但輸出仍是命令列。 X Server-Client architecture解決了這個問題。

任何需要GUI並且與X Server互動相容的應用程式都稱為X Client,像Mozilla firefox,Xterm等。

注意:你在Ubuntu中使用的terminal也是一個X Client。那麼,它們是圖形終端(graphical terminals )嗎?說實話,它只是終端模擬器(terminal emulators),用於在圖形環境中模擬真實的TTY終端。

X Server

X Server從鍵盤,滑鼠或任何其他輸入裝置獲取輸入,並根據當前執行的X Client,將資料傳送到核心進一步處理。 然後處理結果返給X Server,X Server在螢幕上呈現結構。

在資料處理和最終輸出之間,有兩個重要的組成部分。 如圖所示; 一個是Window Manager,另一個是Display Manager/Graphical Interface。 

Window Manager

如果你打開了一個應用程式,而Window Manager並未在後臺執行,那麼將無法重新定位、甚至調整視窗大小。 甚至都沒有關閉,最大化/恢復和最小化按鈕,因為沒有Window Manager提供標題欄。 這些東西都是Window Manager的一部分。Window Manager還決定如何將視窗放在一起(stack,tile等)。 目前有大量的stack,tile可用,像Compiz,I3,Awesome,Openbox等。這完全取決於你想要使用哪一個,Ubuntu的預設值是Compiz。

i3 window manager

Compiz window manager

Awesome window manager

 

Openbox window manager

如今許多X Client自帶客戶端裝飾(Client-Side decoration),例如標題欄。這意味著即使沒有Window Manager也可以正常工作,但並非所有X Client都這樣。事實上,Ubuntu下面那個Terminal(前面有圖)就沒有客戶端裝飾。

Display Manager

Display manager基本上是桌面環境。 這是放置所有程式視窗的地方。 Window Managers,檔案瀏覽器,Dock等與桌面環境密切配合,為你提供統一的使用者體驗。 有許多不同的桌面環境可供選擇 -  KDE,Unity,GNOME等。您可以在機器上安裝多個這樣的桌面環境,並隨時切換。

KDE desktop environment

 

GNOME desktop environment

 

Unity desktop environment

最後

事實上,在X Server-Client architecture,中,當用戶直接與Server互動時,clent 和 server關係會反轉,客戶端本身可以在本地的,也可以在遠端。

試想這樣一種場景,你的計算機上沒有Web瀏覽器(Firefox),但你的朋友有一個。 好吧,你可以ssh,但問題是Firefox需要GUI,而GUI無法在終端上呈現。 所以你要做的就是使用X 轉發特性,通過這一特性,你通過網路將你的輸入傳送到朋友的X Client,並獲得輸出到你的X Server。 因此,你朋友的機器生成的GUI將在你的顯示器上呈現。 再假設你電腦上有Firefox(你更改了主題),你仍然遠端連線到你朋友電腦(Firefox沒有更改主題),那麼你現實的Firefox是沒有主題的那個。