FreeBSD連載(54):配置檔案XF86Config

1999年12月26日 16:09 王波

配置檔案XF86Config

  位於/etc目錄下的XF86Config檔案是XFree86的X伺服器的配置檔案,XF86Setup 或者xf86config在配置完後就將配置信息保存在這個檔案中。XFree86也提供了一個配置 檔案的樣例檔案,/usr/X11R6/lib/X11/XF86Config.eg,可以用作參考。很多情況下需 要對X的行為進行微調,而並不想重新啟動設置程序重復進行整個設置過程,這樣手工修 改配置檔案就更為方便。

  有一些X伺服器的參數使用配置程序並不能進行配置,必須在原有XF86Config上 手工更改配置檔案。

  下面將以一個簡單的配置檔案為例進行簡單介紹XFree86的設置選項。

  • 檔案搜尋路徑
Section "Files"
    RgbPath    "/usr/X11R6/lib/X11/rgb"
    FontPath  "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
    FontPath  "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
    FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
    FontPath  "/usr/X11R6/lib/X11/fonts/75dpi/"
    FontPath  "/usr/X11R6/lib/X11/fonts/100dpi/"
#    FontPath   tcp/fontserver:7000
#    ModulePath	"/usr/X11R6/lib/modules"
EndSection

  上面是配置檔案的第一部分 “Files” ,這個檔案部分定義了 X Window使用的搜索檔案路徑,如調色板檔案的路徑RGBPath,字體路徑FontPath,以 及ModulePath用來設置X伺服器的動態可加載模塊的路徑。

  其中字體路徑可以使用多行來設置多個路徑,也可以在一行之內設置多個路徑, 路徑之間使用逗號分隔。字體路徑也能定義為網路上的字體伺服器,這需要指定協議、 主機名和端口地址,例如tcp/fontserver:7000表示一台名為fontserver的字體伺服器使 用tcp端口7000提供字體服務。Unscaled用於修飾表示對這個路徑下的字體不進行縮放處 理,處理固定字體可減少系統資源的消耗。使用字體伺服器可以讓多個伺服器同享字體, 從而達到節約磁碟空間的目的。

  在行首使用符號 “#” ,表示這一行為注釋,並不被X伺服器處理。

  • 可加載模塊
# Section "Module"
# Load "xf86Jstk.so"
# EndSection

  如果前面Files部分定義了ModulePath,這個"Module"部分就用 來裝載相應路徑下具體的模塊。一般情況下,並不需要使用這個功能,除非是使用了一 些非標準的功能,需要可加載模塊的支持,如xf86Jstk.so就是一個遊戲杆的驅動程序。

  • X伺服器選項
Section "ServerFlags"
#    NoTrapSignals
#    DontZap
#    DontZoom
#    DisableVidModeExtension
#    AllowNonLocalXvidtune
#    DisableModInDev
#    AllowNonLocalModInDxev
EndSection

  "ServerFlags"部分設置一些X伺服器的運行參數,對應於XF86Setup 中的Other選項中所設置的內容,一般不需改變。

  NoTrapSignals選項使得X伺服器程序不去處理發送到X伺服器的各個信號, 正 常情況下不設置這個選項,X伺服器應該接收並處理這些信號,當接收到某些信號時就釋放X服 務器占用的資源,切換顯示模式並退出X伺服器的執行。因此打開這個選項就使得發送到X服務 器的信號沒有得到處理,在錯誤不嚴重的情況下,X程序仍將繼續執行而不退出。因此可以用 於調試X伺服器,觀察X的出錯原因及其影響。

  DontZap選項用於屏蔽Crtl-Alt-BackSpace熱鍵,通常不設置這個選項時,使用 者能夠使用這個組合熱鍵退出X伺服器。當要將XFree86系統用作公用X終端時,最好使用這個選 項屏蔽退出熱鍵,讓用戶使用正常的退出方式退出登錄會話。

  DontZoom這個選項用於屏蔽<Crtl><Alt><小鍵碟 “+” >或< 小鍵碟 “-” >兩個用於動態切換分辨率模式的組合鍵,當然X伺服器必須同時設置了多個分辨率 模式,這兩個組合鍵才有意義。

  xvidtune能實時改變X伺服器的顯示模式,例如調整顯示區域位於顯示器中的位置等。然 而一旦針對某個顯示器的顯示模式調整正確之後,就沒有必要動態改變了,因此可以使用DisableVidModeExtension 選項屏蔽xvidtune實時改變顯示模式的能力,以保証顯示器的安全。一般只有本伺服器上的 xvidtune可以完成這個操作,在目前X伺服器上運行遠程電腦上的xvidtune不允許改變本服 務器的狀態。但是,也可以通過設置AllowNonLocalXvidtune選項, 使得非本伺服器 上的xvidtune也有能力和本地的X伺服器進行通信。第二個選項必須在第一個沒有設置的條件 下才能設置。為了安全的原因,不應該允許遠程系統上的xvidtune獲得本伺服器的硬體設置信 息,不要設置這個選項。

  使用DisableModInDev選項,可以屏蔽客戶程序對輸入設備(滑鼠或鍵碟)的動 態改變。 而AllowNonLocalModInDxev選項可以許可非本地的程序(xset)能動態改變 鍵碟或滑鼠的設置。同樣,這兩個選項是衝突的。

  • 鍵碟設置
