許可證: 本文檔的發(fā)布遵循 DGPL, 任何人有權(quán)免費(fèi)獲得, 閱覽, 轉(zhuǎn)載和發(fā)布本文檔, 不得用于任何形式的商業(yè)用途. 本文檔現(xiàn)在由 Rocky S. Lee 進(jìn)行維護(hù), 任何人可以對(duì) 其中存在的遺漏, 錯(cuò)誤進(jìn)行修改和指正. 修改者名單將列于 本文檔的作者名后. 簡(jiǎn)短說(shuō)明: 本文檔的主要目的在于介紹手動(dòng)配置 linux 下 XF86 的配置方法, 主要是關(guān) 于如何通過(guò)修改 XF86Config 文件調(diào)整顯示器在圖形模式下的顯示分辨率和顏色 深度, 以及如何通過(guò)建立符號(hào)連接修改 X Server. 另外提到一些跟圖形界面有關(guān) 的網(wǎng)友常問(wèn)問(wèn)題. 文中對(duì)于如何使用軟件工具做相應(yīng)的沒(méi)有過(guò)多提及, 希望會(huì)在 以后的版本中加入和軟件修改方法之間的聯(lián)系和差別. 本文檔修改版本將在今后進(jìn)行發(fā)布, 關(guān)注本文檔的 Linux 用戶(hù)可以敬請(qǐng)留意 以下站點(diǎn): 華南木棉 BBS bbs.gznet.edu.cn 中國(guó) Linux 論壇 www.linuxforum.net 西十八 BBS bbs.x18.scut.edu.cn 一. X Window 工作方式略談 (如果你之關(guān)心如何對(duì) X Widow 進(jìn)行設(shè)置, 可以跳過(guò)這一節(jié). 只是理解這一 節(jié)所講的知識(shí)對(duì)于理解下面的各設(shè)置步驟有一定幫助) X Window 的工作方式跟 Microsoft Windows 有著本質(zhì)的不同. MS Windows 的圖形用戶(hù)界面 (GUI) 是跟系統(tǒng)緊密相聯(lián)的. 而 X Window 則不是, 它實(shí)際上是 在系統(tǒng)核心 (kernel) 的上面運(yùn)行的一個(gè)應(yīng)用程序. X Window 的運(yùn)行分為四層. 最底層的是 X Server(服務(wù)器), 提供圖形界面 的驅(qū)動(dòng), 為 X Window 提供服務(wù). 上面的一層是用于網(wǎng)上通信的網(wǎng)絡(luò)協(xié)議 -- X 網(wǎng)絡(luò)協(xié)議. 這部分使遠(yuǎn)程運(yùn)行 X Window 成為可能. 只需要在服務(wù)器上運(yùn)行一個(gè) X Server, 而客戶(hù)機(jī) (Client) 上運(yùn)行更上一層的程序, 則可以實(shí)現(xiàn) X Widow 的 遠(yuǎn)程運(yùn)行. 再往上的一層是稱(chēng)作 Xlib 的低層函數(shù)接口, 介于網(wǎng)絡(luò)和和基礎(chǔ)系統(tǒng) 于較高層的程序之間. 應(yīng)用程序的實(shí)現(xiàn)是通過(guò)調(diào)用這一層的函數(shù)實(shí)現(xiàn)的. 最頂層 就是管理窗口的窗口管理器了, 也就是一般所說(shuō)的 WM (Window Manager). 在這 一層的軟件是用戶(hù)都比較常接觸的, 比如 fvwm, AfterStep, Enlightment 以及 WindowMaker 等等. 從上面的介紹來(lái)看, X Window 的運(yùn)行是一種客戶(hù)機(jī)/服務(wù)器(Client/Server) 的模式, 服務(wù)器用于顯示客運(yùn)的應(yīng)用程序, 又被稱(chēng)為顯示服務(wù)器(Display Server) 顯示服務(wù)器位于硬件和客戶(hù)機(jī)之間, 它跟蹤所有來(lái)自輸入設(shè)備比如鍵盤(pán), 鼠標(biāo)的 輸入動(dòng)作, 經(jīng)過(guò)處理后將其送回客戶(hù)機(jī). 這樣, 使用戶(hù)甚至可以在 MS Windows 的機(jī)器上運(yùn)行 X Client, 截取并傳送用戶(hù)的輸入, 只是將 X Window 的屏幕輸出 顯示在用戶(hù)的屏幕上. 客戶(hù)機(jī)的輸入和輸出系統(tǒng)跟 X 服務(wù)器之間的通信都是遵守 X 協(xié)議的. 由于本文檔的主要目的在于介紹如何設(shè)置, 因此對(duì) X Window 不再作進(jìn)一步的 介紹. 更詳細(xì)的資料可以參考有關(guān)的 HOWTO, man 頁(yè)等等. 二. 關(guān)于 X Window 的設(shè)置 1. X Server 在 Linux 下, 這些服務(wù)器的程序是存放在 /usr/X11R6/bin/ 下面, 并且都由 XF86_ 打頭, 一般來(lái)說(shuō), 會(huì)提供單顯 Mono, 標(biāo)準(zhǔn) VGA 和 SVGA 的驅(qū)動(dòng), 分 別命名為: XF86_Mono, XF86_VGA16 和 XF86_SVGA, 另外可能還會(huì)有 S3 和其他一 些帶有圖形加速功能的顯卡的驅(qū)動(dòng). 下面是作者本人機(jī)器上運(yùn)行的 RedHat Linux 6.1 中所帶有的 X Server 驅(qū)動(dòng): 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 下面沒(méi)有上面某個(gè)文件或者多了某個(gè)文件, 不必在 意, 這主要決定于你的機(jī)器的硬件. 其實(shí)一般只需要跟自己硬件相配套的驅(qū)動(dòng)即可. 比如作者正在使用的機(jī)器上使用的是 3D Lab Permedia II 的芯片的顯示卡, 因此 只有 XF86_3DLabs 是有作用的. 如此之多種類(lèi)的顯示適配器驅(qū)動(dòng)程序, 系統(tǒng)當(dāng)然需要一個(gè)固定和統(tǒng)一的方法去 訪問(wèn)它, 一般說(shuō)來(lái), 系統(tǒng)是使用一個(gè)名為 X 的符號(hào)連接去訪問(wèn)具體的 X Server 的. 這個(gè) X 也同樣是存在于 /usr/X11R6/bin/ 目錄中, 可以使用如下命令打印他的具 體指向: ls -l /usr/X11R6/bin/X 得到的結(jié)果如: lrwxrwxrwx 1 root root 8 Dec 14 03:40 /usr/X11R6/bin/X -> XF86_3DLab 前面的屬性 "lrwxrwxrwx" 中第一個(gè)字母 l 表示它是一個(gè)連接, 在最后由箭頭 指出它所指向的具體目標(biāo). (這里的換行是為了閱讀的方便) 明白了這個(gè), 在以后需要更換 X Server 的時(shí)候就可以通過(guò)改變這個(gè)聯(lián)系來(lái)實(shí)現(xiàn) 了, 具體命令如下: ln -sf /usr/X11R6/bin/X??????? /usr/X11R6/bin/X 其中問(wèn)號(hào)代表的字母根據(jù)具體情況決定. 有些時(shí)候, 由于這個(gè)連接不正確, 導(dǎo)致 無(wú)法運(yùn)行 X Window, 這時(shí)可以使它指向 XF86_VGA16, 使用 16 色的 VGA 模式進(jìn)入 X Window, 注意如果需要運(yùn)行 XF86Setup 程序 (是個(gè)圖形界面的 X Window 配置工 具程序), 那么這個(gè) XF86_VGA16 驅(qū)動(dòng)一定要存在, 這是由于該驅(qū)動(dòng)所提供的顯示模式 是一般顯示卡和顯示器都支持的, 故該配置程序使用此 X Server 為驅(qū)動(dòng). 當(dāng)用戶(hù)的 顯卡是比較特殊的型號(hào)時(shí), 需要裝特定的驅(qū)動(dòng)程序, 也需要作此工作. 驅(qū)動(dòng)程序的獲得有多種途徑, 一般的 Linux 發(fā)行版本都提供了豐富的驅(qū)動(dòng)程序, 可以滿(mǎn)足大部分要求, 比較特殊的驅(qū)動(dòng)程序, 可以在網(wǎng)上獲得. 當(dāng)然現(xiàn)在 Linux 對(duì)硬 件的支持還不是很完善, 但這已經(jīng)超出了本文檔的訪問(wèn), 不在作更多的表述. 2. 顯示模式 顯示模式包括分辨率, 掃描頻率, 色深等等. 這也是網(wǎng)友在顯示方面提問(wèn)最多的 一個(gè)問(wèn)題. 對(duì)于現(xiàn)在的顯示卡和顯示器, 一般都可以使用 1024 x 768 x 16 bit 色的 顯示模式. 當(dāng)然保險(xiǎn)起見(jiàn), 在使用下面所敘述的方法設(shè)置您所使用的顯示模式的時(shí)候, 請(qǐng)確定您的顯示卡和顯示器能夠達(dá)到該模式的要求, 否則可能會(huì)有損壞硬件的危險(xiǎn). 在各發(fā)行版本中, 都會(huì)提供一些設(shè)置 X Window 的工具軟件, 如 Xconfigurator, XF86Setup, XF86Config 等等, 這些程序無(wú)一例外的是提供了一個(gè)修改 X Window 的 配置文件 XF86Config 的簡(jiǎn)便方法. 當(dāng)然使用起來(lái)比較方便, 但是對(duì)于一些需要靈活 調(diào)整的場(chǎng)合就不是非常適合, 需要手動(dòng)調(diào)整配置文件中的參數(shù)達(dá)到最好效果. 您不必 一定這樣做, 這里只是介紹這樣一種方法, 使您可以在有疑問(wèn)的時(shí)候方便地解決. 一般這個(gè)文件是存在于 /usr/X11R6/lib/X11/ 目錄下, 在 /etc 或者 /etc/X11 目錄中有它的一個(gè)符號(hào)連接. 它是一個(gè)文本文件, 可以使用 vi 對(duì)它進(jìn)行修改. 下面 對(duì)該文件中各部分的作用做個(gè)詳細(xì)的介紹. (如有遺漏, 歡迎提出) 在這個(gè)文件中有這樣幾個(gè)概念: 段 (Section) 和子段 (Subsection). 每個(gè)段或 子段分別給出了不同的參數(shù), 格式分別為: Section ...... Endsection Section Subsection ...... Endsubsection Endsection 一個(gè)完整的配置文件中包含六個(gè)段, 分別是 File (文件), SeverFlag (服務(wù)器特 殊標(biāo)志), Keyboard (鍵盤(pán)), Pointer (指示設(shè)備, 一般是鼠標(biāo)), Monitor (監(jiān)視器), Device (顯示適配器, 即顯卡), Screen (屏幕設(shè)置信息). File 段: 這一段指示出一些運(yùn)行 X Window 所需要的文件的位置, 比如顏色的別 名文件 rgb.txt (注意這里是不需要寫(xiě)出該文件的擴(kuò)展名), 比如: RgbPath "/usr/X11R6/lib/X11/rgb" 如果您看過(guò) /usr/X11R6/lib/X11/rgb.txt 的內(nèi)容, 你會(huì)很容易的知道它是 干什么用的. 有了它, 你可以使用 red1 代表 RGB 顏色值 255 0 0 等等. 接下來(lái)是字體文件的路徑, 這里的設(shè)置將影響到中文字體的輸出. 這里對(duì)路 徑的設(shè)置可以是多個(gè), 例如下面的這樣: 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" 在使用一個(gè)字體目錄之前, 需要使用 mkfontdir 命令把一條路徑中的字體 作個(gè)列表, 在該目錄中生成 font.dir 作為對(duì)字體的索引, 如: mkfontdir /usr/X11Ry/lib/X11/fonts/100dpi 具體該命令的用法, 請(qǐng)使用 man 命令查看其 man page (手冊(cè)頁(yè)), 或者會(huì) 在本文檔的后續(xù)版本中提供詳細(xì)的說(shuō)明. ServerFlag 段: 這個(gè)段指明了一些具體的參數(shù), 如下: NoTrapSignals 這個(gè)標(biāo)志將使調(diào)試信號(hào)對(duì) X Server 不起作用. 調(diào)試信 號(hào)會(huì)使 X Server "轉(zhuǎn)儲(chǔ)核心", 把內(nèi)存中有關(guān)的 X Server 的信息存儲(chǔ) 到硬盤(pán)上, 即所謂的 "Core dump". 這樣的目的是便于對(duì) X Server 進(jìn) 行調(diào)試. DontZap 這個(gè)標(biāo)志將使 X Server 收到 "Ctrl + Alt + Back Space" 鍵 組合發(fā)出的信號(hào)時(shí) *不* 停止工作. 當(dāng)然一般是不建議使用的. DontZoom 這個(gè)標(biāo)志使 X Window 不能在各種圖形模式之間進(jìn)行切換. X Window 的缺省狀態(tài)是在用戶(hù)設(shè)定了多組分辨率, 刷新頻率和顏色的組 合的情況下, 運(yùn)行 X Window 的過(guò)程中可以通過(guò) Ctrl + '+' 和 Ctrl + '-' 兩組鍵的組合在多個(gè)圖形模式之間進(jìn)行動(dòng)態(tài)切換. Keyboard 段: 這個(gè)段指明了 X Window 環(huán)境中所使用的鍵盤(pán)映射以及其他一些參 數(shù). 如下是作者的鍵盤(pán)配置: Section "Keyboard" PRotocol "Standard" AutoRepeat 500 5 # 指定延遲 (delay) 和 速率 (rate) # 這里的設(shè)定分別為 500 和 0 LeftAlt Meta RightAlt Meta # 使用左右 Alt 鍵作 Meta 鍵. # 關(guān)于 Meta 鍵, 希望以后能夠補(bǔ)充完整 ScrollLock Compose RightCtl Control XkbKeycodes "xfree86" XkbTypes "default" XkbCompat "default" XkbSymbols "us(pc101)" XkbGeometry "pc" XkbRules "xfree86" XkbModel "pc101" XkbLayout "us" EndSection 這段設(shè)置出了 XkbLayout 會(huì)影響鍵盤(pán)各按鍵的表現(xiàn)以外, 其他都只是一些功 能上的設(shè)置, 沒(méi)有太大影響. 在控制臺(tái)模式下, 可以通過(guò) Alt + F? 在各虛 擬終端間進(jìn)行切換, 在 X Widow 環(huán)境下, 必須使用 Ctrl + Alt + F? 才能 夠達(dá)到這一效果. 對(duì)于本段以及下面的 Pointer 段, 由于本人經(jīng)驗(yàn)和所知的限制不能完整地講 述, 會(huì)在不久以后作進(jìn)一步補(bǔ)充. 并在此向各位表示歉意. Pointer 段: 如前所述, 這個(gè)段是設(shè)置鼠標(biāo)等設(shè)備的. 如下舉例是作者的鼠標(biāo)設(shè) 置: Section "Pointer" Protocol "PS/2" Device "/dev/mouse" # 下面這兩個(gè)參數(shù)是一些采用磁技術(shù)的鼠標(biāo)所需要的, 一般注釋掉或者刪除 # BaudRate 9600 # SampleRate 150 # 下面的兩個(gè)參數(shù)是為方便使用雙鍵鼠標(biāo)的用戶(hù)使用三鍵鼠標(biāo)而設(shè)置的 # 當(dāng)選擇了虛擬三鍵的時(shí)候, 可以通過(guò)同時(shí)點(diǎn)擊鼠標(biāo)左右鍵完成中鍵的功能 Emulate3Buttons Emulate3Timeout 50 # 下面這個(gè)參數(shù)也是為磁金屬鼠標(biāo)所設(shè)定的 # ChordMiddle EndSection Mornitor 段: 這個(gè)段的設(shè)置需要參考顯示器的用戶(hù)手冊(cè), 以便獲得相關(guān)的數(shù)據(jù), 防止損壞顯示器. 這個(gè)段是我改動(dòng)最多的, 現(xiàn)舉例描述如下: Section "Monitor" Identifier "Samsung SyncMaster 500s/500Ms" # 監(jiān)視器標(biāo)示符, 在下面 Screen 段用作標(biāo)示 # 這個(gè)參數(shù)的設(shè)置對(duì)顯示器的模式?jīng)]有直接影響, 只要保證跟后面 # Screen 段的引用保持一致 VendorName "Unknown" # 生產(chǎn)廠家的名稱(chēng) ModelName "Unknown" # 制造和型號(hào)的標(biāo)示, 并不重要 # 在使用 Xconfigurator 的時(shí)候, 如果不提供上述值, 則填寫(xiě) # "Unknown" # 下面這兩個(gè)參數(shù)在設(shè)置顯示模式上來(lái)書(shū)哦是比較重要的. # HorizSync 是水平掃描頻率, kHz 為單位. HorizSync 50-60 # VertRefresh 是垂直掃描頻率, Hz 為單位 VertRefresh 80-100 # 上面這兩個(gè)參數(shù)可以是列舉的形式, 也可以是范圍的形式. # 比如: 列舉: 75 85 100 # 范圍: 如上所述 # 接下來(lái)是模式的描述了, 如果您使用的是 TurboLinux 或者是 # RedHat Linux, 下面的模式列表將會(huì)非常的完整. 但 Slackware # 沒(méi)有提供完整的列表, 這些數(shù)據(jù)可以在顯示器的說(shuō)明書(shū)上見(jiàn)到. # 為節(jié)省空間, 這里僅列舉一條 # 800x600 @ 85 Hz, 55.84 kHz hsync Modeline "800x600" 60.75 800 864 928 1088 600 616 621 657 -HSync -VSync # 或者寫(xiě)成以下形式, 為 Slackware 采用 # Mode "800x600" # DotClock 45 # HTimings 1024 1048 1208 1264 # VTimings 768 776 784 817 # Flags "Interlace" # EndMode Endsection 這里來(lái)講講上面的 ModeLine 的涵義. 就象第二種形式所描述的那樣, 這些 參數(shù)是使用 "800x600x85Hz" 模式所需要的. 要設(shè)置顯示為這種模式, 首先 要保證水平掃描頻率和垂直掃描頻率要配合好, 即 VertRefresh 的范圍或列 舉值中要包括 85 Hz, 而 HorizSync 的值需要包括 55.84 kHz. 這些都可以 通過(guò)手工調(diào)整. 然后需要看看打點(diǎn)頻率. 有些顯示器有這個(gè)參數(shù)提供, 而另 外一些可能檢測(cè)不到, 這時(shí)需要查看手冊(cè). 打點(diǎn)頻率的值可以不提供, 這點(diǎn) 在下面會(huì)有講述. 注意, 這里的 "800x600" 就是這種模式的標(biāo)示. 等到下面談到模式的設(shè)置順 序就會(huì)清楚 X Window 是如何設(shè)置的了. Device 段: 這里主要記錄了顯卡的數(shù)據(jù), 如下可以看到, 很簡(jiǎn)單, 只有顯存的大 小和顯卡的時(shí)鐘頻率. 這個(gè)時(shí)鐘頻率是用來(lái)產(chǎn)生視頻信號(hào), 而顯示器的掃描 頻率也是根據(jù)這個(gè)信號(hào)產(chǎn)生的. 所以不要為了追求高分辨率和高刷新頻率把 它調(diào)得太高, 否則可能會(huì)損傷顯示器. 一般在顯示器的說(shuō)明書(shū)上會(huì)有這個(gè)值, 如果沒(méi)有, 建議不要超過(guò) 50. Section "Device" Identifier "Generic VGA" VendorName "Unknown" BoardName "Unknown" Chipset "generic" # VideoRam 256 # Clocks 25.2 28.3 EndSection 注意: 上面所說(shuō)的兩個(gè)段都可以對(duì)多個(gè)設(shè)備進(jìn)行描述, 系統(tǒng)會(huì)用 Identifier 的值區(qū)分不同的設(shè)備. Screen 段: X Window 的顯示模式的選擇就是記錄在這個(gè)段中的. 如果是 RedHat 則會(huì)有所有四種 (Mono, VGA16, SVGA, Accelerate) X Server 的段, 如果 是 Slackware, 則可能會(huì)只有一個(gè)段, 就是對(duì)應(yīng)安裝系統(tǒng)的時(shí)候指定的顯示 設(shè)備的. 下面以我使用的 accel X Server 說(shuō)說(shuō)各字段的涵義. Section "Screen" Driver "accel" # 這個(gè)不用解釋了吧, 是 Permedia II 顯卡, 所以使用加速的驅(qū)動(dòng) # 這里的可能值是"vga2", "vga16", "svga", "accel", 根據(jù)自己 # 的實(shí)際情況設(shè)定. 這里跟 前面講 X Server 時(shí)所說(shuō)的 X 的連接 # 目標(biāo)有關(guān)系, 我想這不難連接吧. Device "3DLabs|Permedia II 2D+3D" # 上面制定的顯卡配制, 用 "3DLabs|Permedia II 2D+3D" 作為 # Identifier 的. 當(dāng)然我可以使用自己喜歡的名字, 實(shí)際這里只是 # 個(gè)標(biāo)記的作用 Monitor "Samsung SyncMaster 500s/500Ms" # 這里的解釋同 Device, 也是使用上面的 Identifier 的設(shè)定值 Subsection "Display" # 顯示子段, 可以有多個(gè), 分別對(duì)應(yīng)不同的色深, 即下面的 Depth Depth 16 Modes "800x600" # 所取的顯示模式 這個(gè)值就是根據(jù)前面的 ModeLine 上面 # 的注釋寫(xiě)的, 可以有多個(gè), 用空格分開(kāi) # 這里需要說(shuō)明的是, X Server 先檢查這里的分辨率設(shè)置, # 然后根據(jù)這個(gè)設(shè)置和上面標(biāo)示的垂直和水平刷新頻率決 # 定使用哪個(gè) ModeLine, 如果在刷新頻率的范圍內(nèi)有多種 # Mode 可以選擇, 那么可以通過(guò)使用 Ctrl + '+'/'-'進(jìn) # 行動(dòng)態(tài)切換. ViewPort 0 0 # 這個(gè)是視圖的左上角坐標(biāo) # 如果想用虛擬大小的屏幕, 可以在這里加上一句 #Virtual 1024 768 # 這樣的話(huà), 就可以使用大于當(dāng)前實(shí)際屏幕的虛擬屏幕了, # 屏幕會(huì)隨這鼠標(biāo)的移動(dòng)而轉(zhuǎn)換. 當(dāng)然, 要保證有足夠的 # 顯存才行, 虛擬的屏幕大小要比實(shí)際的設(shè)定大.. EndSubsection # 在這下面可以再加上 Depth 分別為 8 和 24 的子段, 格式和上 # 面一樣. EndSection 當(dāng)然, 如果發(fā)現(xiàn)所選的設(shè)備驅(qū)動(dòng)根實(shí)際的硬件設(shè)備不相符, 還可以重新安裝 驅(qū)動(dòng)程序.如何在 Linux 下面安裝軟件, 我想就不再詳細(xì)介紹了. 介紹這方 面知識(shí)的資料很多. 本文檔將繼續(xù)更新, 目標(biāo)是成為一個(gè)簡(jiǎn)單的 X Window 入門(mén)的手冊(cè). 如果發(fā)現(xiàn)有 錯(cuò)誤或者遺漏, 請(qǐng)于我聯(lián)系. |
新聞熱點(diǎn)
疑難解答
圖片精選