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

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