章 14. X Window System

目錄

14.1. 手動設定 X Window System
14.2. 安裝與設定字型
14.3. 如需更多資訊

X Window System (X11) 是 UNIX 中既成現實標準的圖形化使用者介面。X 採網路結構,可讓應用程式在一個主機上啟動而在透過任何種類的網路 (LAN 或網際網路) 連接的其他主機上顯示。本章說明 X Window System 環境的安裝與最佳化,並提供有關在 SUSE® Linux Enterprise Desktop 中使用字型的背景資訊。

14.1. 手動設定 X Window System

依照預設,X Window System 是以 SaX2 介面設定的,如第 5.2 節「Setting Up Graphics Card and Monitor」 (第 5 章「Setting Up Hardware Components with YaST」, ↑部署指南) 中所述。但也可手動編輯組態檔案進行設定。

[Warning]錯誤的 X 組態可能會損壞您的硬體

進行 X Window System 組態時請務必小心。在完成組態之前,絕對不可以啟動 X Window System。錯誤設定的系統會對硬體造成無法挽回的損害 (特別是對固定頻率的監視器)。本書與 SUSE Linux Enterprise Desktop 的創作者對於產生的任何損害概不負責。本資訊是仔細研究的結果,但不保證提及的所有方法都正確以及不會損害您的硬體。

指令 sax2 可建立 /etc/X11/xorg.conf 檔案。這是 X Window System 的主要組態檔。這裡有您的圖形卡、滑鼠以及顯示器相關的所有設定。

[Important]使用 X -configure

若之前嘗試 SUSE Linux Enterprise Desktop 的 SaX2 失敗,則請使用 X -configure 設定您的 X 設定。如果您的設定包含專屬的僅二進位驅動程式,則 X -configure 無法工作。

下列段落會描述組態檔 /etc/X11/xorg.conf 的結構。它由多個段落組成,每一個都會處理組態的某個層面。每一個段落以關鍵字 Section <designation> 開始,並以 EndSection 結束。下列轉換會套用到所有部份:

Section "designation"
  entry 1
  entry 2
  entry n
EndSection 

可用的段落類型列出在 表格 14.1 「/etc/X11/xorg.conf 中的段落」 中。

表格 14.1. /etc/X11/xorg.conf 中的段落

類型

代表意義

Files

用於字型與 RGB 顏色表的路徑。

ServerFlags

伺服器行為的一般切換器。

Module

伺服器應載入的模組清單

InputDevice

鍵盤和特殊輸入設備 (觸控板、搖桿裝置等) 之類的輸入設備均在此區段設定。這個段落含有 Driver 的重要參數以及定義 ProtocolDevice 的選項。您每個連接到電腦的設備通常有一個 InputDevice 段落。

Monitor

所用的伺服器。此區段的重要元素包括 Identifier (稍後的 Screen 定義中會提及)、重新整理速率 VertRefresh 以及同步頻率限制 (HorizSyncVertRefresh)。設定值以 MHz、kHz 和 Hz 提供。通常,伺服器會拒絕和監視器規格不對應的模式行。這樣可防止不小心將太高的頻率送往顯示器。

Modes

特定螢幕解析度的模式行參數。這些參數可以由 SaX2 依據使用者給定的值計算,通常不需要變更。如果您要連接固定頻率監視器,現在可以手動變更。在 /usr/share/doc/howto/en/html/XFree86-Video-Timings-HOWTO 目錄 (howtoenh 套件中提供) 中的 HOWTO 檔案中,可以找到各個數值之意義的詳細資料。若要手動計算 VESA 模式,可以使用 cvt 工具。例如,若要計算解析度為 1680x1050、頻率為 60Hz 之顯示器的模式行,請使用指令 cvt 1680 1050 60

Device

特定圖形卡。它以本身的描述名稱表示。本節中可用的選項主要取決於所用的驅動程式。例如,如果使用 i810 驅動程式,可以在手冊頁 man 4 i810 中找到有關可用選項的詳細資訊。

Screen

這個段落和 Monitor 以及 Device 一起構成 X.Org 所有必要的設定。在 Display 子區段中,指定虛擬螢幕的大小 (Virtual)、ViewPort,以及與該螢幕一起使用的 Modes

請注意,某些驅動程式要求所有使用的組態都必須存在於 Display 區段的某個位置。例如,如果您使用筆記型電腦並想要使用比內部 LCD 大的外部顯示器,則可能需要在 Modes 行末尾新增比內部 LCD 支援的解析度更高的解析度。

ServerLayout

