跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 系统 / X Window 系统
适用范围 SUSE Linux Enterprise Server 12 SP5

18 X Window 系统

X Window 系统 (X11) 是 Unix 中图形用户界面的实际标准。X 是基于网络的,可以使在一个主机上启动的应用程序显示在通过任何类型的网络(LAN 或 Internet)连接的另一个主机上。本章提供 X 配置的基本信息,以及在 SUSE® Linux Enterprise Server 中使用字体的背景信息。

X Window 系统一般不需要进行任何配置。X 启动期间会动态检测硬件。因此,xorg.conf 已被弃用。如果您仍然需要指定自定义选项来更改 X 的行为方式,还是可以通过修改 /etc/X11/xorg.conf.d/ 下的配置文件来实现。

提示
提示:IBM Z:配置图形用户界面

IBM Z 没有 X.Org 所支持的输入或输出设备。因此,本节中所述的所有配置过程都不适用。有关 IBM Z 的更多信息,请参见第 4 章 “在 IBM Z 上安装

18.1 安装和配置字体

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 成型以及其他更高级别的文本处理使用 HarfbuzzPango 进行。

18.1.1 显示安装的字体

要获得系统上安装了哪些字体的概观,请运行 rpmfc-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

18.1.2 查看字体

如果想了解已安装字体系列的外观,请使用命令 ftviewft2demos 包)或访问 http://fontinfo.opensuse.org/。例如,要以 14 号字显示 FreeMono 字体,请按如下所示使用 ftview

ftview 14 /usr/share/fonts/truetype/FreeMono.ttf

如果需要更多信息,请访问 http://fontinfo.opensuse.org/ 了解支持哪些样式(标准、粗体、斜体等)和语言。

18.1.3 查询字体

要查询指定了某种模式时使用哪种字体,请使用 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-serifserifmonospace。这些别名可由实际的系列名称,甚至是系列名称的首选设置列表替代:

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 的内部度量以及用户或管理员的 Fontconfig 设置而定。

18.1.4 安装字体

安装新字体的方法主要有以下几种:

  1. *.ttf*.otf 等字体文件手动安装到知道的一个字体目录。如果字体要用于整个系统,请使用标准目录 /usr/share/fonts。如果要安装在主目录中,请使用 ~/.config/fonts

    如果不想使用标准目录,Fontconfig 允许您选择其他目录。使用 <dir> 元素告知 Fontconfig 所用目录,有关细节,请参见第 18.1.5.2 节 “深入了解 Fontconfig XML”

  2. 使用 zypper 安装字体。大量字体已通过包提供,随附在 SUSE 分发包中或包含在 M17N:fonts 储存库中。请使用以下命令将储存库添加到您的列表中。例如,要为 SLE 12 添加储存库:

    sudo zypper ar
         http://download.opensuse.org/repositories/M17N:/fonts/SLE_12_SP5/

    要搜索您的 FONT_FAMILY_NAME,请使用以下命令:

    sudo zypper se 'FONT_FAMILY_NAME*fonts'

18.1.5 配置字体的外观

根据渲染媒体和字号的不同,结果可能并不令人满意。例如,现在的显示器分辨率一般为 100dpi,这导致像素太大,字形显得粗陋难看。

有几种算法可用来处理低分辨率,例如消除锯齿(灰度平滑)、微调(适合网格)或子像素渲染(在一个方向将分辨率增至三倍)。这些算法还可能因字体格式而异。

重要
重要:子像素渲染的专利问题

SUSE 发行套件中不使用子像素渲染。虽然 FreeType2 支持此算法,但有几项将于 2019 年底到期的专利涉及到了此算法。因此,除非系统中有 FreeType2 库并且该库中已编译子像素渲染,否则在 Fontconfig 中设置子像素渲染选项没有任何效果。

通过 Fontconfig,可单独为每种字体选择渲染算法,也可为一组字体选择渲染算法。

18.1.5.1 通过 sysconfig 配置字体

SUSE Linux Enterprise Server 在 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_HINTSTYLEFORCE_AUTOHINTFORCE_BWFORCE_BW_MONOSPACEUSE_EMBEDDED_BITMAPSEMBEDDED_BITMAP_LANGAGES

通用别名的首选项列表

