本文檔的發布遵循 DGPL, 任何人有權免費獲得, 閱覽, 轉載和發布本文檔, 不得用於任何形式的商業用途. 本文檔現在由 Rocky S. Lee 進行維護, 任何人可以對其中存在的遺漏,錯誤進行修改和指正. 修改者名單將列於 本文檔的作者名後.
簡短說明:
本文檔的主要目的在於介紹手動配置 Linux 下 XF86 的配置方法, 主要是關於如何通過修改XF86Config 文件調整顯示器在圖形模式下的顯示分辨率和顏色深度, 以及如何通過建立符號連接修改 X Server. 另外提到一些跟圖形界面有關 的網友常問問題. 文中對於如何使用軟件工具做相應的沒有過多提及, 希望會在 以後的版本中加入和軟件修改方法之間的聯系和差別.
一. 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 進行調試.
DontZap 這個標志將使 X Server 收到 "Ctrl + Alt + Back Space" 鍵組合發出的信號時 *不* 停止工作. 當然一般是不建議使用的.
DontZoom 這個標志使 X Window 不能在各種圖形模式之間進行切換. X-Window 的缺省狀態是在用戶設定了多組分辨率, 刷新頻率和顏色的組
合的情況下, 運行 X Window 的過程中可以通過 Ctrl + '+' 和 Ctrl + '-' 兩組鍵的組合在多個圖形模式之間進行動態切換.
Keyboard 段: 這個段指明了 X Window 環境中所使用的鍵盤映射以及其他一些參數. 如下是作者的鍵盤配置:
Section "Keyboard"
Protocol "Standard"
AutoRepeat 500 5 # 指定延遲 (delay) 和 速率 (rate)
# 這裡的設定分別為 500 和 0
LeftAlt Meta
RightAlt Meta # 使用左右 Alt 鍵作 Meta 鍵.
# 關於 Meta 鍵, 希望以後能夠補充完整
ScrollLock Compose
RightCtl Control
XkbKeycodes "xfree86"
XkbTypes "default"
XkbCompat "default"
XkbSymbols "us(pc101)"
XkbGeometry "pc"
XkbRules "xfree86"
XkbModel "pc101"
XkbLayout "us"
EndSection
這段設置出了 XkbLayout 會影響鍵盤各按鍵的表現以外, 其他都只是一些功能上的設置, 沒有太大影響. 在控制台模式下, 可以通過 Alt + F? 在各虛擬終端間進行切換, 在 X Widow 環境下, 必須使用 Ctrl + Alt + F? 才能夠達到這一效果.
對於本段以及下面的 Pointer 段, 由於本人經驗和所知的限制不能完整地講述, 會在不久以後作進一步補充. 並在此向各位表示歉意.
Pointer 段: 如前所述, 這個段是設置鼠標等設備的. 如下舉例是作者的鼠標設置:
Section "Pointer"
Protocol "PS/2"
Device "/dev/mouse"
# 下面這兩個參數是一些采用磁技術的鼠標所需要的, 一般注釋掉或者刪除
# BaudRate 9600
# SampleRate 150
# 下面的兩個參數是為方便使用雙鍵鼠標的用戶使用三鍵鼠標而設置的
# 當選擇了虛擬三鍵的時候, 可以通過同時點擊鼠標左右鍵完成中鍵的功能
Emulate3Buttons
Emulate3Timeout 50