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

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

日期:2017/3/6 15:45:07   编辑:關於Unix
許可證: 本文檔的發布遵循DGPL,任何人有權免費獲得,閱覽, 轉載和發布本文檔,不得用於任何形式的商業用途. 本文檔現在由RockyS.Lee進行維護,任何人可以對 其中存在的遺漏,錯誤進行修改和指正.修改者名單將列於 本文檔的作者名後. 簡短說明: 本文檔的主要目的 許可證:

本文檔的發布遵循 DGPL, 任何人有權免費獲得, 閱覽,
轉載和發布本文檔, 不得用於任何形式的商業用途.

本文檔現在由 Rocky S. Lee 進行維護, 任何人可以對
其中存在的遺漏, 錯誤進行修改和指正. 修改者名單將列於
本文檔的作者名後.


簡短說明:

本文檔的主要目的在於介紹手動配置 Linux 下 XF86 的配置方法, 主要是關
於如何通過修改 XF86Config 文件調整顯示器在圖形模式下的顯示分辨率和顏色
深度, 以及如何通過建立符號連接修改 X Server. 另外提到一些跟圖形界面有關
的網友常問問題. 文中對於如何使用軟件工具做相應的沒有過多提及, 希望會在
以後的版本中加入和軟件修改方法之間的聯系和差別.

本文檔修改版本將在今後進行發布, 關注本文檔的 Linux 用戶可以敬請留意
以下站點:

華南木棉 BBS bbs.g.net.edu.cn
中國 Linux 論壇 www.linuxforum.net
西十八 BBS bbs.x18.scut.edu.cn

一. 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
# 下面這個參數也是為磁金屬鼠標所設定的
# 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 下面安裝軟件, 我想就不再詳細介紹了. 介紹這方
面知識的資料很多.

本文檔將繼續更新, 目標是成為一個簡單的 X Window 入門的手冊. 如果發現有
錯誤或者遺漏, 請於我聯系.

Copyright © Linux教程網 All Rights Reserved