Linux 圖形界面又稱 X 系統(tǒng),其主要包含如下幾個部分:
a ) XServer
b) 顯示管理器 (Display Manager) 例如( gdm ?kdm xdm 等)
c) 窗口管理器 ( Window Manager) 例如(mutter, metacity ,fluxbox 等)
d)DM 和 WM 之上的一些圖形應用程序?
?
在使用中一般都是 b,c,d 三者集合起來構成一個完整的集成工作環(huán)境,例如 KDE ,GNOME 等 , 這就是我們平時所說的廣義上的 XClient 。
?
Metacit y 曾經(jīng)是GNOME桌面環(huán)境下默認的復合窗口管理器。 在GNOME 2.2正式引進Metacity之前,GNOME陸續(xù)使用了Enlightenment和Sawfish作為它的窗口管理器。雖然Metacity是GNOME工程的一部分來并且被設計為集成進GNOME桌面,但它并不需要GNOME才能運行。同樣GNOME也可以使用各種不同的窗口管理器,只要它們支持ICCCM規(guī)范。 Me tacity由GTK+實現(xiàn),這使得它可以主題化并與其他G TK+應用程序相融合 。
2011年,Gnome 3 發(fā)布,Metacity被mutter代替。 Mutter ?是Gnome 3的窗口管理器,用來取代原本的Metacity,Gnome Shell實際上是Mutter的一個插件,Mutter是Metacity Clutter的縮寫。它使用了Clutter這個圖形庫,支持OpenGL。
?
1. 顯示管理器(DM):
startx 的作用可以看作是 Display Manager 的一種隱性實現(xiàn)。它使用 xinit 命令,分別根據(jù) /etc/X11/xinit/xinitrc 和 /etc/X11/xinit/xserverrc 中所指定的設置喚起 X。 其中, xserverrc 執(zhí)行 X server 的運行任務; xinitrc 則運行 Xsession 命令。從 /etc/X11/Xsession 腳本的內容可以看出,它也就是進入 /etc /X11/Xsession.d/ 目錄輪詢地執(zhí)行所有腳本。很明顯,這些就是 session 初始化工作。因此, Display Manager 完成三個任務: 1, X Server 的啟動 ; 2, X session 的初始化 ; 3, X session 的管理。
?XDM、GDM、KDM是三種X Window的顯示管理器,其功能相當于文本模式下的init、getty和login;當用戶輸入的正確的用戶名和口令后將開啟一個會話
(1)XDM(默認的X Window System Display Manager)
(2)GDM(gnome提供的Display Manager)
(3)KDM(KDE提供的Display Manager)
2.窗口管理器(WM):它是負責管理窗口的移動、最大化、最小化、改變大小以及關閉等工作
X Server 提供了基本的圖形顯示能力。然而具體怎么繪制應用程序的界面,卻是要有應用程序自己解決的。而 Window Manager(窗口 管理器,后簡稱 WM) 就是用來提供統(tǒng)一的 GUI 組件的 ( 窗口、外框、菜單、按鈕等 ) 。否則,應用程序們各自為政,既增加了程序開發(fā)的負擔,不統(tǒng)一的桌面風格對視覺也是不小的挑戰(zhàn)。
WM 的啟動由 DM 控制,在 gdm 的登錄窗口,我們可以進行選擇。常見的 WM 有 :Mutter, Metacity , fluxbox, fvwm, E17 等
?
常見的窗口管理器
1)twm(X.org提供的簡單的窗口管理器)
2)gnome-wm(gnome提供的窗口管理器)
3)kwin(KDE使用的窗口管理器)
4)FVWM(一款知名的窗口管理器)
3.Gnome/KDE: GNOME、KDE是桌面系統(tǒng),是集成了窗口管理器,顯示管理器及一些應用程序的套件
4.? X Clients
?? ? X Client ,? X 客戶端程序,顧名思義,就是使用 X 服務的程序。 firefox , gedit 等等都屬于 X Client 程序。
? ? X Client 部分值得考慮一下的就是 DISPLAY 環(huán)境變量。它主要用于遠程 X Client 的使用。該變量表示輸出目的地的位置,由三個要素組成:
?? ? [host]:display[.screen]
?? ? host 指網(wǎng)絡上遠程主機的名稱,可以是主機名、 IP 地址等。默認的 host 是本地系統(tǒng),你可以在自己系統(tǒng)上 echo $DISPLAY 看一下。
?? ? display 和 screen 分別代表輸出畫面的編號和屏幕的編號。具體細節(jié)由于硬件的缺乏,還有待進一步研究。
startx 啟動過程分析
參考 :? http://blog.csdn.net/clozxy/article/details/5488699
對 xserver 和 x client 的啟動過程的探討主要是對 startx 命令的探討
startx 腳本網(wǎng)上解釋的很多,這里就不多做介紹,對 startx 介紹分以下兩個部分
(1)xinit 用法
startx 其實是個腳本,最終調用的是 xinit 命令,其用法如下:
xinit 的用法為: xinit [[client] options ] [-- [server] [display] options] 。其中 client 用于指定一個基于 X 的應用程序, client 后面的 options 是傳給這個應用程序的參數(shù), server 是用于指定啟動哪個 X 服務器,一般為 /usr/bin/X 或 /usr/bin/Xorg , display 用于指定 display number ,一般 為 0 ,表示第一個 display , option 為傳給 server 的參數(shù)。
如果不指定 client , xinit 會查找 HOME ( 環(huán)境變量 ) 目錄下的 .xinitrc 文件,如果存在這個 文件, xinit 直接調用 execvp 函數(shù)執(zhí)行該文件。如果這個文件不存在,那么 client 及其 options 為: ? xterm -geometry +1+1 -n login -display :0 。
如果不指定 server , xinit 會查找 HOME( 環(huán)境變量 ) 目錄下的 .xserverrc 文件,如果存在這個文件, xinit 直接調用 execvp 函數(shù)執(zhí)行該文件。如果這個文件 不存在,那么 server 及其 display 為: ? X :0 。如果系統(tǒng)目錄中不存在 X 命令,那么我們需要在系統(tǒng)目錄下建立一個名為 X 的鏈接,使其指向真正的 X server 命令( Ubuntu 下為 Xorg )。
因此 startx 的用法跟 xinit 一樣: startx [ [ client ] options ... ] [ -- [ server ] options ... ]
(2)startx 的幾種啟動方式
由對 startx 腳本的分析,我們可以知道 startx 主要有三種啟動方式:
a) 、一種是自己指定要啟動的 client 和 server , 例如: startx /usr/bin/xclock -- /usr/bin/X :0 ;
b )、一種是通過在 $HOME 下新建 .xinitrc 文件來指定要啟動的多個 client 和 .xserverrc 來指定要啟動的 server ;
c )、還有一種是直接輸入 startx 而不指定參數(shù),這也就是我們啟動 gnome 桌面的方法。
在 c 這種啟動方法中 , startx 腳本會先去看系統(tǒng)目錄( /etc/X11/xinit/ )下的 rc 文件是否存在,如果不存在就會用默認的 xterm 和 /usr/bin/X 來啟動 xinit 。顯然, startx 啟動的不是 xterm ,而是 gnome 桌面,因此 gnome 的啟動是通過系統(tǒng)文件 /etc/X11/xinit/xinitrc 來指定的。
而 /etc/X11/xinit/xinitrc 文件的內容如下所示:
#!/bin/bash # 注意 : 該腳本用的是 bash shell 解析的
# $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $
# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)
# invoke global X session script
. /etc/X11/Xsession ? # 在當前這個 shell 環(huán)境中執(zhí)行 Xsession 腳本
因此, gnome 的啟動應該在 Xsession 里。
而 X Server 的啟動則是通過系統(tǒng)文件 /etc/X11/xinit/xserverrc 來指定的 , 這個文件的內容為 :
#!/bin/sh # 注意:該腳本用的是 Bourne shell 解析的
# $Id: xserverrc 189 2005-06-11 00:04:27Z branden $
exec /usr/bin/X11/X -nolisten tcp
綜上所述, startx 的默認啟動過程為: startx 調用并將系統(tǒng)文件 /etc/X11/xinit/xinitrc 和 /etc/X11/xinit/xserverrc 作為參數(shù)傳給 xinit , xinit 就會先執(zhí)行系統(tǒng)文件 /etc/X11/xinit/xserverrc 以啟動 X Server ,然后執(zhí)行 /etc/X11/xinit/xinitrc ,而 xinitrc 則會執(zhí)行腳本 /etc/X11/Xsession ,而 Xsession 則會按順序調用執(zhí)行 /etc/X11/Xsession.d 目錄下的文件,從而最終調用了 gnome-session 這個用于 啟動 GNOME 桌面環(huán)境的程序
?
?
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