使用 PREFER_SANS_FAMILIESPREFER_SERIF_FAMILIESPREFER_MONO_FAMILIESSEARCH_METRIC_COMPATIBLE

下面的列表提供了一些配置示例,按从最清晰字体(对比度较高)到最漂亮(较平滑)的顺序显示。

位图字体

通过 PREFER_*_FAMILIES 变量可指定首选位图字体。请按照帮助部分的示例使用这些变量。请注意,这些字体渲染为黑白色,不进行平滑处理,并且位图字体只有几种字号。考虑使用

SEARCH_METRIC_COMPATIBLE="no"

来禁用基于度量兼容性的系列名称替代。

渲染为黑白色的可缩放字体

渲染时未消除锯齿的可缩放字体与位图字体的显示效果相似,同时又可保持字体可缩放性。请使用经过精细微调的字体,如 Liberation 系列。遗憾的是,系统中经过精细微调的字体并不充足。设置下面的变量可强制采用此方法:

FORCE_BW="yes"
渲染为黑白色的等宽字体

仅采用不消除锯齿的方式渲染等宽字体,否则,请使用默认设置:

FORCE_BW_MONOSPACE="yes"
默认设置

渲染所有字体时都消除锯齿。经过精细微调的字体将通过字节码解释器 (BCI) 渲染,其余字体将使用自动微调器 (hintstyle=hintslight) 渲染。让所有相关的 sysconfig 变量保持默认设置。

CFF 字体

以 CFF 格式使用字体。FreeType2 中有了当前的改进后,该字体应该也会比默认的 TrueType 字体更清晰。请按照 PREFER_*_FAMILIES 的示例尝试一下。可以使用以下选项将字体调得更黑更粗:

SEARCH_METRIC_COMPATIBLE="no"

因为它们默认是通过 hintstyle=hintslight 来渲染的。还可以考虑使用:

SEARCH_METRIC_COMPATIBLE="no"
专用自动微调器

即使对于精细微调的字体,也可以使用 FreeType2 的自动微调器。这可能会导致字形变得更粗,有时还会变得更模糊、对比度更低。设置下面的变量可激活此功能:

FORCE_AUTOHINTER="yes"

使用 FORCE_HINTSTYLE 可控制微调级别。

18.1.5.2 深入了解 Fontconfig XML

Fontconfig 的配置格式是可扩展标记语言 (XML)。下面的几个示例不是完整参考,只是简要概述。细节及其他启示可在 man 5 fonts-conf/etc/fonts/conf.d/ 中找到。

中心 Fontconfig 配置文件是 /etc/fonts/fonts.conf,它及其他作品包括整个 /etc/fonts/conf.d/ 目录。要自定义 Fontconfig,可在两个位置插入您的更改:

Fontconfig 配置文件
  1. 系统范围的更改: 编辑文件 /etc/fonts/local.conf(默认情况下,它包含空的 fontconfig 元素)。

  2. 用户特定的更改: 编辑文件 ~/.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 “指定渲染算法”):

例 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> 元素都会应用于每个字体(全局更改)。

例 18.2︰ 别名和系列名称替代
规则 1
<alias>
 <family>Alegreya SC</family>
 <default>
  <family>serif</family>
 </default>
</alias>
规则 2
<alias>
 <family>serif</family>
 <prefer>
  <family>Droid Serif</family>
 </prefer>
</alias>
规则 3
<alias>
 <family>serif</family>
 <accept>
  <family>STIXGeneral</family>
 </accept>
</alias>

例 18.2 “别名和系列名称替代”中的规则会创建一份排定了优先级的系列列表 (PFL)。根据元素的不同,执行的操作也不同:

规则 1 中的 <default>

此规则会在 PFL 末尾添加一个 serif 系列名称。

规则 2 中的 <prefer>

只要 PFL 中存在 Alegreya SC,此规则就会在 PFL 中的第一个 serif 之前添加Droid Serif

规则 3 中的 <accept>

此规则会在 PFL 中第一个 serif 系列名称之后添加 STIXGeneral 系列名称。

如果将这些片段按规则 1 - 规则 2 - 规则 3 的顺序组合起来,当用户请求 Alegreya SC 时,系统便会如创建如表 18.1 “基于 Fontconfig 规则生成 PFL”中所述的 PFL。

表 18.1︰ 基于 Fontconfig 规则生成 PFL

