xinit啓動X Window System過程初探

啓動X主要有兩種方法:一是Display Manager,如XDM、GDM、KDM,此種方法通過圖形界面登錄;另一種是通過xinit,此種方法適用於字符界面登錄。我們常用於登錄X的startx命令也是通過傳遞參數給xinit來啓動X的,也就是說,最終啓動X的是xinit。startx只是一個bash腳本。下面主要分析xinit一下初始化X的過程:

  首先來看一看xinit命令的用法:

  xinit [[client] options ] [-- [server] [display] options]

  可以看出,xinit初始化X是通過兩個層面來進行的,即X client程序和X server程序。上面[client]和[server]分別稱爲X client程序和X server程序。它們代表的是程序的具體路徑,其必須以/或者./開頭。

  默認情況下,當我們CLI下執行不帶任何參數的xinit命令時,xinit會在目錄下搜索.xinitrc文件當作X client來執行,也就是說,你可以在其中設置進入X時便運行的X client程序,具體的設置見後。根據$HOME/.xinitrc的有無,xinit會有不同的運行情況。

  1.若存在$HOME/.xinitrc,相當於執行:

  xinit $HOME/.xinitrc -- /usr/bin/X

  2.若不存在$HOME/.xinitrc,相當於執行:

  xinit xterm -- /usr/bin/X

  如果不存在$HOME/.xinitrc或是未正確設置$HOME/.xinitrc都不會進入Desktop Environment(桌面環境,如GNOME、KDE等),呈現在我們面前的只有一個xterm和"X"狀的鼠標。那麼怎樣才能進入Desktop Environment呢?讓我們來分析一下startx命令的運行情況吧。 通過分析startx命令文件的內容,得知startx主要是置X client和X server所在的位置,並處理相關參數,最後交給xinit處理。可以看出startx 設置X client的位置是先搜尋$HOME/.xinitrc,然後是/etc/X11/xinit/xinitrc;設置X server的位置是先搜尋$HOME/.xserverrc,然後是/etc/X11/xinit/xserverrc。

  即相當於運行了以下命令:

  xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc

  進一步分析:

  xinit /etc/X11/Xsession -- /usr/bin/X11/X -dpi 100

  Xsessin是一個重要的文件,爲什麼要怎麼說呢?因爲不管是通過Display Manager登錄X,還是通過xinit(startx)登錄X,它都會被執行。Xsession是一個全局文件。

  Xsession文件中以下內容:

  /usr/bin/x-session-manager/*啓動Desktop Environment*/

  /usr/bin/x-window-manager/*啓動Window Manager*/

  /usr/bin/x-terminal-emulator/*啓動Terminal*/

  這就是爲什麼我們可以用一個startx命令直接進入X的原因所在了。如果我們要進入GNOME我們只需要將/usr/bin/x-session-manager所鏈接的目標文件改爲/usr/bin/gnome-session,然後把/usr/bin/x-window-manager所鏈接的目標文件改爲/usr/bin/metacity,把/usr/bin/x-terminal-emulator所鏈接的目標文件改爲/usr/bin/gnome-terminal就可以了。

弄清楚了以上的內容,我們就可以修改$HOME/.xinitrc,通過xinit來啓動Desktop Environment了,下面以啓動GNOME爲例:

  首先在$HOME下創建.xinitrc文件,然後添加以下內容:

  gnome-session&

  metacity/*除了最後一個命令在前臺運行以外,其他的都應運行在後臺*/

  保存後,你就可以在終端通過執行xinit來啓動GNOME了,是不是很酷呢?

  利用xinit啓動X的時候應注意,如果第一個運行的X client結束,xinit將自動結束X,返回到CLI。下面以具體的例子來說明:

  當不存在$HOME/.xinitrc時,執行xinit metacity,將會出現一個可移動的xterm(無$HOME/.xinitrc,xinit默認啓動xterm),當然也有一個X

  server。關閉xterm將退出X,因爲xterm是第一個運行的X client。當存在$HOME/.xinitrc且包含如下內容:

  xeyes&

  metacity&

  xterm

  執行xinit將會出現一個xterm和一個xeyes,關閉xterm將退出X,因爲其他的X client(xeyes、metacity)都是運行在後臺的,而xterm是前臺運行的第一個X client。

  同理,我們也可以通過以下的命令來啓動Desktop Environment:

  xinit gdm

  xinit /etc/X11/Xsession
發佈了24 篇原創文章 · 獲贊 53 · 訪問量 100萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章