咱們知道unix/linux剛開始的時候是沒有圖形界面的,隨着時代的發展,排版、製圖、多媒體應用愈來愈廣泛了,這些需求都須要用到圖形界面(Graphical User Interface)。爲此,MIT在1984年開發出了X window system,X在字母表中是W(indows)的下一個字母,寓意「下一代GUI」的意思。目前爲止,unix/linux上幾乎全部的發行版都採用X window system來做爲本身的圖形界面,它已經成爲事實上的unix/linux圖形界面標準。php
X window system,又名X,X11(如今主要的X window system大都基於其第11個版本),是一個可以跨網絡和操做系統平臺的圖形界面。開發者在開發x時就但願,這個窗口界面不要與硬件有強烈的相關性,這是由於若是與硬件的相關性高,那就等於開發一個操做系統了,如此一來其應用性就要受到限制。故此,x是一套軟件體系,而不是操做系統中的組成部分,就像瀏覽器不是操做系統的組成部分同樣(固然微軟在與網景幹仗時可無論這些)。html
如上圖所示,X使用服務器-客戶端模型:每一個須要顯示圖形界面的主機都要運行一個x server,它負責主機中各個與圖形界面有關硬件設備的管理,如在顯示器中顯示輸出,從鼠標、鍵盤接受輸入等。同時與不一樣的客戶端程序(x client)通訊,x client指那些須要圖形界面的應用程序,如瀏覽器、終端、視頻播放器等。這裏須要解釋一下,這裏的server,client術語是從應用的角度而不是以用戶的角度來講的:X server利用本身對硬件的掌控爲應用提供顯示界面以及處理輸入輸出等服務,因此說它是服務器端,而各類應用須要使用x server提供的這些服務,他們就是客戶端了。linux
x server和x client之間所使用的通訊協議對網絡來講是透明的,因此client和server能夠運行在相同機器上,也能夠運行在不一樣機器上,甚至機器自己的硬件架構和操做系統也能夠不同(如windows上的xmanager就是一個x server,它能夠遠程鏈接linux上的主機爲linux上的x client提供服務,有興趣的童鞋能夠試下)。shell
說完了x的軟件架構,下面咱們就來講說x中其餘幾個概念。windows
display manager,又稱login manager,是linux在boot進程完成以後啓動的一個用於用戶身份認證的圖形界面,至關於文本模式下啓動時讓咱們輸入用戶名和密碼的shell。比較常見的有GNOME的gdm,KDE的kdm等。瀏覽器
display manager能夠在本地也能夠在遠程主機上啓動。若是在本地啓動,display manager接下來會把x server也啓動起來,這樣就能夠在開機時顯示如上圖所示的圖形界面了。服務器
若是display manager已經在遠程啓動了,咱們在本地須要鏈接到遠程的display manager上去,這時x server就用使用XDMCP(X Display Manager Control Protocol)協議鏈接到遠程的display manager,請求開啓一個會話,這樣在本地也就出現瞭如上圖所示畫面,若是身份認證經過,display manager就退居二線,剩下的就是本地的x server與遠程的x client之間互相交流了:咱們經過x server(鍵盤、鼠標等輸入設備)把咱們的要求發給x client(x client與display manager 運行在同一臺機器上),x client運行獲得結果並將結果返回給x server,x server再經過本身管理的輸出設備如顯示屏等把結果顯示出來,如此種種能夠參看下圖。網絡
關於GNOME與X之間的關係,這裏有一篇文章介紹的很是清楚,現摘抄一部分以下,我就不多此一舉了:架構
X11 is the window system. Gnome is a desktop environment. The difference is that Gnome works through X11. Gnome and X11 run on Linux, though, not Windows.
Basically, X11 is what displays everything. It's the graphical shell that connects you to the operating system. None of the applications you run ever send anything directly to the screen - they need to tell X11 what they want to display and let it do the work for them.
X11 draws and moves windows and responds to input from the keyboard and mouse. That's pretty much it. Everything else is taken care of by the desktop environment. What that means is that the look and feel of the windows and the way those windows behave are all decided by which desktop environment you're using (Gnome, KDE, XFCE, etc.).
The desktop environments all have their own graphics libraries (reusable chunks of code) that they use, along with APIs (Application Programming Interfaces) which allow programmers to use those libraries when they create GUI applications. This way programmers don't have to recreate commonly used functions and elements from scratch, and the whole operating system has a more standardized look. app
參考連接:http://en.wikipedia.org/wiki/X_Window_System
http://en.wikipedia.org/wiki/X_display_manager_(program_type)
https://wiki.archlinux.org/index.php/Display_Manager
https://wiki.debian.org/DisplayManager
http://en.wikipedia.org/wiki/GNOME
http://stackoverflow.com/questions/17251293/what-is-the-relationship-between-x11-and-gnome