萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> 設置和修改 X Window 的顯示模式

設置和修改 X Window 的顯示模式

class="21883"> 本文檔的主要目的在於介紹手動配置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).顯示服務器位於硬件和客戶機之間, 它跟蹤所有來自輸入設備比如鍵盤、鼠標的 輸入動作, 經過處理後將其送回客戶機.這樣, 使用戶甚至可以在 MSWindows 的機器上運行 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 (文件), Modules (動態鏈接庫) SeverFlag (服務器特殊標志), Keyboard (鍵盤), Pointer (指示設備, 一般是鼠標), Monitor (監視器), Device (顯示適配器, 即顯卡), Screen (屏幕設置信息), XInput (X 輸入). 

  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 (手冊頁), 或者會 在本文檔的後續版本中提供詳細的說明. 

  既然 Unix 的服務中有一項 X Font Server, 當然 X11R6 也允許 X 從字體 服務器 (Font Server) 下設定字形,例如 FontPath "/usr/X11R6/lib/X11/fonts/misc/,tcp/DarkEagle:7100"  就是用來告知 X server 在本端的 /usr/X11R6/lib/X11/fonts/misc 路徑中, tcp/zok 這個主機,port 為 7100 的地方找字形. 

  還有的一個路徑是模塊文件路徑. 模塊路徑用於指定所需要的動態鏈接庫的 路徑, 可以是用逗號分開的多個路徑, 也可以是多個以 ModulePath 開頭的 行. 一般這個設置不是必須的, 很多時候可能並不能找到這個設置. 

  需要說明的是, 這裡對各個路徑的設置對順序是無關的. 
copyright © 萬盛學電腦網 all rights reserved