X11 指南/啟動會話
本章介紹 **如何啟動 X11 會話**。
本章將回答以下問題
- 啟動 X11 的不同方法有哪些?
- 如何啟動 X11 和視窗管理器?
- 如何控制啟動哪些視窗管理器和程式?
- 是否有辦法使字型看起來更漂亮?
回想一下,X11 由一個 *X 伺服器* 和多個客戶端組成。如果您只啟動 X 伺服器,您將得到一個空白螢幕。需要的是一種啟動 X 伺服器以及一些預設客戶端(如視窗管理器)的方法。
首先,一些 Unix 控制檯提供純文字登入提示符。在這種情況下,首先像往常一樣登入以獲取您的 Unix shell,然後使用 **xinit** 或 **startx** 命令在 shell 中啟動 X 伺服器和預設客戶端。
其次,一些 Unix 控制檯具有圖形登入提示符!在這種情況下,系統啟動指令碼已經啟動了 X 伺服器;一個名為 *顯示管理器* 的程式已經繪製了一個圖形使用者介面,允許您鍵入使用者名稱和密碼。在這種情況下,當您登入時,您將立即開始使用 X11。
第三,一些系統正在使用非 X11 的圖形環境。例如,Mac OS X 有其自己的 *Quartz* 系統。在 Mac OS X 中,您啟動 X11.app 程式,這是一個 X 伺服器,允許 X 客戶端出現在與您其他 Mac 程式相同的桌面上。類似的程式也存在於 Microsoft Windows(不是 Unix 平臺)中。
有一個名為 **startx** 的程式可以啟動 X11。它很簡單易用
$ startx
這將為您提供一些預設環境。但是,如果您想自定義預設環境,使用 **xinit** 可能更容易。**startx** 指令碼會查詢幾個檔案(~/.Xresources, ~/.Xmodmap,……)並載入它們;它使用的檔案在每個系統上都不同,因此您可能需要閱讀系統上的 **startx** 指令碼以瞭解它的工作原理。
相反,**xinit** 程式只啟動一個 X 伺服器並執行一個~/.xinitrc指令碼。無需記住您的系統是否將其稱為“.Xresources”或“.xresources”或“.xrdb”;您只需在“~/.xinitrc”中指定您想要的確切行為。
如果您破壞了“.xinitrc”,或者還沒有“.xinitrc”,那麼您可以啟動一個。例如
these will work $ xinit /usr/X11R6/bin/xterm $ xinit $(which xterm) this will NOT work $ xinit xterm
這將啟動一個 X 伺服器和一個名為“xterm”的程式,您可以使用它來啟動更多 X 客戶端。最後一行會失敗(即使“xterm”在您的 PATH 中),因為 xinit 假設它是一個引數,而不是一個程式。您必須在程式名稱中包含一個斜槓 /。
如果您有 KDE,您可以找到您的 **startkde** 指令碼
$ which startkde /usr/local/bin/startkde
然後您可以啟動 KDE
$ xinit /usr/local/bin/startkde
這將允許您使用 Konqueror 找到您的“.xinitrc”並使用 Kate 編輯它。(瀏覽您的主目錄時,在“檢視”選單中檢查“顯示隱藏檔案”。)
如果您看到類似的提示
$ xinit /bin/ksh: xinit: not found
… 那麼您需要新增/usr/X11R6/bin到您的 PATH 環境變數中。
如果您沒有在程式名稱中指定斜槓,那麼“xinit”將使用您的.xinitrc指令碼,該指令碼位於您的主目錄中。
$ xinit # starts .xinitrc $ xinit xterm # passes "xterm" as argument to .xinitrc
在使用“xinit”之前,需要一個名為.xinitrc的檔案,該檔案位於他們的主目錄中。因為檔名以點號開頭,所以該檔案通常是不可見的。有一些方法可以從 shell 中處理不可見檔案
$ cd # changes current directory to home directory $ ls -a # list all files, including dotfiles $ ls .xinitrc # list the .xinitrc file $ vi .xinitrc # edit .xinitrc using vi $ emacs .xinitrc # edit it using Emacs
“.xinitrc”只是一個 Bourne shell 指令碼。您可以嘗試使用 **sh .xinitrc** 執行它,但它會失敗,除非您已經啟動了 X 伺服器。您可以像在 Unix shell 中鍵入命令一樣在其中輸入命令。如果您不理解這一點,請嘗試從下面的示例開始。
這是一個簡單的一行“.xinitrc”示例
exec startkde
“startkde”命令啟動 KDE 桌面環境。此命令不會在您登出 KDE 之前結束。通常,shell 會等待 KDE 結束,然後執行下一條命令。此命令前面的“exec”字首告訴 shell 這是最後一條命令,因此 shell 無需等待執行下一條命令。“exec”在此情況下是可選的。
這是一個更復雜的“.xinitrc”示例
ulimit -Sn 512 /usr/bin/mixerctl monitor.master=5,5 /usr/X11R6/bin/xmodmap -e 'keycode 107 = BackSpace' case "$#" in 0) exec sh /etc/X11/xinit/xinitrc ;; *) session="$1" shift exec "$session" "$@" ;; esac # NOTREACHED exec /usr/X11R6/bin/xterm
第一行,“ulimit -Sn 512”,是一個 Bourne shell 命令,用於將開啟檔案“-n”的軟限制“-S”增加到 512。(使用 **ulimit -a**,或者如果您的 shell 不是 Bourne shell,請使用 **sh -c 'ulimit -a' **,檢視您的預設限制。)下一條命令,** /usr/bin/mixerctl monitor.master=5,5 **,將 OpenBSD 或 NetBSD 系統上的音量設定為左右聲道均為 5。在其他 Unix 系統上,命令將不同。可以新增許多其他命令。
第三行,“/usr/X11R6/bin/xmodmap -e 'keycode 107 = BackSpace'”(或者只是“xmodmap -e 'keycode 107 = BackSpace'”),調整鍵盤對映。對於只進行少量調整的使用者來說,這可能比載入一個 * .Xmodmap* 檔案更容易。(您可以使用 **xmodmap ~/.Xmodmap** 載入此類檔案。)
其餘行構成了 Bourne Shell “case”語句。它們處理命令列引數以啟用以下功能
$ xinit gnome-session # start GNOME $ xinit startkde,GNOME # start KDE $ xinit fvwm,KDE# start window manager fvwm $ xinit xtermfvwm # start an xterm without a window manager
請注意,由於沒有一個程式在其中包含斜槓,因此它們由“.xinitrc”指令碼處理,而不是直接由“xinit”處理。
示例~/.xsession:
. ~/.profile
managers=startkde,fvwm,wmaker
prompt="Welcome, $USER@$(hostname), select window manager:"
# miscellaneous setup
xmodmap -e 'keycode 107 = BackSpace'
test -f /usr/local/GNUstep/System/Makefiles/GNUstep.sh &&
. /usr/local/GNUstep/System/Makefiles/GNUstep.sh
manager="$(xmessage -buttons "$managers" -print -center "$prompt")"
test -z "$manager" && exec fvwm
exec "$manager"
用於轉儲 X 視窗影像的標準實用程式是xwd(1),xwd 生成一個 XWD 影像。它可以以以下方式呼叫
xwd -root -out root.xwd
xwd 還可以用於轉儲使用滑鼠選擇的單個視窗或使用-id選項後跟相應的視窗 ID;有關更多資訊,請參見man 1 xwd [1]。在遠端執行時,xwd 對於擷取正在操作的模態選單的螢幕截圖非常有用。GIMP 可用於將 XWD 檔案轉換為其他更常見的格式,例如 PNG;等效地,命令列實用程式 **xwdtopnm**(Netpbm 實用程式套件的一部分)可用於將 XWD 檔案轉換為 PNM 格式,然後可以將其轉換為任何常見的格式,例如使用以下 管道
xwd | xwdtopnm | pnmtopng > screendump.png
也可以使用convert實用程式(在此處可用)將 XWD 影像轉換為許多其他格式:convert root.xwd root.XYZ,其中 XYZ 是所需格式的典型檔名副檔名。