Section "Keyboard"
    Protocol   "Standard"
#    Protocol  "Xqueue"
AutoRepeat 500 5
#    ServerNumLock
#    Xleds      1 2 3
     LeftAlt     Meta
     RightAlt    ModeShift
     RightCtl    Compose
     ScrollLock  ModeLock
#    XkbDisable
 XkbKeycodes     "xfree86"
 XkbTypes        "default"
 XkbCompat       "default"
 XkbSymbols      "us(pc101)"
 XkbGeometry     "pc"
 XkbRules        "xfree86"
 XkbModel        "pc104"
     XkbLayout       "us"
EndSection

  "Keyboard"用於定義鍵碟的參數,指定了鍵碟使用的協議、重復率以及對 一些功能鍵的重映射。通常在XF86Setup下就可以設置這些選項,而不必手工修改這些設置。

  "Standard""Xqueue"是兩種不同的鍵碟協議,一般應該使用Standard協 議,Xqueue是一種同時支持鍵碟和滑鼠的硬體使用的協議,在個人電腦平台上很少使用。

  "AutoRepeat"用於定義鍵碟的重復速度,"ServerNumLock"讓X伺服器處理 NumLock的狀態,否則是由系統的鍵碟驅動程序處理這個狀態。有些X客戶程序不能從系統鍵碟驅 動程序中獲得小鍵碟的情況,此時就需要設置這個選項。”Xleds”允許X程序,如xset,能 夠改變鍵碟上三個LED狀態燈NumLock、CapsLock和ScrollLocal的狀態。

  下面的"LeftAlt"等設置,用於將個人電腦鍵碟上的鍵重新映射為一些傳統Unix 工作站的鍵碟上使用的鍵,如Meta、Compose等,由於傳統X程序大多數是在工作站上開發的,因此 這些程序需要這些特殊的功能鍵來完成操作,就需要映射這些鍵的定義以保証兼容性。

  "XkbDisable"選項可以用於屏蔽X伺服器對鍵碟的擴展能力, 通常不應該屏蔽這個 能力,而不設置這個參數。這樣就可以在設置檔案中使用下面的設置選項重新定義鍵碟的類型、排 列方式、符號類型、型號、編碼等等。當然一般情況下可以不重新定義這些參數,預設設置為101 鍵PC鍵碟,適用於絕大多數的情況。

  • 滑鼠設置
Section "Pointer"
    Protocol  "Sysmouse"
	 Device	   “/dev/sysmouse”
#    Protocol   "Microsoft"
#    Device     "/dev/ttyd0"
#    BaudRate  1200
#    SampleRate     150
#    Emulate3Buttons
#    Emulate3Timeout     50
#    ChordMiddle
EndSection

  "Pointer"部分用於定義滑鼠的參數,最重要的內容是定義滑鼠的類型 和使用的設備檔案。對於使用moused來管理滑鼠的情況,滑鼠配置相當容易,首先在控制台下 設置好滑鼠,然後使用/dev/sysmouse作設備檔案,Sysmouse作為滑鼠類型即 可。如果不打算使用moused來管理滑鼠,而想直接使用滑鼠設備,就需要正確指定滑鼠類型及 其設備檔案。例如最常見的MS兩鍵串口滑鼠使用/dev/ttyd0(或ttyd1串口),使用 Microsoft滑鼠類型,等等。

  注意必須保証系統核心識別出所使用的滑鼠設備(或者串口設備)。

  此外,BaudRateSampleRate參數定義滑鼠驅動程序與設備通信的波 特率和採樣率,Emulate3ButtonsEmulate3Timeout讓兩鍵滑鼠能模擬三鍵鼠 標, 然而偽設備Sysmouse的模擬三鍵能力的設置需要在moused的啟動參數中設置,這裡的設 置是無效的。ChordMiddle與上面參數意義相反,定義按下三鍵滑鼠的中間鍵,等價於 同時按下左右兩鍵。

  • 顯示器設置
