跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
适用于 openSUSE Leap 15.6

7 图形用户界面 编辑源文件

摘要

openSUSE Leap 包含 X.org 服务器、Wayland 和 GNOME 桌面。本章介绍了所有用户的图形用户界面的配置。

7.1 X Window 系统 编辑源文件

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

在大多数情况下,X Window 系统不需要配置。硬件在 X 启动时动态检测。因此,使用 xorg.conf 已被弃用。如果您仍然需要指定自定义选项来更改 X 的行为方式,仍然可以通过修改 /etc/X11/xorg.conf.d/ 下的配置文件来执行此操作。

openSUSE Leap 15.6 中,Wayland 作为 X.org 服务器的替代方案被包含在内。它可以在安装过程中选择。

安装软件包 xorg-docs 以获取有关 X11 的更深入的信息。man 5 xorg.conf 告诉您更多关于手动配置格式的信息(如果需要)。有关 X11 开发的更多信息,可以在项目的首页 https://www.x.org 上找到。

驱动程序位于 xf86-video-* 软件包中,例如 xf86-video-ati。这些软件包提供的许多驱动程序在其相关的手册页中都有详细描述。例如,如果您使用 ati 驱动程序,请在 man 4 ati 中找到有关此驱动程序的更多信息。

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

在服务器上安装软件包 xrdp,并使用 RDP 客户端软件通过远程桌面协议访问服务器。

7.2 安装和配置字体 编辑源文件

Linux 中的字体可以分为两类

轮廓或矢量字体

包含一个数学描述,作为关于字形形状的绘图指令。因此,每个字形都可以缩放到任意大小而不会损失质量。在可以使用这种字体(或字形)之前,需要将数学描述转换为栅格(网格)。这个过程称为 字体栅格化字体提示(嵌入在字体中)可以改进并优化渲染结果以适应特定大小。栅格化和提示由 FreeType 库完成。

Linux 下常见的格式包括 PostScript Type 1 和 Type 2、TrueType 和 OpenType。

位图或栅格字体

由专为特定字体大小设计的像素数组组成。位图字体渲染速度非常快且简单。但是,与矢量字体相比,位图字体在缩放时会损失质量。因此,这些字体通常以不同的尺寸分发。如今,位图字体仍然用于 Linux 控制台和有时用于终端。

在 Linux 下,Portable Compiled Format (PCF) 或 Glyph Bitmap Distribution Format (BDF) 是最常见的格式。

这些字体的外观受两个主要方面的影响

  • 选择合适的字体系列,

  • 使用算法渲染字体,从而为接收者提供舒适的结果。

后一点仅与矢量字体相关。虽然以上两点都非常主观,但需要创建一些默认设置。

Linux 字体渲染系统由几个具有不同关系的库组成。基本的字体渲染库是 FreeType,它将受支持格式的字体字形转换为优化的位图字形。渲染过程由算法及其参数控制(这些参数可能受专利问题影响)。

使用 FreeType 的每个程序或库都应咨询 Fontconfig 库。该库从用户和系统收集字体配置。当用户修改其 Fontconfig 设置时,此更改将影响 Fontconfig 感知应用程序。

更复杂的 OpenType 塑形对于阿拉伯语、汉字或 Phags-Pa 以及其他更高层次的文本处理是使用 HarfbuzzPango 完成的。

7.2.1 显示已安装的字体 编辑源文件

要概述系统上安装了哪些字体,请使用命令 rpmfc-list。两者都会给您一个很好的答案,但根据系统和用户配置,可能会返回不同的列表

rpm

调用 rpm 以查看包含字体的哪些软件包安装在您的系统上

> rpm -qa '*fonts*'

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

fc-list

调用 fc-list 以概述可以访问的字体系列,无论它们是安装在系统上还是在您的主目录中

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

命令 fc-list 是 Fontconfig 库的包装器。可以从 Fontconfig 获取很多有趣的信息——或者更确切地说,是从其缓存中获取。有关更多详细信息,请参阅 man 1 fc-list

7.2.2 查看字体 编辑源文件

如果您想知道已安装的字体系列是什么样子,请使用命令 ftview(软件包 ft2demos)或访问 https://fontinfo.opensuse.org/。例如,要以 14 点显示 FreeMono 字体,请使用 ftview 如下

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

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

7.2.3 查询字体 编辑源文件

要查询在给定模式下使用的字体,请使用 fc-match 命令。

例如,如果您的模式包含已安装的字体,fc-match 将返回文件名、字体系列和样式

> fc-match 'Liberation Serif'
LiberationSerif-Regular.ttf: "Liberation Serif" "Regular"

如果系统中不存在所需的字体,Fontconfig 的匹配规则将生效并尝试找到最相似的可用字体。这意味着您的请求将被替换

> fc-match 'Foo Family'
DejaVuSans.ttf: "DejaVu Sans" "Book"

Fontconfig 支持 别名:一个名称被另一个字体系列名称替换。典型的示例是通用名称,例如 sans-serifserifmonospace。这些别名可以被实际的字体系列名称或字体系列名称的偏好列表替换