單螢幕顯示或多螢幕顯示組態的配置。這個段落連結輸入設備 InputDevice 和顯示設備 Screen

DRI

提供資訊給「直接算圖基礎結構 (DRI)」。


MonitorDeviceScreen 將做詳細說明。如需其他段落的進一步資訊,請參閱 X.Orgxorg.conf 的手冊頁。

xorg.conf 中可能有多個不同的 Monitor Device 段落。也可能有多個 Screen 段落。ServerLayout 段落決定使用這些段落中的哪些段落。

14.1.1. Screen 段落

Screen 段落是由 monitor 和 device 段落組成,已決定要使用的解析度和色彩深度。Screen 段落可能如同 範例 14.1 「/etc/X11/xorg.conf 檔的Screen段落」 一般。

範例 14.1. /etc/X11/xorg.conf 檔的Screen段落

Section "Screen"1
  DefaultDepth  162
  SubSection "Display"3
    Depth       164
    Modes       "1152x864" "1024x768" "800x600"5
    Virtual     1152x8646
  EndSubSection
  SubSection "Display"
    Depth       24
    Modes       "1280x1024"
  EndSubSection
  SubSection "Display"
    Depth       32
    Modes "640x480"
  EndSubSection
  SubSection "Display"
    Depth        8
    Modes       "1280x1024"
  EndSubSection
  Device        "Device[0]"
  Identifier    "Screen[0]"7
  Monitor       "Monitor[0]"
EndSection

1

Section 決定段落類型,在此情況下為 Screen

2

DefaultDepth 決定若無指定色彩深度的話,預設使用的色彩深度。

3

會為每種色彩深度指定不同的 Display 子段落。

4

Depth 決定與該組 Display 設定搭配使用的色彩深度。可能的值為 815162432,但並不是每個值都可用於所有 X 伺服器模組或解析度。

5

Modes 段落包括可能螢幕解析度的清單。X 伺服器將由左而右檢查這個清單。對於每一個解析度,X 伺服器會在 Modes 段落搜尋適合的 ModelineModeline 同時由顯示器與圖形卡的功能決定。Monitor 設定值將決定 Modeline 的結果。

第一個找到的解析度是 Default mode。按 Ctrl+Alt++ (數字鍵盤),可以向右切換到清單中的下一個解析度。按 Ctrl+Alt+ (數字鍵盤),可以切換到上一個解析度。您可以在 X 執行中變更解析度。

6

Display 子段落最後一行的 Depth 16 指虛擬螢幕大小。虛擬螢幕可能的最大大小由圖形卡上安裝的記憶體數量以及所要的色彩深度決定,而不是顯示器的最大解析度。如果省略此行,虛擬解析度便是實體解析度。因為目前的圖形卡都附有大量的視訊記憶體,您可以建立非常大的虛擬桌面。不過,如果將大部份的視訊記憶體用於虛擬桌面,將可能無法使用 3D 功能。例如,如果卡上有 16 MB 的視訊 RAM,虛擬螢幕最大可使用 4096x4096 像素,8 位元色彩探度。不過,不建議將所有記憶體用於虛擬螢幕,特別是加速卡,因為卡的記憶體還要用於各種字型與圖形的快取。

7

Identifier 行 (此處為 Screen[0]) 對這個段落提供一個定義的名稱,以便對下列 ServerLayout 段落提供唯一性參照。DeviceMonitor 行指定屬於這個定義的圖形卡和顯示器。它們透過本身對應的名稱或識別碼Device 以及 Monitor 段落連結。以下詳細討論這些段落。

14.1.2. Device 段落

Device 段落描述特定的圖形卡。xorg.conf 中的設備項目數沒有限制,但每一個設的名稱要使用關鍵字 Identifier (識別碼) 來區別。若您安裝多張圖形卡,段落將只依序編號。第一個稱為 Device[0],第二個稱為 Device[1],以下類推。以下檔案顯示摘自一台使用 Matrox Millennium PCI 圖形卡的電腦 (如 SaX2 所設定) 之 Device 區段的一段文字:

Section "Device"
  BoardName     "MGA2064W"
  BusID         "0:19:0"1
  Driver        "mga"2
  Identifier    "Device[0]"
  VendorName    "Matrox"
  Option        "sw_cursor"
EndSection

1

BusID 表示要在其中安裝圖形卡的 PCI 或 AGP 插槽。這個值和指令 lspci 顯示的 ID 相符。X 伺服器需要十進位格式的詳細資料,但 lspci 以十六進位格式顯示這些值。SaX2 會自動偵測 BusID 的值。