Section "Monitor"
    Identifier  "Hyundai DeluxScan 15G+"
    VendorName  "Unknown"
    ModelName   "Unknown"
    HorizSync   30-70
    VertRefresh 50-150
#    ModeLine "1024x768i" 45 1024 1048 1208 1264 768 776 784 817 Interlace
#    Mode "1024x768i"
#        DotClock	45
#        HTimings	1024 1048 1208 1264
#        VTimings	768 776 784 817
#        Flags		"Interlace"
#    EndMode
# 800x600 @ 72 Hz, 48.0 kHz hsync
Modeline "800x600"     50     800  856  976 1040   600  637  643  666 +hsync +vsync
# 1024x768 @ 70 Hz, 56.5 kHz hsync
Modeline "1024x768"    75    1024 1048 1184 1328   768  771  777  806 -hsync -vsync
# 1280x1024 @ 87 Hz interlaced, 51 kHz hsync
Modeline "1280x1024"   80    1280 1296 1512 1568  1024 1025 1037 1165 Interlace
EndSection

  "Monitor"部分定義了顯示器的各種屬性,其中前三項設置IdentifierVendorNameModelName起到的只是標識顯示器的作用, 如果具備多個顯示器定義 選項的時候可以用來區分不同的定義選項,因此這三個設置主要用在配置檔案內部,並不重要。 後 面的水平同步HorizSync與垂直刷新VertRefresh的數據才是真正定義顯示器屬性的參 數,應該與具體的硬體相一致,這將決定顯示器能否工作在具體的顯示模式下。

  ModeLineMode定義了具體顯示模式使用的時序等參數,只有在這裡定義了相 應模式,X伺服器才能使用對應的模式,並在各種模式之間動態切換。然而XF86Setup並沒有設置在顯 示器的同步頻率範圍內支持的全部模式,因此會需要手工增加所需要的模式。而xf86config能將很多 顯示模式都加進設置檔案中,其中很多是不必要的,例如320x200等低分辨率,需要手工刪除。此外一 個分辨率可能會有多個顯示模式相對應,但不同模式的刷新頻率不同,顯然應該保留一個顯示器支持 的非隔行掃描、並具備最高刷新頻率的模式。這些顯示模式受到水平同步和垂直刷新數據的限制,X服 務器會在啟動時屏蔽超過前面定義的水平同步和垂直刷新數據範圍的模式,一避免損壞顯示器。

  顯然,Modeline和Mode選項中的設置數據是一般使用者無法正確設置的,因此就需要從XFree86 的文檔中查詢各種常見的顯示器和及其常用的顯示模式數據,來決定最接近自己顯示器的顯示模式,在 復制到自己的設置檔案中。XFree86的文檔位於在/usr/X11R6/lib/X11/doc目錄下,Readme.Config和 VideoModes.doc檔案描述了各種顯示模式的對應數據,Monitors檔案中收集了各種常見顯示器的水平 同步和垂直刷新數據。

  如果沒有定義多個模式,就不能使用X Server提供的動態切換分辨率模式的功能。

  • 顯示卡設置
Section "Device"
    Identifier "Generic VGA"
    VendorName "Unknown"
    BoardName  "Unknown"
    Chipset    "generic"
#    VideoRam  256
#    Clocks    25.2 28.3
EndSection
Section "Device"
    Identifier  "ViRGE/DX or /GX"
    VendorName  "Unknown"
    BoardName   "Unknown"
    #VideoRam    2048