> 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"

结果可能因您的系统而异,具体取决于当前安装了哪些字体。

Note
注意:Fontconfig 的相似性规则

Fontconfig 始终 根据给定的请求返回一个真实的字体系列(如果至少安装了一个)。“相似性”取决于 Fontconfig 的内部指标以及用户或管理员的 Fontconfig 设置。

7.2.4 安装字体 编辑源文件

要安装新字体,有这些主要方法

  1. 手动将字体文件(例如 *.ttf*.otf)安装到已知字体目录。如果需要系统范围,请使用标准目录 /usr/share/fonts。对于安装在您的主目录中,请使用 ~/.config/fonts

    如果您想偏离标准目录,Fontconfig 允许您选择另一个目录。通过使用 <dir> 元素让 Fontconfig 知道,有关详细信息,请参阅 第 7.2.5.2 节,“深入了解 fontconfig XML”

  2. 使用 zypper 安装字体。许多字体已经作为软件包可用,无论是在您的 SUSE 发行版中还是在 M17N:fonts 存储库中。使用以下命令将存储库添加到您的列表中。例如,要为 openSUSE Leap 15.6 添加存储库

    > sudo zypper ar
         https://download.opensuse.org/repositories/M17N:/fonts/openSUSE_Leap_15.6/

    要搜索您的 FONT_FAMILY_NAME,请使用此命令

    > zypper se 'FONT_FAMILY_NAME*fonts'

7.2.5 配置字体的外观 编辑源文件

根据渲染介质和字体大小,结果可能不令人满意。例如,如今的平均显示器分辨率为 100dpi,这使得像素过大,字形看起来笨拙。

有几种算法可用于处理低分辨率,例如抗锯齿(灰度平滑)、提示(拟合到网格)或子像素渲染(在一个方向上将分辨率提高三倍)。这些算法也可能因字体格式而异。

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

7.2.5.1 通过 sysconfig 配置字体 编辑源文件

openSUSE Leap 带有 sysconfig 层,位于 Fontconfig 之上。这是试验字体配置的一个很好的起点。要更改默认设置,请编辑配置文件 /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_LANGUAGES

通用别名的偏好列表

使用 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 字体更易读。尝试使用以下方法

SEARCH_METRIC_COMPATIBLE="no"

因为它们默认情况下由 hintstyle=hintslight 渲染。还请考虑使用

SEARCH_METRIC_COMPATIBLE="no"
仅自动提示器

即使对于提示良好的字体,也使用 FreeType2 的自动提示器。这可能会导致更粗糙、有时模糊的字母形状,对比度较低。设置以下变量以激活此选项

FORCE_AUTOHINTER="yes"

使用 FORCE_HINTSTYLE 控制提示级别。

7.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/ 目录中。

用户特定的更改会覆盖任何系统范围的设置。

Note
注意:已弃用的用户配置文件