2

SaX2 會自動設定 Driver 的值,並指定您的圖形卡要使用的驅動程式。如果是 Matrox Millennium 圖形卡,驅動程式模組稱為 mga。X 伺服器會在定義於 drivers 子目錄的 Files 段落中的 ModulePath 中搜尋。在標準安裝中,此為 /usr/lib/xorg/modules/drivers 目錄或適用於 64 位元作業系統目錄的 /usr/lib 64/xorg/modules/drivers 目錄。名稱會附加 _drv.o,因此,如果是 mga 驅動程式,將載入驅動動程式檔案 mga_drv.o

X 伺服器或驅動程式的行為可以透過附加的選項來操作。Device 段落中的選項 sw_cursor 便是一個範例。它可以停用硬體滑鼠游標並描述使用軟體的滑鼠指標。驅動程式模組不同,可用的選項也各異 (可以在 /usr/share/doc/packages/套件名稱目錄內驅動程式模組的描述檔案中找到)。通常情況下,也可以在手冊頁 (man xorg.confman 4 <驅動程式模組>man 4 晶片) 中找到有效的選項。

如果圖形卡有多個視訊連接器,可將此卡的各個不同設備設定為單個檢視窗。請使用 SaX2 以此方式設定圖形介面。

14.1.3. Monitor 和 Modes 段落

Device 段落類似,MonitorModes 段落分別描述一個顯示器。組態檔 /etc/X11/xorg.conf 可以含有沒有個數限制的 Monitor 段落。每個 Monitor 段落都會參考帶有 UseModes 行 (若可用) 的 Modes 段落。如果沒有可用於 Monitor 段落的 Modes 段落,X 伺服器將從一般同步值計算適當的值。ServerLayout 段落指定相關的 Monitor 段落。

顯示器定義應該由有經驗的使用者進行設定。模式行是 Monitor 段落的重要組成部份。模式行可設定對應解析度的水平與垂直計時。顯示器內容,特別是允許的頻率,儲存在 Monitor 區段中。可以使用公用程式 cvt 產生標準 VESA 模式。如需詳細資訊,請參閱 cvt 手冊頁 (man cvt)。

[Warning]

除非您深入瞭解監視器與圖形卡功能,否則請勿變更模式行,因為這樣做可能會嚴重損壞您的監視器。

想自行開發顯示器描述的人員,應非常熟悉 /usr/share/X11/doc 文件的內容。安裝 xorg-x11-doc 套件以尋找 PDF 與 HTML 頁面。

在今天,需要手動指定模式行的的情況非常少見。如果您使用先進的多頻顯示器,依規則,X 伺服器可以透過 DDC 直接從顯示器讀取允許頻率以及最佳解析度,如 SaX2 組態區段中所述。如果因某種原因而不適用,請使用 X 伺服器內附的一種 VESA 模式。此模式對大多數圖形卡與顯示器組合都起作用。

14.2. 安裝與設定字型

在 SUSE Linux Enterprise Desktop 上安裝其他字型非常簡單。只要將字型複製到位於 X11 字型路徑中的任何目錄即可 (請參閱第 14.2.1 節「X11 核心字型」)。若要啟用字型,安裝目錄應為 /etc/fonts/fonts.conf 中所設定目錄的子目錄 (請參閱第 14.2.2 節「Xft」),或以 /etc/fonts/suse-font-dirs.conf 包含於此檔案中。

以下內容摘自 /etc/fonts/fonts.conf。此檔案為適用於大多數組態的標準組態檔案。它還定義了包含目錄 /etc/fonts/conf.d。在此目錄中,所有以兩位數值開頭的檔案或符號連結將由 fontconfig 載入。關於此功能的詳細說明,請參閱 /etc/fonts/conf.d/README

<!-- Font directory list -->
<dir>/usr/share/fonts</dir>
<dir>/usr/X11R6/lib/X11/fonts</dir> 
<dir>/opt/kde3/share/fonts</dir>
<dir>/usr/local/share/fonts</dir>
<dir>~/.fonts</dir>

/etc/fonts/suse-font-dirs.conf 是自動產生的,目的是為了將 (多半是協力廠商) 應用程式 (如 LibreOffice、Java 或 Adobe Reader) 中包含的字型拉進來。常見項目如下所示:

<dir>/usr/lib/Adobe/Reader9/Resource/Font</dir>
<dir>/usr/lib/Adobe/Reader9/Resource/Font/PFM</dir>
 

