
X Window System (X11) 是 UNIX 中既成現實標準的圖形使用者介面。X 採網路結構,可讓應用程式在一個主機上啟動而在透過任何種類的網路 (LAN 或網際網路) 連接的其他主機上顯示。本章提供 X 組態的基本資訊,以及在 SUSE® Linux Enterprise Desktop 中使用字型的背景資訊。
X Window System 一般不需要任何組態設定。X 啟動期間會動態偵測硬體。因此,xorg.conf 的使用已被取代。如果您仍需要指定自訂選項來變更 X 的行為方式,您仍然可以透過修改 /etc/X11/xorg.conf.d/ 下的組態檔案實現變更。
Linux 中的字型可分為兩個部分︰
包含字符形狀的數學說明和繪圖說明。因此,每個字符都可以調整為任意大小而無損品質。在可以使用此類字型 (或字符) 之前,需要將數學說明轉換為點陣 (網格)。此過程稱為字型點陣化。字型影射 (內嵌於字型中) 改進和最佳化特定大小的展示效果。點陣化和影射透過 FreeType 程式庫完成。
Linux 下的常用格式是 PostScript Type 1 和 Type 2、TrueType 及 OpenType。
包含為特定字型大小設計的像素陣列。點陣圖字型的展示速度超快,而且相當簡單。然而,與向量字型相比,它無法在無損品質的情況下調整。因此,這些字型通常以不同的大小分佈。近期,點陣圖字型仍然在 Linux 主控台使用,有時也見於終端機。
Linux 旗下最常用的格式是可攜式編譯格式 (PCF) 或字符點陣圖影射格式 (BDF)。
這些字型的外觀會受兩個主要方面影響︰
選擇合適的字型系列,
採用特定演算法展示字型,讓讀者觀看起來最為舒適。
最後一點僅與向量字型相關。雖然上述兩點非常主觀,但是需要建立一些預設值。
Linux 字型展示系統由若干個程式庫及其各種關係組成。基本字型程式庫是 FreeType,它會將字型字符從受支援的格式轉換為最佳化的點陣圖字符。展示程序由演算法及其參數 (可能受父問題影響) 控制。
使用 FreeType 的每個程式或程式庫都應參考 Fontconfig 程式庫。此程式庫會從使用者及系統收集字型組態。當使用者修改其 Fontconfig 設定時,此變更將導致支援 Fontconfig 的套用。
Arabic、Han 或 Phags-Pa 等程序檔所需之更全面的 OpenType 塑形以及其他更高層級的文字處理需要用到 Harfbuzz 或 Pango。
若要大致瞭解系統上已安裝哪些字型,請執行 rpm 或 fc-list 指令。二者均會出色回答,但有可能因根據系統和使用者組態傳回不同的清單。
rpm
呼叫 rpm 可查看系統上已安裝哪些包含字型的軟體套件︰
rpm -qa '*fonts*'
每個字型套件應符合此表示式。然而,指令可能傳回誤報,例如 fonts-config (可能既不是也不包含字型)。
fc-list
呼叫 fc-list,大致瞭解哪些字型系列可供存取、是否已安裝在系統上或主目錄中︰
fc-list ':' family
fc-list
指令 fc-list 是 Fontconfig 程式庫的包裝程式。它可以從 Fontconfig (更確切地說,從它的快取) 查詢大量有趣的資訊。請參閱 man 1 fc-list 以取得詳細資料。
如果您要瞭解已安裝的字型有何外觀,請使用指令 ftview (套件 ft2demos) 或造訪 http://fontinfo.opensuse.org/。例如,若要以 14 點顯示 FreeMono 字型,請依照下方所述使用 ftview︰
ftview 14 /usr/share/fonts/truetype/FreeMono.ttf
如果您需要進一步的資訊,請造訪 http://fontinfo.opensuse.org/ 以瞭解哪些樣式 (標準、粗體、斜體等) 和語言受支援。
若要查詢給定模式時使用哪中字型,請使用 fc-match 指令。
例如,如果您的模式包含已安裝的字型,fc-match 會傳回檔案名稱、字型系列和樣式︰
tux > fc-match 'Liberation Serif'
LiberationSerif-Regular.ttf: "Liberation Serif" "Regular"如果所需字型在系統上不存在,Fontconfig 會調用相符規則嘗試找到最接近的可用字型。換言之,您的要求被取代為︰
tux > fc-match 'Foo Family'
DejaVuSans.ttf: "DejaVu Sans" "Book"Fontconfig 支援別名,即用另一個系列名稱取代原始名稱。常見的情況是通用名稱,例如 「sans-serif」、「serif」 和 「monospace」。這些別名可取代為實際的系列名稱或者甚至是系列名稱的偏好設定清單︰
tux > for font in serif sans mono; do fc-match "$font" ; done
DejaVuSerif.ttf: "DejaVu Serif" "Book"
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"結果可能因系統而異,具體視目前安裝的字型而定。
Fontconfig 始終根據給定要求傳回最相似的實際系列 (如果至少已安裝一個系列)。「相似度」視 Fontconfig 的內部測量以及使用者或管理員的 Fontconfig 設定而定。
若要安裝新字型,可採用下列幾種主要的方法︰
將 *.ttf 或 *.otf 等字型檔案手動安裝至已知字型目錄。如果要將字型套用至整個系統,請使用標準目錄 /usr/share/fonts。如果要安裝到主目錄中,請使用 ~/.config/fonts。
如果不想使用標準目錄,Fontconfig 可讓您選擇其他目錄。使用 <dir> 元素通知 Fontconfig 所用目錄,相關詳細資料請參閱第 18.1.5.2 節 「Fontconfig XML 深入介紹」。
使用 zypper 安裝字型。許多字型做為套件提供,隨附在 SUSE 套裝作業系統或位於 M17N:fonts 儲存庫中。使用以下指令將儲存庫新增至清單。例如,若要為 SLE 12 新增儲存庫:
sudo zypper ar
http://download.opensuse.org/repositories/M17N:/fonts/SLE_12/M17N:fonts.repo若要搜尋 字型系列名稱,請使用下面此指令︰
sudo zypper se 'FONT_FAMILY_NAME*fonts'
結果不一定會令人滿意,具體視展示媒體和字型大小而定。例如,如今常規監視器解析度為 100dpi,導致像素太大,字型看上去粗陋難看。
有些演算法可用於應對低解析度,例如消除鋸齒 (灰階平滑化)、影射 (適合網格) 或子像素展示 (在一個方向使解析度增至三倍)。這些演算法還可能因字型格式而異。
在 SUSE 套裝作業系統中未使用子像素展示。雖然 FreeType2 支援此演算法,但是所涉及的幾項專利將於 2019 年年末到期。因此,除非系統含有 FreeType2 程式庫並且該程式庫中已編譯子像素展示,否則在 Fontconfig 中設定子像素展示選項沒有任何效果。
透過 Fontconfig,可為每種字型個別選取展示演算法,也可為一組字型選取展示演算法。
sysconfig 設定字型 #
SUSE Linux Enterprise Desktop 在 Fontconfig 上提供了一個 sysconfig 層。您可以從此處入手體驗字型組態。若要變更預設設定,請編輯組態檔案 /etc/sysconfig/fonts-config。(或使用 YaST sysconfig 模組)。編輯該檔案之後,請執行 fonts-config。
sudo /usr/sbin/fonts-config
重新啟動應用程式以查看效果。請記住下列指示:
一些應用程式不需要重新啟動。例如,Firefox 會不時重新讀取 Fontconfig 組態。新建立或重新載入的標籤日後可取得新的字型組態。
系統會在安裝或移除每個套件後自動呼叫 fonts-config 程序檔 (否則表示字型軟體套件有誤)。
可以使用 fonts-config 指令行選項暫時覆寫每個 sysconfig 變數。如需詳細資料,請參閱 fonts-config --help。
有數個 sysconfig 變數可以變更。請參閱 man 1 fonts-config 或 YaST sysconfig 模組的說明頁面。系統提供下列變數︰
考慮 FORCE_HINTSTYLE、
FORCE_AUTOHINT、 FORCE_BW、
FORCE_BW_MONOSPACE、
USE_EMBEDDED_BITMAPS 和
EMBEDDED_BITMAP_LANGAGES
請使用 PREFER_SANS_FAMILIES、
PREFER_SERIF_FAMILIES、
PREFER_MONO_FAMILIES 和
SEARCH_METRIC_COMPATIBLE
下面的清單提供了一些組態範例,從「最適合閱讀」字型 (對比度較高) 到「最漂亮」(較平滑) 排序。
透過 PREFER_*_FAMILIES
變數可對點陣圖字型設定偏好。對於這些變數,請按照說明部份中的範例操作。須知,這些字型以黑白且未平滑形式展示,並且點陣圖字型只有數種大小。考慮使用
SEARCH_METRIC_COMPATIBLE="no"
來停用度量相容性驅動的系統名稱取代。
展示可調整字型時如果未消除鋸齒,可能導致效果類似於點陣圖字型,同時保持字型可調整性。使用示意良好的 Liberation 系列之類。遺憾的是,系統中缺少影射良好的字型。設定下列變數以強制採用此方法。
FORCE_BW="yes"
僅以未消除鋸齒的方式展示等寬字型,否則使用預設設定︰
FORCE_BW_MONOSPACE="yes"
展示所有字型時都消除鋸齒。使用位元組碼解譯器 (BCI) 展示影射良好的字型,使用自動影射器 (hintstyle=hintslight) 展示其他字型。讓所有相關 sysconfig 變數保持預設設定。
以 CFF 格式使用字型。人們認為它們在 FreeType2 中進行最新改進之後,比預設的 TrueType 字型更適合閱讀。請按照 PREFER_*_FAMILIES 範例嘗試一下。可以透過
SEARCH_METRIC_COMPATIBLE="no"
將展示調暗調粗,因為它們依預設透過 hintstyle=hintslight 展示。還可以考慮使用︰
SEARCH_METRIC_COMPATIBLE="no"
即使對於影射良好的字型,也可以使用 FreeType2 的自動影射器。這可能會導致字形變得更粗、對比度更低,有時還會變得更模糊。設定下列變數以啟用此項︰
FORCE_AUTOHINTER="yes"
可使用 FORCE_HINTSTYLE 來控制影射層級。
Fontconfig 的組態設定格式是可延伸標記語言 (XML)。下面的幾個範例不是完整參考,而是簡要概觀。詳細資料及其他靈感可在 man 5 fonts-conf 或 /etc/fonts/conf.d/ 中找到。
中心 Fontconfig 組態檔案是 /etc/fonts/fonts.conf,它及其他作品包括整個 /etc/fonts/conf.d/ 目錄。若要自訂 Fontconfig,可在兩個位置插入變更︰
系統範圍變更:
編輯檔案 /etc/fonts/local.conf (依預設包含一個空的 fontconfig 元素)。
使用者特定變更:
編輯檔案 ~/.config/fontconfig/fonts.conf。將 Fontconfig 組態檔案置於 ~/.config/fontconfig/conf.d/ 目錄中。
使用者特定變更會覆寫任何系統範圍的設定。
檔案 ~/.fonts.conf 標示為已取代,不應繼續使用。請改為使用 ~/.config/fontconfig/fonts.conf。
每個組態檔案都需要有 fontconfig 元素。因此,最小的檔案外觀如下:
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- Insert your changes here --> </fontconfig>
如果預設目錄不足,請插入 dir 元素及相應的目錄︰
<dir>/usr/share/fonts2</dir>
Fontconfig 會以遞迴方式搜尋字型。
字型展示演算法可透過下列 Fontconfig 片段選擇 (請參閱範例 18.1 「指定展示演算法」)︰
<match target="font"> <test name="family"> <string>FAMILY_NAME</string> </test> <edit name="antialias" mode="assign"> <bool>true</bool> </edit> <edit name="hinting" mode="assign"> <bool>true</bool> </edit> <edit name="autohint" mode="assign"> <bool>false</bool> </edit> <edit name="hintstyle" mode="assign"> <const>hintfull</const> </edit> </match>
可以測試的字型的各個內容。例如,<test> 元素可測試字型系列 (如範例中所示)、字型間隔、間距、字型格式以及其他。完全棄用 <test> 時,系統會將所有 <edit> 元素套用至每個字型 (全域變更)。
<alias> <family>Alegreya SC</family> <default> <family>serif</family> </default> </alias>
<alias> <family>serif</family> <prefer> <family>Droid Serif</family> </prefer> </alias>
<alias> <family>serif</family> <accept> <family>STIXGeneral</family> </accept> </alias>
範例 18.2 「別名和系列名稱取代」中的規則可產生已設定優先順序的系列清單 (PFL)。系統會根據元素執行不同的動作︰
將此片段放置在一起,當片段按規則 1 - 規則 2 - 規則 3 的順序出現並且使用者要求 「Alegreya SC」 時,便會建立如表格 18.1 「從 Fontconfig 規則產生 PFL」中所述的 PFL。
在 Fontconfig 的度量中,系列名稱具有最高優先順序,高於樣式、大小等其他模式。Fontconfig 會檢查目前在系統上安裝了哪個系列。如果已安裝 「Alegreya SC」,則 Fontconfig 會傳回此名稱。如果未安裝,則系統會檢查 「Droid Serif」 等。
請小心。在變更 Fontconfig 片段的順序時,Fontconfig 可能傳回不同的結果,如表格 18.2 「變更順序後從 Fontconfig 規則產生 PFL 的結果」中所述。
將 <default> 別名視為此群組的分類或包含 (如果未安裝)。如範例所示,<default> 應該一律優先於該群組的 <prefer> 和 <accept> 別名。
<default> 分類不限於一般別名 serif、sans-serif 和 monospace。如需複雜的範例,請參閱 /usr/share/fontconfig/conf.avail/30-metric-aliases.conf。
範例 18.3 「別名和系列名稱取代」中的下列 Fontconfig 片段會建立 serif 群組。當前一種字型未安裝時,此群組中的每個系列可取代其他系列。
<alias> <family>Alegreya SC</family> <default> <family>serif</family> </default> </alias> <alias> <family>Droid Serif</family> <default> <family>serif</family> </default> </alias> <alias> <family>STIXGeneral</family> <default> <family>serif</family> </default> </alias> <alias> <family>serif</family> <accept> <family>Droid Serif</family> <family>STIXGeneral</family> <family>Alegreya SC</family> </accept> </alias>
優先順序由 <accept> 別名中的順序提供。類似地,可以使用較強的 <prefer> 別名。
範例 18.4 「別名和系列名稱取代」擴展了範例 18.2 「別名和系列名稱取代」。
<alias> <family>serif</family> <accept> <family>Liberation Serif</family> </accept> </alias>
<alias> <family>serif</family> <prefer> <family>DejaVu Serif</family> </prefer> </alias>
範例 18.4 「別名和系列名稱取代」中擴展的組態將導致下列 PFL 演變︰
如果同一個一般名稱存在多個 <accept> 宣告,則最後剖析的宣告「勝出」。若有可能,不要在使用者 (/etc/fonts/conf.d/*-user.conf) 之後使用 <accept>。
如果同一個一般名稱存在多個 <accept> 宣告,則最後剖析的宣告「勝出」。若有可能,在全系統範圍的設定中不要在使用者之前使用 <prefer>。
對於相同的一般名稱,每個 <prefer> 宣告會覆寫 <accept> 宣告。如果管理員希望給使用者使用 <accept> 而不僅僅使用 <prefer> 的自由支配權,則不應該在系統範圍組態中使用 <prefer>。在另一方面,使用者使用 <prefer> 最多,因此有利無害,並且我們在系統範圍組態中看到使用 <prefer> 的情況。
請安裝 -doc 以取得更多更深入詳盡的 X11 相關資訊。man 5 xorg.conf 更詳細地說明了手動設定的格式 (如果需要)。您可在專案的首頁 http://www.x.org 上找到關於 X11 開發的更多資訊。
驅動程式位於 xf86-video-* 套件中,例如 xf86-video-nv。相關手冊頁中詳細描述了這些套件隨附的很多驅動程式。例如,如果使用 nv 驅動程式,可以在 man 4 nv 中找到有關此驅動程式的詳細資訊。
有關協力廠商驅動程式的資訊可在 /usr/share/doc/packages/<套件名稱> 中找到。例如,安裝套件後,x11-video-nvidiaG03 的文件就位於 /usr/share/doc/packages/x11-video-nvidiaG03 中。