天天看點

啟動你的X Window System

啟動你的X Window System 這是一篇有關xdm/gdm/kdm的一些讨論,我看了一些文獻(有些文獻名和作者名都不記得了,請原諒),同時也結合自己的一些經驗,如果有些地方說得不對,請見量。 有關X Winow System的一些概念,你還是找相關的文獻來看吧,我的目标就是讨論下如何設定和啟動你的X Windows System。首先你要懂得如何配置你的X配置的檔案/etc/X11/XF86Config(or XF86Config-4),這個檔案配置和它的配置工具不在讨論的行列中。 好多天前,我看了xdm/gdm/kdm這方面的東西,也看了些它們的man頁,當然也找了點相關的資料來look look,雖然我還不很了解,但還是知道了一些,拿出來獻醜了。呵呵,我的原則就是:好東西大家一起分享。 1、我們先不讨論xdm/gdm/kdm這些東西。而是先看看啟動X最簡直的方式。首先來認識兩個重要的檔案,一個是X視窗啟動檔案--xinitrc,另外一個就是X視窗資源檔案--Xdefaults. [1]X視窗啟動檔案--xinitrc 事實上,我們一般執行startx來啟動X Window System,其中startx就是xinit的前端界面[front-end].倘若我們以startx或xinit啟動X,這指令會啟動X server并且會執行$HOME/.xinitrc檔案内的所設定的指令。倘若 $HOME沒有這個檔案,則系統會使用内定的的配置檔案/usr/XR116/lib/X11/xinit/xinitrc。而事實上xinitrc檔案一般隻包含有啟動X時所要執行clients的shell script,裡面定義一些指令和shell script,讓X啟動時,可以遵照裡面的shell script來啟動必要的應用程式。例如我的簡單而又實用的的$HOME/.xinitrc的内容如下: 代碼:

# more .xinitrc 
LANG=zh_CN.GB2312
LC_ALL=zh_CN.GB2312
LC_CTYPE=zh_CN.GB2312
KDE_LANG=zh_CN.GB2312
export LANG LC_ALL LC_CTYPE KDE_LANG
export [email protected]=Chinput
/usr/bin/chinput &
exec kde3
killall chinput 
#
         