若要在整個系統上安裝其他字型,請以 root 身分手動將字型檔案複製到合適的目錄,如 /usr/share/fonts/truetype。此外,這個作業可以透過「KDE 控制中心」中的 KDE 字型安裝程式來執行。結果完全相同。

您也可以建立符號連結,來替代複製實際字型。例如,如果您擁有掛接 Windows 分割區上的授權字型並且想要使用它們,便可能需要這樣做。接下來,請執行 SuSEconfig --module fonts

SuSEconfig --module fonts 會執行指令碼 /usr/sbin/fonts-config 來處理字型組態。關於此指令碼的詳細資訊,請參閱其手冊頁 (man fonts-config )。

點陣字型、TrueType 與 OpenType 字型以及 Type1 (PostScript) 字型的程序完全相同。所有這些字型類型可安裝到任何目錄。

X.Org 包含兩種完全不同的字型系統:舊的 X11 核心字型系統與新設計的 Xft 與 fontconfig 系統。以下數節簡短描述這兩種系統。

14.2.1. X11 核心字型

目前,X11 核心字型系統不僅支援點陣字型,也支援縮放字型如 Type1 字型、TrueType 與 OpenType 字型。縮放字型僅只支援不需要消除鋸齒及子像素 (subpixel) 處理的字型,含有更多語言的文字符號的縮放字型所需的載入時間也越長。也支援 Unicode 字型,但是處理速度較慢且需要更多的記憶體。

X11 核心字型系統具有某些先天性的弱點。該字型系統已過時,無法再以任何有效的方法擴充。保留這種字型是為了回溯相容,但最好儘可能使用更先進的 Xft 和 fontconfig 系統。

為了能夠進行作業,X 伺服器必須知道它有哪些字型可用,以及系統中的哪些地方可以找到這些字型。這是由 FontPath 變數負責處理,該變數包含所有有效系統字型目錄的路徑。每個目錄中的 fonts.dir 檔案,可以列出目錄中可用的字型有哪些。FontPath 是 X 伺服器在啟動時產生的。它會在 /etc/X11/xorg.conf 組態檔案的 FontPath 項目中,搜尋一個有效的 fonts.dir 檔案。這些項目會在 Files 區段中找到。使用 xset q 顯示實際的 FontPath。也可以使用 xset 在執行時變更此路徑。若要新增其他路徑,請使用 xset+fp <path>。若要移除不要的路徑,請使用 xset-fp <path>

如果 X 伺服器已經啟動,掛接目錄中新安裝的字型可以透過指令 xsetfp rehash 來設成可用。這個指令以 SuSEconfig--module fonts 執行。由於指令 xset 必須存取執行中的 X 伺服器,因此只有在 SuSEconfig--module fonts 是從可存取之執行中 X 伺服器的外圍程序啟動時才有效。實現此目的最簡單的方法是輸入 suroot 密碼,以取得 root 權限。su 可以將啟動 X 伺服器之使用者的存取權傳送到 root 外圍程序。要檢查字型是否安裝正確以及是否可以透過 X11 核心字型系統來使用,請使用 xlsfonts 指令來列出所有可用字型。

根據預設,SUSE Linux Enterprise Desktop 使用 UTF-8 地區設定。因此,最好使用 Unicode 字型 (在 xlsfonts 的輸出中,字型名稱的結尾為 iso10646-1)。xlsfonts| grep iso10646-1 可以列出所有可用的 Unicode 字型。SUSE Linux Enterprise Desktop 隨附的 Unicode 字型絕大部分都至少具有歐洲語言所需的文字符號 (舊編碼方式為 iso-8859-*)。

14.2.2. Xft

從一開始,Xft 的程式設計人員便確保了能支援平滑美觀的可縮放字型。如果使用 Xft,字型將由使用字型的應用程式處理,而不是如 X11 核心字型系統那樣由 X 伺服器處理。在這種方式,個別的應用程式需要存取實際字型檔並完全控制文字符號的處理方式。多種語言文字的正確顯示基礎便是由此構成。直接存取字型檔對於在列印中內嵌字型,來保證列印出的外觀和螢幕輸出一致非常有用。

在 SUSE Linux Enterprise Desktop 中,KDE 和 GNOME 這兩個桌面環境、Mozilla 以及其他許多應用程式預設已使用 Xft。越來越多的應用程式已經從舊 X11 核心字型系統改用 Xft。

Xft 使用 fontconfig 程式庫來尋找字型以及操作字型的處理方式。fontconfig 的內容由全域組態檔案 /etc/fonts/fonts.conf 控制。特殊組態應新增至 /etc/fonts/local.conf 與使用者特定的組態檔案 ~/.fonts.conf。這些 fontconfig 組態檔每一個都必須以下列開頭

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

