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