對于更為詳細的$HOME/.xinitrc,你可以找更專業的書籍來看,我的目标是越簡單越好。前面的大家應該都比較清楚吧。先設一些環境變量,再設下一些輸入法(我用的是智能五筆), 接下來是啟動視窗管理程式kde3,注意了:kde3用shell script的exec描述所執行的,這造成執行xinit程式的shell會被執行kde3的shell所取代。是以一旦kde3程式結束,就會跳出 shell,相對地,xinit将會跟着結束,X Server将關閉。這正是X Window Manager執行的方式。必須确定在.xinitrc中最後執行的是指令是以exec為開頭的的指令執行X Windows Manager,而且不應該加上&放在一些背景執行,不然,那些指令也毫無意義。後面的killall chinput是告訴要結束chinput,不然極有可能會因為chinput的原因,會造成一些問題。這是最為簡單的桌面設定。倘若你還要啟動更多的程式和設定,都可以在前面加的。隻要你在你的$HOME/.xinitrc檔案中稍加增加便可做到,但要記住加在X Window Manager執行段落之前。 [2]X視窗資源檔案--Xdefaults 在X的文獻中,resources有兩種意義。第一種是指被server管理或建立桌面應用程式使用的東西,例如:視窗、光标、字型等均屬于這種意義。另外的一種又是指一種可以傳遞預設定值、參數和其它值給應用程式的方法,比如,可以定義視窗的大小、前景顔色、顯示字型、快捷鍵等。而在X Window System的操作應用過程中,泛指的resources的意義也局限于第二種,主要是采用resources功能。在X Window System 的資源檔案Xdefaults中,主要是設定合适自己喜歡的應用程式的操作操控環境或界面。一般會執行X後,會自動讀取$HOME/.Xdefaults.具體的内容我在這裡不給出,因為這個東西我感覺還不是很重要。以後有時間的話再詳細寫寫這個東西。 呵呵,在xterm視窗中按有一個小技巧:你按住Ctrl+滑鼠右鍵會跳出一些字型等設定的東西,按住Ctrl+滑鼠左鍵會跳出顯示xterm應用程式的主菜單。另外,除了.Xdefaults資源可用處,還有一些應用程式會自己産生的的資源檔案,一般放在 /usr/XR116/lib/X11/app-defaults中,并以這些程式名稱的大寫檔案名命名。比如,Xclok時鐘程式的資源檔案就是 Xclock。其它的你自己看一下就會明白了。你可以直接修改這些應用程式的的資源檔案,作為系統内定的應用程式的樣式。不一定都要非得修改.Xdefaults來完成。因為.Xdefaults通常是個人愛好而使用環境來設定的東西。 個人的一些小經驗,不知道對否?如果$HOME中存在.xsession這個檔案而沒有.xinitrc這個檔案是,你用startx啟動也會讀取.xsession,但當存在這兩個檔案是,就會讀取.xsinitrc這個檔案。可能是它優先的原因吧(知道的出來說說吧)。 2、啟動我們的X Window System X Window System的啟動方法很多,最學常用的還是上面得到的startx,除此外,還要先執行"X"啟動X視窗系統,或者執行xinit啟動X。現在的發行版本一般都是以xdm(X Display Manager)/gdm(GNOME Display Manager)/kdm(KDE Display Manager)啟動X,讓Linux系統一啟動就立即進入X Window System,并以圖形模式讓用使用者來登入(呵呵,像Ms Windows吧,這樣啟動起來)。倘若你想退出X Window Manager,你可以xterm中執行init 3離開。 [1]以xinit/startx來啟動X 這是一般的方法:我在Debain也是經常以這種方式來啟動X的。就是執行/usr/XR116/bin/startx.事實上這個方法就是與直接執行 /usr/X11R6/bin/xinit或是/usr/X11R6/bin/X是無異的。差别在于xinit和"X"并不會去執行讀取讀資源檔案而去執行X Window Manager,是以一般的情況你得到的X視窗系統是個非常簡樸的的一個X型滑鼠指針與簡樸的xterm而已。但xinit就是最标準的X啟動方法,估計是絕大部分的系統X Window System都會支援。它是X Window System核心的程式,而startx僅是個啟動xinit的shell script而已,裡面同樣定義執行xinit指令以啟動X視窗系統。當一般執行startx時,X啟動的過程大約就是這些東西了: 1)xinit啟動X server程式; 2)X server會尋找$HOME/.xinintrc檔案,有就執行它,沒有就會轉到/etc/X11/xinit/xinitrc讀取系統内定的啟動檔案。 3)接着就會讀取$HOME/.Xdefaults,倘若沒有,就會轉到/usr/X11/xinit/Xcilents。從檔案名Xclients看來,這個是用來設定時執行哪些X應用的程式的檔案。性質和xinitrc類似,同樣是個shell script。但要注意的是:.Xdefaults是的權限具有755,即可執行。 4)在正常的情況下,$HOME/.xinintrc是用來指派可以讓X Window System正常運作的應用程式了。而.Xdefaults則被建議用來載入X資源設定和應用應用,以适合每個使用者本身的喜愛程度而已。 5)X server建立一個屬于它自己的根視窗(Root windows),并設定視窗的背景與執行所指定的應用程式,顯示一個大的"X"光标,便完成啟動了。 6)在X server執行的期間,它一直控制着你的滑鼠的鍵盤。 這就是你能在螢幕上移動光标的原因,但由于目前還沒有任何X client程式要求鍵盤和滑鼠的輸入。是以X server隻是和滑鼠一直移動而已。而其它的鍵盤或滑鼠輸入雖然都經過X server處理,但均被視為無作用(因為沒有什麼x clinet程式所接收)。這也是X啟動的初期,按鍵盤或滑鼠都沒有反應的原因。但如果你是送信号能X server而X client的話,這下就有會作用了。比如:Ctrl+Alt+Backspace即是送給X Server的中斷信号,當X啟動到中途或者是執行時,隻要按下這組合鍵,便會立即結束X server,跳回到command prompt terminal的狀态。 7)接下來,在xinitrc喚起X server後,xinit會啟動xterm程式。呵呵,xterm就是X Window terminal的縮寫吧。它對X server而言是一個X Clietn程式而已。要求X server建立一個視窗,而且會行告知X server在這個視窗中的滑鼠和鍵盤的輸入狀态(Event),因而啟動xterm時便會視窗執行一個shell,内定的就是bash。當名額被移至視窗之内時,xterm便準備接受輸入。鍵盤輸入會被關到xterm中的shell就如同真的終端機輸入一般。而從shell本身或其副程式的輸出則借着 xterm顯示在視窗上,xterm也接受輸入,便得你能設定不同的程式操作參數和進行文本的一些操作,比如copy或paste.對于這些操作,你可以通過在xterm中執行ps auxw指令來觀察到系統執行這些指令的詳細步驟。 [2]以xdm/gdm來啟動你的X。 上面說到了以startx來啟動你的X,也可通過xdm/gdm來啟動你的X來啟動你的X,這正是其它一些發行版本的采用的方式。比如Redhat是 gdm,而Mandrake用kdm。一般的情況,如果你要用調整你系統的run-level。比如修改你的/etc/inittab,把 id:3:initdefault中的3改為5。 當系統以xdm/gdm來啟動X Windows System。大約的步驟就是這些了: 1)執行/etc/X11/xdm/Xserver啟動X出現console登入的界面(是執行/etc/X11/xdm/GiveConsole&TakeConsole所産生的) 2)執行/etc/X11/xdm/Xsessions來啟動xdm或者是gdm。如果啟動的是xdm,則裝入使用者家目錄上的配置檔案,.xsession和.Xclients。如果是gdm,則裝載入/etc/X11/gdm/Sesseion與.Xclients。到此為止,就會出現X視窗的登入的界面選項。 3)gdm則會檢查/etc/X11/gdm/Session目錄的Session操作。比如 Fvwm,Wmaker,Default,Failsafe,Gnome,Kde與Default等。并将顯示給使用者選擇進入那個那個X Window Manager。其實這些Sessions都是Shell Script file。如果你選擇Kde,就進入KDE DeskTop environment,選擇Gnome就會進入GNOME DeskTop environment了。 4)使用者如果選擇是的Gnome,在輸入使用者名和password後,gdm GNOME Session就會找gnomerc script,$HOME/.gnomerc,如果沒有這個檔案,就會讀會系統檔案内定的GNOME resource file:/etc/X11/gdm/gnomerc,并且啟動/usr/bin/gnome-session. 這就完成了一個xdm/gdm的過程。但細心的人會發現,startx會讀取$HOME/.xinitrc,而xdm/gdm為什麼不會讀取這個呢,它又是如何設定根視視窗背景及你的logo和X Window Manager的呢。其中的原因是因為xdm/gdm改用了/etc/X11/xdm/Setup_0來設定的,例如我的Mandrake90的内容大緻如下: 代碼:

