跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 系统 / 图形用户界面。
适用范围 SUSE Linux Enterprise Server 15 SP3

21 图形用户界面。

SUSE Linux Enterprise Server 包含 X.org 服务器和 GNOME 桌面。本章介绍用于所有用户的图形用户界面配置。

21.1 X Window 系统

X.org 服务器是实施 X11 协议的事实上的标准。X 是基于网络的,可以使在一个主机上启动的应用程序显示在通过任何类型的网络(LAN 或互联网)连接的另一个主机上。

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

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

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

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

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

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

21.2 安装和配置字体

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 进行。

21.2.1 显示安装的字体

要获得系统上安装了哪些字体的概观,请运行 rpmfc-list 命令。这两个命令都可为您提供不错的答案,但有可能会因系统和用户配置不同而返回不同的列表。

rpm

调用 rpm 可查看系统上安装了哪些包含字体的软件包:

tux > rpm -qa '*fonts*'

每个字体包都应该满足此表达式。不过,命令可能会返回误报,例如 fonts-config(它即不是字体,也不包含字体)。

fc-list

调用 fc-list 可获得哪些字体系列可以访问、系统上或主目录中是否已安装这些字体的概观:

tux > fc-list ':' family
注意
注意:命令 fc-list

命令 fc-list 是 Fontconfig 库的封装程序。从 Fontconfig(更确切地说,从它的缓存)可以查询许多有趣的信息。有关更多细节,请参见 man 1 fc-list

21.2.2 查看字体

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

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

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

21.2.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 设置而定。

21.2.4 安装字体

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

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

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

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

    tux > sudo zypper ar
         https://download.opensuse.org/repositories/M17N:/fonts/SLE_15/

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

    tux > zypper se 'FONT_FAMILY_NAME*fonts'

21.2.5 配置字体的外观

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

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

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

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

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

21.2.5.1 通过 sysconfig 配置字体

SUSE Linux Enterprise Server 在 Fontconfig 上提供一个 sysconfig 层。要尝试进行字体配置,这是一个不错的着手点。要更改默认设置,请编辑配置文件 /etc/sysconfig/fonts-config。(或使用 YaST sysconfig 模块)。编辑该文件之后,请运行 fonts-config

tux > 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 可控制微调级别。

21.2.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 代码段可以选择字体渲染算法(请参见例 21.1 “指定渲染算法”):

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

例 21.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>

例 21.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 时,系统便会如创建如表 21.1 “基于 fontconfig 规则生成 PFL”中所述的 PFL。

表 21.1︰ 基于 fontconfig 规则生成 PFL

顺序

当前的 PFL

请求

Alegreya SC

规则 1

Alegreya SCserif

规则 2

Alegreya SCDroid Serifserif

规则 3

Alegreya SCDroid SerifserifSTIXGeneral

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

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

表 21.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

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

例 21.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> 别名。

例 21.4 “别名和系列名称替换项”扩展了例 21.2 “别名和系列名称替换项”

例 21.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>

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

表 21.3︰ 基于 fontconfig 规则生成 PFL 的结果

顺序

当前的 PFL

请求

Alegreya SC

规则 1

Alegreya SCserif

规则 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> 声明。如果管理员不仅希望用户可使用 <accept>,而且还想允许其使用 <prefer>,就不应该在系统范围的配置中使用 <prefer>。另一方面,因为用户通常都是使用 <prefer>,这种做法应该不会产生任何不利影响。我们还发现存在在统范围的配置中使用 <prefer> 的情况。

21.3 适用于管理员的 GNOME 配置

21.3.1 dconf 系统

GNOME 桌面的配置是使用 dconf 管理的。dconf 是按层次结构化的数据库或注册表,可让用户修改其个人设置,并可让系统管理员为所有用户设置默认值或强制值。dconf 取代了 GNOME 2 的 gconf 系统。

使用 dconf-editor 可通过图形用户界面查看 dconf 选项。使用 dconf 可通过命令行访问和修改配置选项。

GNOME Tweaks 工具提供易于使用的用户界面,其中包含不属于标准 GNOME 配置的其他配置选项。从 GNOME 应用程序菜单或在命令行中使用 gnome-tweak-tool 可启动该工具。

21.3.2 系统范围的配置

全局 dconf 配置参数在 /etc/dconf/db/ 目录中设置,其中包括 GDM 的配置或针对用户锁定特定的配置选项。

