歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 設置和修改XWindow的顯示模式

設置和修改XWindow的顯示模式

日期:2017/3/6 15:39:47   编辑:關於Unix
本文檔的主要目的在於介紹手動配置 Linux 下XF86的配置方法, 主要是關於如何通過修改XF86Config文件調整顯示器在圖形模式下的顯示分辨率和顏色深度, 以及如何通過建立符號連接修改 X Server.另外提到一些跟圖形界面有關的網友常問問題.文中對於如何使用軟 本文檔的主要目的在於介紹手動配置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 開頭的 行. 一般這個設置不是必須的, 很多時候可能並不能找到這個設置. 

  需要說明的是, 這裡對各個路徑的設置對順序是無關的. 

  Modules 段: 這個段指明的是需要加載的動態模塊文件. 當然當前的動態模塊只 是說明了需要加載的 XInput 設備, 並且只在少數其個系統 (現在是 Linux Elf, FreeBSD 2.x 和 NetBSD 1.x, 本資料摘自 RedHat 6.1 中 XF86Config 的 man 文檔) 中被支持. 下面是在本段中可用的設置項: 

  Load "模塊名" 

  這條指令指示服務器加載由模塊名指定的模塊. 如果該模塊沒有使用 完整路徑名, 服務器將在上面文件段中由 ModulePath 指定的路徑中 進行搜索. 下面是一些可用的模塊: 

  xf86Elo.so 

  xf86MuTouch.so 

  xf86Jstk.so 

  xf86Wacom.so 

  xf86Summa.so 

  xf86AceCad.so 

  xf86Calcomp.so 

  xf86Dial.so 

  在一些系統中還可以把 PEX 和 XIE 的擴展作為模塊使用, 如下: 

  pex5.so 

  xie.so 

  ServerFlag 段: 這個段指明了一些具體的參數, 如下: 

  NoTrapSignals 這個標志將使調試信號對 X Server 不起作用. 調試信號會使 X Server "轉儲核心", 把內存中有關的 X Server 的信息存儲 到硬盤上, 即所謂的 "Core dump". 這樣的目的是便於對 X Server 進 行調試. 一般來說, 除非是X 的除錯人員, 否則我們是用不到這個選 項的. 

  DontZap 這個標志將使 X Server 收到 "Ctrl + Alt + Back Space" 鍵 組合發出的信號時 *不* 停止工作. 當然一般是不建議使用的. 

  DontZoom 這個標志使 X Window 不能在各種圖形模式之間進行切換. X Window 的缺省狀態是在用戶設定了多組分辨率, 刷新頻率和顏色的組 合的情況下, 運行 X Window 的過程中可以通過 Ctrl + '+' 和 Ctrl + '-' 兩組鍵的組合在多個圖形模式之間進行動態切換. 

  Keyboard 段: 這個段指明了 X Window 環境中所使用的鍵盤映射以及其他一些參 數. 如下是作者的鍵盤配置: 

    Section "Keyboard" 

    Protocol "Standard" 

    # 這裡的取值的可能值是 "Standard" 和 "Xqueue" 

      AutoRepeat 500 5

    # 指定延遲 (delay) 和 速率 (rate), 這裡的設定分別為 500 和 0. 

    # 注意: 這個設置並非對所有的平台都適用 

      LeftAlt Meta 

      RightAlt Meta 

    # 使用左右 Alt 鍵作 Meta 鍵. 

    # 這裡的可能值為 "Meta", "Compose", "ModeShift", "ModeLock", 

    # "ScrollLock", "Ctrl" 

     ScrollLock Compose 

     RightCtrl 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 

    # 下面這個參數也是為磁金屬鼠標所設定的 

    # ChordMiddle EndSection 

  Mornitor 段: 這個段的設置需要參考顯示器的用戶手冊, 以便獲得相關的數據, 防止損壞顯示器. 這個段是我改動最多的, 現舉例描述如下: 

    Section "Monitor" 

    Identifier "Samsung SyncMaster 500s/500Ms" 

    # 監視器標示符, 在下面 Screen 段用作標示 

    # 這個參數的設置對顯示器的模式沒有直接影響, 只要保證跟後面 

    # Screen 段的引用保持一致 VendorName "Unknown" 

    # 生產廠家的名稱 ModelName "Unknown" 

    # 制造和型號的標示, 並不重要 # 在使用 Xconfigurator 的時候, 如果不提供上述值, 則填寫 

    # "Unknown" 

    # 下面這兩個參數在設置顯示模式上來書哦是比較重要的. 

    # HorizSync 是水平掃描頻率, kHz 為單位. 

    HorizSync 50-60 

    # VertRefresh 是垂直掃描頻率, Hz 為單位 

    VertRefresh 80-100 

    # 上面這兩個參數可以是列舉的形式, 也可以是范圍的形式. 

    # 比如: 列舉: 75 85 100 

    #    范圍: 如上所述 

    # 接下來是模式的描述了, 如果您使用的是 TurboLinux 或者是 

    # RedHat Linux, 下面的模式列表將會非常的完整. 但 Slackware 

    # 沒有提供完整的列表, 這些數據可以在顯示器的說明書上見到. 

    # 為節省空間, 這裡僅列舉一條 

    # 800x600 @ 85 Hz, 55.84 kHz hsync 

    Modeline "800x600" 60.75 800 864 928 1088 600 616 621 657 -HSync -VSync 

    # 或者寫成以下形式, 為 Slackware 采用 

    # Mode "800x600" 

    # DotClock 45 

    # HTimings 1024 1048 1208 1264 

    # VTimings 768 776 784 817 

    # Flags "Interlace" 

    # EndMode 

  Endsection 

  這裡來講講上面的 ModeLine 的涵義. 就象第二種形式所描述的那樣, 這些 參數是使用 "800x600x85Hz" 模式所需要的. 要設置顯示為這種模式, 首先 要保證水平掃描頻率和垂直掃描頻率要配合好, 即 VertRefresh 的范圍或列 舉值中要包括 85 Hz, 而 HorizSync 的值需要包括 55.84 kHz. 這些都可以 通過手工調整. 然後需要看看打點頻率. 有些顯示器有這個參數提供, 而另 外一些可能檢測不到, 這時需要查看手冊. 打點頻率的值可以不提供, 這點 在下面會有講述. 

  注意, 這裡的 "800x600" 就是這種模式的標示. 等到下面談到模式的設置順 序就會清楚 X Window 是如何設置的了. 

  Device 段: 這裡主要記錄了顯卡的數據, 如下可以看到, 很簡單, 只有顯存的大 小和顯卡的時鐘頻率. 這個時鐘頻率是用來產生視頻信號, 而顯示器的掃描 頻率也是根據這個信號產生的. 所以不要為了追求高分辨率和高刷新頻率把 它調得太高, 否則可能會損傷顯示器. 一般在顯示器的說明書上會有這個值, 如果沒有, 建議不要超過 50. 

  Section "Device" 

    Identifier "Generic VGA" 

    VendorName "Unknown" 

    BoardName "Unknown" 

    Chipset "generic" 

    # VideoRam 256 

    # Clocks 25.2 28.3 

  EndSection 

  注意: 上面所說的兩個段都可以對多個設備進行描述, 系統會用 Identifier 的值區分不同的設備.

  Screen 段: X Window 的顯示模式的選擇就是記錄在這個段中的. 如果是 RedHat 則會有所有四種 (Mono, VGA16, SVGA, Aclearcase/" target="_blank" >ccelerate) X Server 的段, 如果 是 Slackware, 則可能會只有一個段, 就是對應安裝系統的時候指定的顯示 設備的. 下面以我使用的 accel X Server 說說各字段的涵義. 

  Section "Screen" 

    Driver "accel" 

    # 這個不用解釋了吧, 是 Permedia II 顯卡, 所以使用加速的驅動 

    # 這裡的可能值是"vga2", "vga16", "svga", "accel", 根據自己 

    # 的實際情況設定. 這裡跟 前面講 X Server 時所說的 X 的連接 

    # 目標有關系, 我想這不難連接吧. 

    Device "3DLabs|Permedia II 2D+3D" 

    # 上面制定的顯卡配制, 用 "3DLabs|Permedia II 2D+3D" 作為 

    # Identifier 的. 當然我可以使用自己喜歡的名字, 實際這裡只是 

    # 個標記的作用 

    Monitor "Samsung SyncMaster 500s/500Ms" 

    # 這裡的解釋同 Device, 也是使用上面的 Identifier 的設定值 

    Subsection "Display" 

    # 顯示子段, 可以有多個, 分別對應不同的色深, 即下面的Depth 

    Depth 16 

    Modes "800x600" 

    # 所取的顯示模式 這個值就是根據前面的 ModeLine 上面 

    # 的注釋寫的, 可以有多個, 用空格分開 

    # 這裡需要說明的是, X Server 先檢查這裡的分辨率設置, 

    # 然後根據這個設置和上面標示的垂直和水平刷新頻率決 

    # 定使用哪個 ModeLine, 如果在刷新頻率的范圍內有多種 

    # Mode 可以選擇, 那麼可以通過使用 Ctrl + '+'/'-'進 

    # 行動態切換. ViewPort 0 0 # 這個是視圖的左上角坐標 

    # 如果想用虛擬大小的屏幕, 可以在這裡加上一句 

    #Virtual 1024 768 

    # 這樣的話, 就可以使用大於當前實際屏幕的虛擬屏幕了, 

    # 屏幕會隨這鼠標的移動而轉換. 當然, 要保證有足夠的 

    # 顯存才行, 虛擬的屏幕大小要比實際的設定大.. EndSubsection 

    # 在這下面可以再加上 Depth 分別為 8 和 24 的子段, 格式和上 

    # 面一樣. 

  EndSection 

  當然, 如果發現所選的設備驅動根實際的硬件設備不相符, 還可以重新安裝 驅動程序.如何在 Linux 下面安裝軟件, 我想就不再詳細介紹了. 介紹這方 面知識的資料很多. 

  參考 

  XF86Config man 手冊頁

Copyright © Linux教程網 All Rights Reserved