# more Xsetup_0 
#!/bin/sh
# (C) MandrakeSoft
# Chmouel Boudjnah <[email protected]>
#
# $Id: Xsetup_0,v 1.8 2001/09/19 18:49:29 flepied Exp $

if [ -f /etc/profile.d/kde.sh ];then

 . /etc/profile.d/kde.sh
 fi

 [ -z "$KDEDIR" ] && KDEDIR=/usr

 if [ -x $KDEDIR/bin/kdmdesktop ];then
     $KDEDIR/bin/kdmdesktop
     else
     /usr/X11R6/bin/xsetroot -solid "#21449C"
    /usr/X11R6/bin/xconsole -geometry 480x130-0-0 -daemon -notify -verbose -fn fixed -exitOnFail
    fi
    if [ -x /etc/X11/xinit/fixkeyboard ]; then
     /etc/X11/xinit/fixkeyboard
    fi
         

其中詳細的内容我就不說了,請你自己找資料來看。其中xsetroot是設定根視窗顔色的,并執行xconsole設定系統登入畫面的登入位置(geometry)。 如果你想修改xdm/gdm執行時所采用的color depth(色深?),可以修改/etc/X11/xdm/Xservers中的内容。我的Mandrake90中的是這樣的: 代碼:

m# more Xservers 
# $XConsortium: Xserv.ws.cpp,v 1.3 93/09/28 14:30:30 gildea Exp $
#
#
# $XFree86: xc/programs/xdm/config/Xserv.ws.cpp,v 1.1.1.1.12.2 1998/10/04 15:23:
14 hohndel Exp $
#
# Xservers file, workstation prototype
#
# This file should contain an entry to start the server on the
# local display; if you have more than one display (not screen),
# you can add entries to the list (one per line).  If you also
# have some X terminals connected which do not support XDMCP,
# you can add them here as well.  Each X terminal line should
# look like:
#       XTerminalName:0 foreign
#
:0 local /bin/nice -n -10 /usr/X11R6/bin/X -deferglyphs 16
         