並以下列結束

</fontconfig>

要新增字型搜尋目錄,請附加下列行:

<dir>/usr/local/share/fonts/</dir>

不過,通常並不需要這樣做。依預設,使用者專屬目錄 ~/.fonts 已經輸入到 /etc/fonts/fonts.conf 中。因此,安裝額外的字型時,只要將它們複製到 ~/.fonts 即可。

您還可以插入操作字型外觀的規則。例如,輸入

<match target="font">
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

可以關閉所有字型的消除鋸齒效果,

<match target="font">
 <test name="family">
  <string>Luxi Mono</string>
  <string>Luxi Sans</string>
 </test>
 <edit name="antialias" mode="assign">
 <bool>false</bool>
 </edit>
</match>

可以關閉特定字型的消除鋸齒效果。

依預設,大部份的應用程式都是使用字型名稱 sans-serif (或相等的 sans)、serifmonospace。這些都不是真實的字型,而是可以解析為適當字型的別名,視語言設定而定。

使用者很容易在 ~/.fonts.conf 新增規則來將這些別名解析為屬意的字型:

<alias>
 <family>sans-serif</family>
 <prefer>
  <family>FreeSans</family>
 </prefer>
</alias>
<alias>
 <family>serif</family>
 <prefer>
  <family>FreeSerif</family>
 </prefer>
</alias>
<alias>
 <family>monospace</family>
 <prefer>
  <family>FreeMono</family>
 </prefer>
</alias>

因為幾乎所有的應用程式都預設使用這些別名,所以幾乎整個系統會受到影響。這樣,您幾乎可以簡單地隨處使用喜歡的字型而不必針對個別應用程式修改字型設定。

請使用指令 fc-list 來找出已安裝且可用的字型。例如,指令 fc-list 指令可傳回所有字型的清單。若要找出含有希伯來文 (:lang=he) 所有文字符號的可用縮放字型 (:scalable=true)、這些字型的名稱 (family)、樣式 (style)、粗細 (weight) 以及包含這些字型的檔案名稱,請輸入下列指令:

fc-list ":lang=he:scalable=true" family style weight

這個指令的輸出看起來如下:

Lucida Sans:style=Demibold:weight=200
DejaVu Sans:style=Bold Oblique:weight=200
Lucida Sans Typewriter:style=Bold:weight=200
DejaVu Sans:style=Oblique:weight=80
Lucida Sans Typewriter:style=Regular:weight=80
DejaVu Sans:style=Book:weight=80
DejaVu Sans:style=Bold:weight=200
Lucida Sans:style=Regular:weight=80

可以使用 fc-list 來查詢的重要參數:

表格 14.2. fc-list 的參數

參數

意義及可用值

family

字型系列的名稱,例如,FreeSans

foundry (製造商)

字型的製造商,例如,urw

style (樣式)

字型樣式,例如,Medium (中)、Regular (標準)、Bold (粗體)、Italic (斜體) 或是 Heavy (特粗)。

lang

字型支援的語言,例如,de 表示德文、ja 表示日文、zh-TW 表示繁體中文,zh-CN 表示簡體中文。

weight

字型粗細,例如 80 表示一般,200 表示粗體。

slant (斜度)

通常,斜度 0 表示沒有斜度,100 表示斜體。

file

字型檔案的名稱。

outline (外框)

true (真) 表示外框字型,false (偽) 表示其他字型。

scalable (縮放)

true (真) 表示縮放字型,false (偽) 表示其他字型。

bitmap (點陣)

true (真) 表示點陣字型,false (偽) 表示其他字型。

pixelsize (點大小)

以點表示的字型大小。這個選項和 fc-list 一起使用時只對點陣字型有意義。


14.3. 如需更多資訊

請安裝 xorg-x11-dochowtoenh 套件來取得更多有關 X11 的深度資訊。可在專案的首頁 http://www.x.org 上找到關於 X11 開發的更多資訊。

手冊頁中詳細描述了 xorg-x11-driver-video 套件隨附的很多驅動程式。例如,如果使用 nv 驅動程式,可以在 man 4 nv 中找到有關此驅動程式的詳細資訊。

有關協力廠商驅動程式的資訊可在 /usr/share/doc/packages/<套件名稱> 中找到。例如,安裝套件後,x11-video-nvidiaG01 的文件就位於 /usr/share/doc/packages/x11-video-nvidiaG01 中。