我们以下面的过程举例说明如何创建系统范围的配置:

  1. /etc/dconf/db/ 中创建以 .d 结尾的新目录。此目录可包含任意数量的配置选项文本文件。在此例中,创建含有以下内容的文件 /etc/dconf/db/network.d/00-proxy

    # This is a comment
    [system/proxy/http]
    host='10.0.0.1'
    enabled=true
  2. 将新的配置指令分析为 dconf 数据库格式:

    tux > sudo dconf update
  3. 创建 /etc/dconf/profiles/user 文件,以将新 network 配置数据库添加至默认用户配置文件。然后添加以下内容:

    system-db:network

    /etc/dconf/profiles/user 文件是将要使用的 GNOME 默认设置。其他配置文件可在环境变量 DCONF_PROFILE 中定义。

  4. 可选:要锁定用户的代理配置,请创建文件 /etc/dconf/db/network/locks/proxy。然后将含有不能更改的关键字的一行添加至此文件:

    /system/proxy/http/host
    /system/proxy/http/enabled

您可以使用图形 dconf-editor 创建包含一个用户的配置文件,然后使用 dconf dump / 列出所有配置选项。之后便可将配置选项储存在全局配置文件中。

https://wiki.gnome.org/Projects/dconf/SystemAdministrators 中提供了全局配置的详细说明。

21.3.3 更多信息

有关详细信息,请参见http://help.gnome.org/admin/

21.4 使用 SUSE Prime 在 Intel 和 NVIDIA Optimus GPU 之间切换

SUSE Prime 是一款用于在板载 Intel 图形处理单元 (GPU) 和配备 NVIDIA“可切换图形”Optimus 技术的 NVIDIA GPU 之间切换的工具。Optimus 提供了一种在板载 Intel GPU 和离散 NVIDIA GPU 之间轻松切换的机制。专为在省电模式下或以最佳性能运行笔记本电脑而设计:使用 Intel GPU 可省电,使用 NVIDIA GPU 可支持 3D 应用程序。

SUSE Prime 只能在运行 X11(而不是 Wayland)的系统上工作。如果您的系统运行 Wayland,您必须将其禁用,并回退到 X11(如果您希望使用 SUSE Prime)(请参见第 21.4.1 节 “先决条件”)。

21.4.1 先决条件

/etc/X11/xorg.conf.d 目录中不能有 /etc/X11/xorg.conf 文件,也不能有活动“ServerLayout”、“Device”或“Screen”部分的配置文件。

SUSE Prime 仅适用于 X11。请使用 loginctl 命令查看您的系统是使用 X11 还是 Wayland:

tux > loginctl
   SESSION        UID USER             SEAT             TTY             
         2       1000 tux             seat0               
tux > loginctl show-session 2|grep Type
Type=x11

如果您的系统使用 Wayland,请通过编辑 /etc/gdm/custom.conf 并取消注释 WaylandEnable=false 将其禁用。然后重引导。

21.4.2 安装和使用 SUSE Prime

您的 NVIDIA 图形卡应已安装且正常工作。如果没有,请参见第 21.4.3 节 “安装 NVIDIA 驱动程序”

安装 suse-prime 软件包)更改内存策略模式:

tux > sudo zypper install suse-prime

要切换 GPU,请运行以下命令之一,然后注销并重新登录:

tux > sudo prime-select intel
tux > sudo prime-select intel2
tux > sudo prime-select nvidia

如果是 modesetting 驱动程序,请使用 intel 驱动程序。intel2 适用于使用 xf86-video-intel 驱动程序的系统。您可以通过安装和运行 inxi来获取此信息:

tux > inxi -G
Graphics: Device-1: Intel Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller
          Display Server: x11(X.org 1.20.1 ) drivers: modesetting (unloaded: fbdev, vesa)
          Resolution: 1920x1080@60.00hz
          OpenGL: renderer: Mesa DRI Intel Haswell Desktop version: 4.5 Mesa 18.2.8

哪个 GPU 当前处于活动状态?

tux > sudo /usr/sbin/prime-select get-current
Driver configured: intel

21.4.3 安装 NVIDIA 驱动程序

如果您需要识别 NVIDIA 卡以便了解要使用哪个驱动程序,请运行以下命令:

tux > /sbin/lspci | grep VGA

按照以下步骤使用 Zypper 安装驱动程序。

列出可用的驱动程序软件包:

tux > sudo zypper se nvidia

然后为您的 NVIDIA 图形卡安装驱动程序:

tux > sudo zypper se packagename