圖形介面一直是linux使用者頭疼的問題,出了問題往往一片茫然,大多重灌了事。本文試圖從巨集觀的角度剖析一下x系統的簡要原理,只有理解了原理才能在解決問題時有的放矢。好,廢話少說,現在就開始。
首先,我們要搞清楚x系統的構成。我們平時稱呼的x圖形介面,實際上是由幾個重要部分構成的。它們分別是:
x server (xorg)
display manager (gdm, kdm, xdm)
window manager (metacity, fluxbox, e17, fvwm etc.)
x client (其他各種圖形應用程式,如natulis檔案管理器)
以及幾個重要概念:
x session: x server啟動到x server關閉之間的時間段
x庫: gui程式使用的庫函式,如gtk+和qt
下面我們就這幾個重要構成的作用、相互關係進行展開,向你展示x的執行原理。
1,x server
x server早期使用的是xfree86,自4.4版本後,xfree86改用gpl發布,此後開始稱為xorg。x server部分,主要關注兩點。
(1) xorg.conf
xorg.conf是x server的主要配置檔案,它包含乙個當前系統的硬體資源列表。x server就是根據這些硬體資源「組織」出基本的圖形能力。xorg.conf檔案在/etc/x11/xorg.conf,主要包含幾個字段:
files: x系統使用的字型存放目錄(字型的具體使用由fontconfig工具主持)
inputdevice: 輸入裝置,如鍵盤滑鼠的資訊
monitor: 顯示器的設定,如解析度,重新整理率等
device: 顯示卡資訊
screen: 由monitor和device組裝成乙個screen,表示由它們向這個screen提供輸出能力
serverlayout: 將乙個screen和inputdevice組裝成乙個serverlayout
在具有多個顯示裝置的系統中,可能有多個screen和多個serverlayout,用以實現不同的硬體搭配。
在最近的xorg版本中,x server已經開始自動偵測硬體,現在的xorg.conf已經都成了預設名稱。具體細節還待查,但基本原理還是不變的。
(2) x session(x會話)
前面已經說過,x session是指x server啟動後直到x server關閉之間的這段時間。這期間一切跟x相關的動作都屬於x session的內容。管理x session的程式稱為display manager,常聽說的gdm或kdm就是gnome/kde所分別對應的display manager。
開啟乙個x session,也就是開始了圖形介面的使用。在開啟的過程中,display manager會對使用者進行認證(也就是使用者名稱密碼的輸入),執行事先設定好的程式(比如scim輸入法就是這個時候啟動的)等等。
這個開啟過程要執行的一系列操作都可以在/etc/x11/xseesion以及/etc/x11/xsession.d/目錄下看到,其他還有一些配置檔案如xsession.options, xresource等,都是執行的x session的初始化過程。仔細閱讀這些指令碼或配置檔案,可以幫助你更好地理解x。
2, display manager
上面說過,display manager(後簡稱dm)是管理x session的程式,常見的有gdm, kdm, xdm等。對於預設進入x介面的linux系統,必須將dm程式在開機時執行,即:/etc/rc2.d/s13gdm。下面我們從手工啟動x的過程,看一下dm為我們做了哪些工作。
如果沒有設定dm在開機時執行的話,手動啟動x使用startx命令。
man startx
可以知道,startx的作用可以看作是display manager的一種隱性實現。它使用xinit命令,分別根據/etc/x11/xinit/xinitrc和/etc/x11/xinit/xserverrc中所指定的設定喚起x。
其中,xserverrc執行x server的執行任務;xinitrc則執行xsession命令。從/etc/x11/xsession指令碼的內容可以看出,它也就是進入/etc/x11/xsession.d/目錄輪詢地執行所有指令碼。很明顯,這些也就是前面所說的xsession初始化工作。
綜合起來說,display manager完成三個任務:1, x server的啟動; 2, x session的初始化; 3, x session的管理。
3, window manager
x server提供了基本的圖形顯示能力。然而具體怎麼繪製應用程式的介面,卻是要有應用程式自己解決的。而window manager(桌面管理器,後簡稱wm)就是用來提供統一的gui元件的(視窗、外框、選單、按鈕等)。否則,應用程式們各自為政,既增加了程式開發的負擔,不統一的桌面風格對視覺也是不小的挑戰。
wm的啟動由dm控制,在gdm的登入視窗,我們可以進行選擇。常見的wm有:metacity(gnome預設的wm), fluxbox, fvwm, e17等。
4, x clients
最後,就是x client了。x客戶端程式,顧名思義,就是使用x服務的程式。firefox,gedit等等都屬於x client程式。x client部分值得考慮一下的就是display環境變數。它主要用於遠端x client的使用。該變數表示輸出目的地的位置,由三個要素組成:
[host]:display[.screen]
host指網路上遠端主機的名稱,可以是主機名、ip位址等。預設的host是本地系統,你可以在自己系統上echo $display看一下。
display和screen分別代表輸出畫面的編號和螢幕的編號。具體細節由於硬體的缺乏,還有待進一步研究。
5, gnome與kde
光講x卻不提gnome和kde,對一些新手來說可能會更糊塗。所以簡單解釋一下,gnome/kde都是整合的工作環境,是完整x系統的乙個組成部分。換句話說,它們提供的是一整套從dm到wm到一攬子x client的程式集合。以gnome為例:dm是gdm,wm是metacity,x client有gnome-terminal, gedit, rhythmbox等等。
不過要注意到,即使沒有這些元件,我們像前輩們一樣用startx登入x,用fvwm做視窗管理器,用那些最最原始的應用程式,仍然可以實現乙個高效的x工作環境。gnome/kde的出現只是讓這一切變得整合性更好而已。
X Window 系統的視窗顯示原理
x window 系統的視窗顯示原理 摘自 ibm developerworks china 被閱讀次數 1000 由 yangyi 於 2010 07 06 22 48 12 提供 x window 系統介紹 x window 系統是乙個基於網路的圖形介面系統,它於 1984 年在麻省理工學院開發...
X Window 系統的視窗顯示原理
簡介 本文介紹 x window 系統的視窗顯示原理。從乙個簡單的 x 客戶端程式入手,介紹了視窗的建立介面 xcreatewindow 和顯示介面 xmapwindow 的實現,並結合視窗管理器介紹了 x server x client 和視窗管理器三部分互動的原理。x window 系統介紹 x...
X Window 系統的視窗顯示原理
x window 系統是乙個基於網路的圖形介面系統,它於 1984 年在麻省理工學院開發,有將近 20 年的應用歷史。x window 系統廣泛的應用於桌面 linux 如 fedora debian ubuntu 等 嵌入式 linux 如 nokia 的 maemo intel 的 moblin...