一. X Window 工作方式略談
(如果你之關(guān)心如何對 X Widow 進行設(shè)置, 可以跳過這一節(jié). 只是理解這一節(jié)所講的知識對于理解下面的各設(shè)置步驟有一定幫助)
X Window 的工作方式跟 Microsoft Windows 有著本質(zhì)的不同. MS Windows 的圖形用戶界面 (GUI) 是跟系統(tǒng)緊密相聯(lián)的. 而 X Window 則不是, 它實際上是 在系統(tǒng)核心 (kernel) 的上面運行的一個應(yīng)用程序.
X Window 的運行分為四層. 最底層的是 X Server(服務(wù)器), 提供圖形界面 的驅(qū)動, 為 X Window 提供服務(wù). 上面的一層是用于網(wǎng)上通信的網(wǎng)絡(luò)協(xié)議 -- X 網(wǎng)絡(luò)協(xié)議. 這部分使遠程運行 X Window 成為可能. 只需要在服務(wù)器上運行一個 X Server, 而客戶機 (Client) 上運行更上一層的程序, 則可以實現(xiàn) X Widow 的 遠程運行. 再往上的一層是稱作 Xlib 的低層函數(shù)接口, 介于網(wǎng)絡(luò)和和基礎(chǔ)系統(tǒng) 于較高層的程序之間. 應(yīng)用程序的實現(xiàn)是通過調(diào)用這一層的函數(shù)實現(xiàn)的.
最頂層 就是管理窗口的窗口管理器了, 也就是一般所說的 WM (Window Manager). 在這 一層的軟件是用戶都比較常接觸的, 比如 fvwm, AfterStep, Enlightment 以及 WindowMaker 等等.
從上面的介紹來看, X Window 的運行是一種客戶機/服務(wù)器(Client/Server) 的模式, 服務(wù)器用于顯示客運的應(yīng)用程序, 又被稱為顯示服務(wù)器(Display Server) 顯示服務(wù)器位于硬件和客戶機之間, 它跟蹤所有來自輸入設(shè)備比如鍵盤, 鼠標(biāo)的 輸入動作, 經(jīng)過處理后將其送回客戶機. 這樣, 使用戶甚至可以在 MS Windows的機器上運行 X Client, 截取并傳送用戶的輸入, 只是將 X Window 的屏幕輸出顯示在用戶的屏幕上. 客戶機的輸入和輸出系統(tǒng)跟 X 服務(wù)器之間的通信都是遵守 X 協(xié)議的.
由于本文檔的主要目的在于介紹如何設(shè)置, 因此對 X Window 不再作進一步的 介紹. 更詳細的資料可以參考有關(guān)的 HOWTO, man 頁等等.
二. 關(guān)于 X Window 的設(shè)置
1. X Server
在 Linux 下, 這些服務(wù)器的程序是存放在 /usr/X11R6/bin/ 下面, 并且都由 XF86_ 打頭, 一般來說, 會提供單顯 Mono, 標(biāo)準(zhǔn) VGA 和 SVGA 的驅(qū)動, 分 別命名為: XF86_Mono, XF86_VGA16 和 XF86_SVGA, 另外可能還會有 S3和其他一 些帶有圖形加速功能的顯卡的驅(qū)動. 下面是作者本人機器上運行的 RedHat Linux 6.1 中所帶有的 X Server 驅(qū)動:
XF86_3DLabs XF86_Mono XF86_I128 XF86_VGA16
XF86_P9000 XF86_8514 XF86_Mach32 XF86_S3
XF86_W32 XF86_AGX XF86_Mach64 XF86_S3V
XF86_FBDev XF86_Mach8 XF86_SVGA
如果你的 /usr/X11R6/bin 下面沒有上面某個文件或者多了某個文件, 不必在意, 這主要決定于你的機器的硬件. 其實一般只需要跟自己硬件相配套的驅(qū)動即可.
比如作者正在使用的機器上使用的是 3D Lab Permedia II 的芯片的顯示卡, 因此 只有 XF86_3DLabs 是有作用的.
如此之多種類的顯示適配器驅(qū)動程序, 系統(tǒng)當(dāng)然需要一個固定和統(tǒng)一的方法去訪問它, 一般說來, 系統(tǒng)是使用一個名為 X 的符號連接去訪問具體的 X Server 的.
這個 X 也同樣是存在于 /usr/X11R6/bin/ 目錄中, 可以使用如下命令打印他的具 體指向:
ls -l /usr/X11R6/bin/X
得到的結(jié)果如:
lrwxrwxrwx 1 root root 8 Dec 14 03:40
/usr/X11R6/bin/X -> XF86_3DLab
前面的屬性 "lrwxrwxrwx" 中第一個字母 l 表示它是一個連接, 在最后由箭頭 指出它所指向的具體目標(biāo). (這里的換行是為了閱讀的方便)
明白了這個, 在以后需要更換 X Server 的時候就可以通過改變這個聯(lián)系來實現(xiàn) 了, 具體命令如下:
ln -sf /usr/X11R6/bin/X??????? /usr/X11R6/bin/X
其中問號代表的字母根據(jù)具體情況決定. 有些時候, 由于這個連接不正確, 導(dǎo)致 無法運行 X Window, 這時可以使它指向 XF86_VGA16, 使用 16 色的 VGA 模式進入 X Window, 注意如果需要運行 XF86Setup 程序 (是個圖形界面的 X Window 配置工 具程序),那么這個XF86_VGA16驅(qū)動一定要存在,這是由于該驅(qū)動所提供的顯示模式
是一般顯示卡和顯示器都支持的, 故該配置程序使用此 X Server 為驅(qū)動. 當(dāng)用戶的 顯卡是比較特殊的型號時, 需要裝特定的驅(qū)動程序, 也需要作此工作.
驅(qū)動程序的獲得有多種途徑, 一般的 Linux 發(fā)行版本都提供了豐富的驅(qū)動程序, 可以滿足大部分要求, 比較特殊的驅(qū)動程序, 可以在網(wǎng)上獲得. 當(dāng)然現(xiàn)在 Linux 對硬 件的支持還不是很完善, 但這已經(jīng)超出了本文檔的訪問, 不在作更多的表述.
2. 顯示模式
顯示模式包括分辨率, 掃描頻率, 色深等等. 這也是網(wǎng)友在顯示方面提問最多的 一個問題. 對于現(xiàn)在的顯示卡和顯示器, 一般都可以使用 1024 x 768 x 16 bit 色的顯示模式. 當(dāng)然保險起見,在使用下面所敘述的方法設(shè)置您所使用的顯示模式的時候, 請確定您的顯示卡和顯示器能夠達到該模式的要求, 否則可能會有損壞硬件的危險.
在各發(fā)行版本中, 都會提供一些設(shè)置 X Window 的工具軟件, 如 Xconfigurator, XF86Setup, XF86Config 等等, 這些程序無一例外的是提供了一個修改 X Window 的配置文件 XF86Config 的簡便方法. 當(dāng)然使用起來比較方便, 但是對于一些需要靈活 調(diào)整的場合就不是非常適合, 需要手動調(diào)整配置文件中的參數(shù)達到最好效果. 您不必 一定這樣做, 這里只是介紹這樣一種方法, 使您可以在有疑問的時候方便地解決.
一般這個文件是存在于 /usr/X11R6/lib/X11/ 目錄下, 在 /etc 或者 /etc/X11 目錄中有它的一個符號連接. 它是一個文本文件, 可以使用 vi 對它進行修改. 下面 對該文件中各部分的作用做個詳細的介紹. (如有遺漏, 歡迎提出)
在這個文件中有這樣幾個概念: 段 (Section) 和子段 (Subsection). 每個段或 子段分別給出了不同的參數(shù), 格式分別為:
Section
......
Endsection
Section
Subsection
......
Endsubsection
Endsection
一個完整的配置文件中包含六個段, 分別是 File (文件), SeverFlag (服務(wù)器特 殊標(biāo)志), Keyboard (鍵盤), Pointer (指示設(shè)備, 一般是鼠標(biāo)), Monitor (監(jiān)視器), Device (顯示適配器, 即顯卡), Screen (屏幕設(shè)置信息).
File 段: 這一段指示出一些運行 X Window 所需要的文件的位置, 比如顏色的別 名文件 rgb.txt (注意這里是不需要寫出該文件的擴展名), 比如:
RgbPath "/usr/X11R6/lib/X11/rgb"
如果您看過 /usr/X11R6/lib/X11/rgb.txt 的內(nèi)容, 你會很容易的知道它是 干什么用的. 有了它, 你可以使用 red1 代表 RGB 顏色值 255 0 0 等等.
接下來是字體文件的路徑,這里的設(shè)置將影響到中文字體的輸出.這里對路徑的設(shè)置可以是多個, 例如下面的這樣:
FontPath "unix/:-1"
FontPath "/usr/share/zhfont/X11:unscaled"
FontPath "/usr/share/zhfont/TTF"
FontPath "/usr/X11R6/lib/X11/fonts/local"
FontPath "/usr/X11R6/lib/X11/fonts/chinese"
FontPath "/usr/X11R6/lib/X11/fonts/TTF"
FontPath "/usr/X11R6/lib/X11/fonts/Type1"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo"
FontPath "/usr/X11R6/lib/X11/fonts/misc"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi"
在使用一個字體目錄之前, 需要使用 mkfontdir 命令把一條路徑中的字體 作個列表, 在該目錄中生成 font.dir 作為對字體的索引, 如:
mkfontdir /usr/X11Ry/lib/X11/fonts/100dpi
具體該命令的用法, 請使用 man 命令查看其 man page (手冊頁), 或者會 在本文檔的后續(xù)版本中提供詳細的說明.
ServerFlag 段: 這個段指明了一些具體的參數(shù), 如下:
NoTrapSignals 這個標(biāo)志將使調(diào)試信號對 X Server 不起作用. 調(diào)試信號會使 X Server "轉(zhuǎn)儲核心", 把內(nèi)存中有關(guān)的 X Server 的信息存儲到硬盤上, 即所謂的 "Core dump". 這樣的目的是便于對 X Server 進行調(diào)試.