EndSection

  "Device"部分定義顯示卡設備的參數,同樣IdentifierVendorNameModelName起到標識作用,具體設置如使用的芯片、顯示內存 等設置應與所使用的硬體相一致,但也可以不配置,留給X伺服器自動探測。同樣,也可以 定義多個Device設置,某個具體的X伺服器程序只使用某個選項中的設置。

  如果要針對某個顯示卡更改具體參數,除了查閱顯示卡手冊之外,還要閱讀 /usr/X11R6/lib/X11/doc/目錄下的Devices、modeDB.txt和AccelCards等文檔,在其中查找 與具體顯示卡相關的數據信息。

  • 螢幕設置
    • Section "Screen"
          Driver     "vga16"
          Device     "Generic VGA"
          Monitor     "Hyundai DeluxScan 15G+"
          Subsection "Display"
              Modes      "640x480"
              ViewPort    0 0
              Virtual     800 600
          EndSubsection
      EndSection
      Section "Screen"
          Driver      "accel"
          Device      "ViRGE/DX or /GX"
          Monitor     "Hyundai DeluxScan 15G+"
          DefaultColorDepth 16
          Subsection "Display"
              Depth       24
              Modes       "800x600" "640x480"
              ViewPort    0 0
              Virtual     800 600 
          EndSubsection
          Subsection "Display"
              Depth       8
              Modes       "800x600" "640x480"
              ViewPort    0 0
              Virtual     800 600 
          EndSubsection
          Subsection "Display"
              Depth       16
              Modes       "1024x768" "800x600" "640x480"
              ViewPort    0 0
              Virtual     1024 768
          EndSubsection
      EndSection

        “Screen”部分將具體定義X伺服器的顯示屬性,以及具體使用的 設備和顯示模式。同時可以存在多個Screen部分,而每個screen部分對應一種X伺服器。 雖然一般情況下都只使用一個X伺服器,然而也可能會使用標準VGA模式的X伺服器(如使 用XF86Setup時),因此一般配置檔案中都至少有兩個Screen部分的定義,一個由標準VGA 的X伺服器XF86_VGA16使用,在其中的Driver項中指定了vga16類型,另一個Screen 定義由支持更高模式的具備硬體加速能力的顯示卡X伺服器使用,如XF86_S3V,Driver 項為accel類型。X伺服器根據Driver項的設置來尋找正確的Screen部分設置參數。

        除了在Driver選項中指定了Screen選項與具體X伺服器的聯繫之外, 接下來的Device設置選項將指出這個Screen部分(也就是對應的X伺服器)使 用哪個顯示設備,這個選項的值與設置檔案前面定義的某一個Device部分中Identifier值相 同,這就將X伺服器和指定的顯示設備相聯繫起來(會存在多個定義顯示卡設備的Device部分) 。同樣,Monitor項將Screen部分與某個Monitor部分描述的顯示器相聯繫。

        在一個Screen部分中也可以定義多個Display子部分,每個Display子 部分為對應一種色彩深度的顯示模式設置,顏色深度Depth可以使用的值有8位(256色) 、16位偽真彩色、24位真彩色和32位真彩色(實際只用了24位),DefaultColorDepth用 於設置預設使用的色彩深度。X伺服器不能動態切換顯示顏色深度,只能在同一個顏色深度下切換 不同的顯示模式。這個顏色深度下可供使用的分辨率模式需要使用Modes定義,預設的分 辨率為第一個模式,然後可以使用熱鍵向前或向後切換。

        動態切換分辨率不影響應用程序的顯示,應用程序的顯示內容也不變,XFree86提供 了虛屏能力。虛屏提供了比實際螢幕更大的顯示範圍,例如使用800x600的顯示模式,虛屏的 大小可以是1024x768,這樣可以顯示更多的數據,實際螢幕之外的數據可隨滑鼠的移動而顯示 出來。這樣在切換模式的時候,虛屏的大小卻不變,可以移動滑鼠來查看應用程序切換到虛屏 之外的部分。預設情況下,虛屏的大小為最大的分辨率模式,也可以使用Virtual參數 定義更大的虛屏。可設置的虛屏大小受顯示卡內存和所顯示的色彩深度限制,色彩深度和虛屏 大小的乘積不能超過顯示內存的大小。為了達到最佳效果,還有一些其他考慮。例如加速卡內 有自己的處理器進行圖形加速處理,就要使用一些顯存作為緩衝區,因此將所有的顯存都用做 虛屏會影響顯示卡的加速處理。