文件 ~/.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 片段选择字体渲染算法(参见 示例 7.1,“指定渲染算法”

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

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

来自 示例 7.2,“别名和字体名称替换” 的规则创建一个 优先字体列表 (PFL)。根据元素的不同,执行不同的操作

<default> 来自 规则 1

此规则在 PFL 的 末尾 添加一个 serif 字体名称。

<prefer> 来自 规则 2

每当 PFL 中存在 Alegreya SC 时,此规则在 PFL 中 serif 的第一个出现位置 之前 添加 Droid Serif

<accept> 来自 规则 3

此规则在 PFL 中 serif 字体名称的第一个出现位置 之后 添加一个 STIXGeneral 字体名称。

将这些组合在一起,当片段按 规则 1 - 规则 2 - 规则 3 的顺序出现,并且用户请求 Alegreya SC 时,则 PFL 的创建方式如 表 7.1,“从 fontconfig 规则生成 PFL” 所示。

表 7.1: 从 fontconfig 规则生成 PFL

顺序

当前 PFL

请求

Alegreya SC

规则 1

Alegreya SC, serif

规则 2

Alegreya SC, Droid Serif, serif

规则 3

Alegreya SC, Droid Serif, serif, STIXGeneral

在 Fontconfig 的指标中,字体名称比其他模式(如样式、大小等)具有更高的优先级。Fontconfig 检查当前安装在系统上的字体系列。如果安装了 Alegreya SC,则 Fontconfig 返回它。如果没有,它会请求 Droid Serif,等等。

小心。如果更改 Fontconfig 片段的顺序,Fontconfig 可能会返回不同的结果,如 表 7.2,“从更改顺序的 fontconfig 规则生成 PFL 的结果” 所示。

表 7.2: 从更改顺序的 fontconfig 规则生成 PFL 的结果

顺序

当前 PFL

注意

请求

Alegreya SC

执行相同的请求。

规则 2

Alegreya SC

serif 不在 PFL 中,未进行替换

规则 3

Alegreya SC

serif 不在 PFL 中,未进行替换

规则 1

Alegreya SC, serif

Alegreya SC 存在于 PFL 中,执行了替换

Note
注意:含义

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

<default> 分类不仅限于通用别名 serif、sans-serif 和 monospace。请参阅 /usr/share/fontconfig/conf.avail/30-metric-aliases.conf 以获取复杂示例。

来自 示例 7.3,“别名和字体名称替换” 的以下 Fontconfig 片段创建一个 serif 组。该组中的每个字体都可以在未安装前一个字体时替换其他字体。

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

示例 7.2,“别名和字体名称替换”示例 7.4,“别名和字体名称替换” 扩展。

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

来自 示例 7.4,“别名和字体名称替换” 的扩展配置将导致以下 PFL 演变

表 7.3: 从 fontconfig 规则生成 PFL 的结果

顺序

当前 PFL

请求

Alegreya SC

规则 1

Alegreya SC, serif

规则 2

Alegreya SC, Droid Serif, serif

规则 3

Alegreya SC, Droid Serif, serif, STIXGeneral

规则 4

Alegreya SC, Droid Serif, serif, Liberation Serif, STIXGeneral

规则 5

Alegreya SC, Droid Serif, DejaVu Serif, serif, Liberation Serif, STIXGeneral

Note
注意:含义。
  • 如果存在针对相同通用名称的多个 <accept> 声明,则最后解析的声明 获胜。如果可能,请勿在创建系统范围配置时在用户 (/etc/fonts/conf.d/*-user.conf) 之后 使用 <accept>

  • 如果存在针对相同通用名称的多个 <prefer> 声明,则最后解析的声明 获胜。如果可能,请勿在系统范围配置中在用户 之前 使用 <prefer>

  • 每个 <prefer> 声明都会覆盖相同通用名称的 <accept> 声明。如果管理员希望允许用户使用 <accept> 而不仅仅是 <prefer>,则管理员不应在系统范围配置中使用 <prefer>。另一方面,由于用户大多使用 <prefer>,这不应产生任何不利影响。我们还看到系统范围配置中使用 <prefer>

7.3 GNOME 配置(管理员) 编辑源文件

7.3.1 dconf 系统 编辑源文件

GNOME 桌面配置由 dconf 管理。它是一个分层结构的数据库或注册表,允许用户修改他们的个人设置,并允许系统管理员为所有用户设置默认或强制值。dconf 替换了 GNOME 2 的 gconf 系统。

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

GNOME Tweaks 工具为额外的配置选项提供了一个易于使用的用户界面。该工具可以从 GNOME 应用程序菜单或通过命令行使用 gnome-tweak-tool 启动。

7.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 数据库格式

    > sudo dconf update
  3. 通过创建文件 /etc/dconf/profile/user 将新的 network 配置数据库添加到默认用户配置文件。然后添加以下内容

    system-db:network

    文件 /etc/dconf/profile/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

7.3.3 更多信息 编辑源文件

有关更多信息,请参阅 https://help.gnome.org/admin/

7.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(参见 第 7.4.1 节,“先决条件”)。

7.4.1 先决条件 编辑源文件

您必须配置并安装一个可正常工作的 NVIDIA Optimus GPU,并使用 openSUSE 社区仓库中的 NVIDIA 专有驱动程序(请参阅 第 7.4.3 节,“安装 NVIDIA 驱动程序”),以及一个板载 Intel GPU。 Bumblebee,较旧的 NVIDIA Optimus 切换工具,必须未安装。

不得存在 /etc/X11/xorg.conf 文件,并且 /etc/X11/xorg.conf.d 目录中不应存在包含活动 ServerLayoutDeviceScreen 部分的任何配置文件。

SUSE Prime 仅适用于 X11。 使用 loginctl 命令查看您的系统是否正在使用 X11 或 Wayland。

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

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

7.4.2 安装和使用 SUSE Prime 编辑源文件

您的 NVIDIA 显卡应该已经安装并正常工作。 如果没有,请参阅 第 7.4.3 节,“安装 NVIDIA 驱动程序”

安装 suse-prime

> sudo zypper install suse-prime

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

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

当它作为模式设置驱动程序时,使用 intel 驱动程序。 intel2 适用于使用 xf86-video-intel 驱动程序的系统。 您可以通过安装和运行 inxi 来获取此信息

> 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?

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

7.4.3 安装 NVIDIA 驱动程序 编辑源文件

如果您需要识别您的 NVIDIA 显卡,以便知道使用哪个驱动程序,请运行以下命令

> /sbin/lspci | grep VGA

按照以下步骤使用 Zypper 安装驱动程序。 首先为您的发行版安装社区仓库。 对于 openSUSE Tumbleweed

> sudo zypper addrepo --refresh https://download.nvidia.com/opensuse/tumbleweed nvidia

对于 openSUSE 15.6

> sudo zypper addrepo --refresh https://download.nvidia.com/opensuse/leap/15.6 nvidia

列出可用的驱动程序包

> sudo zypper se nvidia

然后安装您的 NVIDIA 显卡的驱动程序

> sudo zypper se packagename
打印此页面