顯然我的是采用16 bites顔色的。當然,你沒有必要那麼複雜,可以簡單點兒,比如,我有時采用: 代碼:

###使用16色
:0 local /usr/X11R6/bin/X -bpp 16
###使用24色
:0 local /usr/X11R6/bin/X -bpp 24
###使用32色
:0 local /usr/X11R6/bin/X -bpp 32
         

5)對于使用何種X Window Manager與載入方式,并不屬于Display Manager的範圍。Display Manager隻要負責啟動各種Sessions即可。總這一句話,X Display Manager隻管理sessins,想要實作更外層的工作,則可以讓sessions自己去做哦。 6)如果你喜歡那種方式Display Manager,你都可以選擇嘛,修改成自己喜歡的東西。例如我的mandrake90中有/etc/X11/prefdm是目前系統内定使用的Disk Manager。你看到它是隻是一個/usr/bin/gdm一個連接配接而已。你還可以在/etc/inittab檔案中最後定義像下面的, 代碼:

#hehe,Run gdm in runlevel 5
#gdm is now for pk'Mandrake separate server
x:5:respawn:/etc/X11/prefdm -nodaemon
         

你自己做過你系統有的xdm/gdm的連接配接就可以了。(不過,我在Mandrake linux裡面用的kdm,而沒有裝到其它的,是以,好像prefdmp這個檔案并不連接配接的内容。) 這裡也費話一下吧,如果你是以kdm來管理你的X的啟動的,他隻是sessions不同而已,我已經寫了這樣的一個文章"配置kdm",如果你想看,就找下吧。道理差不多的。 3。結束我們X Window Manager. 這個大家都會了吧。最簡單的就是選擇X Window Manager中的exit或logout或相關的就可以了。 呵呵,還記前面介紹的個#HOME/.xinitrc檔案吧,是就在結束.xinitrc檔案吧,執行了一個叫exec kde3的程式,這樣的好處就是結束X Window Manager的時候,會連同x-server一起結束。另外的就是按CRTL+ALT+Backspace來結束你的X Window Manager吧,它就是把中斷信号送給X-server結束X回到console terminal。 上面的情況是針對用startx啟動X的,如果你是用xdm/kdm/gdm來啟動你的X的話,你按上面的方法是又會回到X視窗的登入界面的,X- server并不會結束。你可以在console下,運作init 3就會結束你的X-server,如果你是init 5的話,那X-server又回來了。爽吧? 好了,這就是我對這方面的一些了解,如果你知道還有更好更為詳細的方法,請您告訴大家吧。大家一起來分享你的經驗。

繼續閱讀