顺序

当前的 PFL

请求

Alegreya SC

规则 1

Alegreya SC, serif

规则 2

Alegreya SCDroid Serifserif

规则 3

Alegreya SCDroid SerifserifSTIXGeneral

在 Fontconfig 的度量中,系列名称具有最高优先级,高于样式、大小等其他模式。Fontconfig 会检查系统上当前安装了哪个系列。如果安装了 Alegreya SC,Fontconfig 将会返回它。如果未安装,则会查找 Droid Serif,依次类推。

请小心。如果 Fontconfig 片段的顺序发生变化,Fontconfig 可能会返回不同的结果,如表 18.2 “基于更改了顺序的 Fontconfig 规则生成 PFL 的结果”中所述。

表 18.2︰ 基于更改了顺序的 Fontconfig 规则生成 PFL 的结果

顺序

当前的 PFL

记事

请求

Alegreya SC

执行相同的请求。

规则 2

Alegreya SC

PFL 中没有 serif,未替代任何内容

规则 3

Alegreya SC

PFL 中没有 serif,未替代任何内容

规则 1

Alegreya SC, serif

PFL 中存在 Alegreya SC,执行替代

注意
注意:隐含意义

<default> 别名视为此组的分类或内含项(如果未安装)。如该例所示,<default> 应该一律优先于该组的 <prefer><accept> 别名。

<default> 分类不限于通用别名 serif、sans-serif 和 monospace。有关复杂示例,请参见 /usr/share/fontconfig/conf.avail/30-metric-aliases.conf

例 18.3 “别名和系列名称替代”中的以下 Fontconfig 片段会创建一个 serif 组。如果前一种字体未安装,此组中的每个系列可替代其他系列。

例 18.3︰ 别名和系列名称替代
<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 “别名和系列名称替代”

例 18.4︰ 别名和系列名称替代
规则 4
<alias>
 <family>serif</family>
 <accept>
  <family>Liberation Serif</family>
 </accept>
</alias>
规则 5
<alias>
 <family>serif</family>
 <prefer>
  <family>DejaVu Serif</family>
 </prefer>
</alias>

例 18.4 “别名和系列名称替代”中的扩展配置将导致下列 PFL 变化:

表 18.3︰ 基于 Fontconfig 规则生成 PFL 的结果

顺序

当前的 PFL

请求

Alegreya SC

规则 1

Alegreya SC, serif

规则 2

Alegreya SCDroid Serifserif

规则 3

Alegreya SCDroid SerifserifSTIXGeneral

规则 4

Alegreya SCDroid SerifserifLiberation SerifSTIXGeneral

规则 5

Alegreya SCDroid SerifDejaVu SerifserifLiberation SerifSTIXGeneral

注意
注意:含义.
  • 如果同一个通用名称存在多个 <accept> 声明,则最后分析的声明胜出。如有可能,创建系统范围的配置时,不要在用户 (/etc/fonts/conf.d/*-user.conf ) 之后使用 <accept>

  • 如果同一个通用名称存在多个 <prefer> 声明,则最后分析的声明胜出。如有可能,在系统范围的配置中,不要在用户之前使用 <prefer>

  • 同一个通用名称的每个 <prefer> 声明都会覆盖 <accept> 声明。如果管理员不仅希望用户可使用 <prefer>,还想允许其使用 <accept>,就不应该在系统范围的配置中使用 <prefer>。另一方面,因为用户通常都是使用 <prefer>,这种做法应该不会产生任何不利影响。我们还发现存在在统范围的配置中使用 <prefer> 的情况。

18.2 更多信息

您可安装 xorg-docs 包以更深入地了解 X11。man 5 xorg.conf 提供了有关手动配置(如果需要)的格式的详细信息。有关 X11 开发的更多信息,请参见该项目的主页:http://www.x.org

驱动程序位于 xf86-video-* 包中,例如 xf86-video-nv。相关手册页中详细说明了这些包附带的很多驱动程序。例如,如果使用 nv 驱动程序,在 man 4 nv 中可以找到有关此驱动程序的更多信息。

有关第三方驱动程序的信息位于 /usr/share/doc/packages/<package_name> 中。例如,x11-video-nvidiaG03 的文档在安装包之后位于 /usr/share/doc/packages/x11-video-nvidiaG03 中。