字体配置

来自 ArchWiki

Fontconfig 是一个库,旨在向应用程序提供可用字体的列表,以及字体渲染方式的配置。

FreeType 库根据此配置渲染字体。freetype2 字体渲染软件包包含启用的字节码解释器 (BCI),以获得更好的字体渲染效果,尤其是在 LCD 显示器上。请参阅 #Fontconfig 配置字体配置/示例

尽管 Fontconfig 在现代 Unix 和类 Unix 操作系统中经常使用,但有些应用程序依赖于原始的字体选择和显示方法,即 X 逻辑字体描述 (XLFD)。

字体路径

为了使应用程序识别字体,必须对字体进行编目以便轻松快速地访问。

Fontconfig 默认已知的字体路径为:/usr/share/fonts/~/.local/share/fonts(和 ~/.fonts/,现已弃用)。Fontconfig 将递归扫描这些目录。为了便于组织和安装,建议在添加字体时使用这些字体路径。

查看 Fontconfig 已知字体列表

$ fc-list ':' file

有关更多输出格式,请参阅 fc-list(1)

通过查看日志检查 Xorg 已知的字体路径

$ grep /fonts ~/.local/share/xorg/Xorg.0.log
提示
  • 您还可以使用命令 xset q 检查 Xorg 已知的字体路径列表。
  • 如果 Xorg 以 root 权限运行,请使用 /var/log/Xorg.0.log

请记住,Xorg 不像 Fontconfig 那样递归搜索 /usr/share/fonts/ 目录。要添加路径,必须使用完整路径

Section "Files"
    FontPath     "/usr/share/fonts/local/"
EndSection

有关 Xorg 配置的更多详细信息,请阅读 Xorg#配置。如果希望按用户设置字体路径,可以通过将以下行添加到 ~/.xinitrc,从默认值中添加和删除字体路径

xset +fp /usr/share/fonts/local/           # Prepend a custom font path to Xorg list of known font paths
xset -fp /usr/share/fonts/sucky_fonts/     # Remove the specified font path from Xorg list of known font paths

要查看 Xorg 已知的字体列表,请使用 xlsfonts,来自 xorg-xlsfonts 软件包。

Fontconfig 配置

Fontconfig 配置记录在 fonts-conf(5) 手册页中。

配置可以通过用户级别通过 $XDG_CONFIG_HOME/fontconfig/fonts.conf(通常为 $HOME/.config/fontconfig/fonts.conf)完成,也可以通过全局级别通过 /etc/fonts/local.conf 完成。用户配置中的设置优先于全局配置。这两个文件都使用相同的语法。

注意
  • 需要启用 50-user.conf 预设才能使用户配置生效,而 51-local.conf 预设用于全局配置。查看 #预设 部分,了解如何启用这些预设。
  • 配置文件和目录:~/.fonts.conf/~/.fonts.conf.d/~/.fontconfig/*.cache-* 已弃用,并且在软件包的未来版本中默认情况下将不会读取。新路径分别是 $XDG_CONFIG_HOME/fontconfig/fonts.conf$XDG_CONFIG_HOME/fontconfig/conf.d/NN-name.conf$XDG_CACHE_HOME/fontconfig/*.cache-*。如果使用第二个位置,请确保命名有效(其中 NN 是两位数字,例如 001099)。

Fontconfig 将其所有配置收集在一个中央文件 (/etc/fonts/fonts.conf) 中。此文件在 Fontconfig 更新期间会被替换,不应编辑。Fontconfig 感知的应用程序会读取此文件以了解可用的字体及其渲染方式;只需重启此类应用程序即可加载新配置。此文件是来自全局配置 (/etc/fonts/local.conf)、/etc/fonts/conf.d/ 中配置的预设以及用户配置文件 ($XDG_CONFIG_HOME/fontconfig/fonts.conf) 的规则的集合。fc-cache 可用于重建 Fontconfig 配置,但更改仅在新启动的应用程序中可见。

注意: 对于某些桌面环境(例如 GNOMEKDE Plasma),使用字体控制面板将自动创建或覆盖用户字体配置文件。对于这些桌面环境,最好匹配您已定义的字体配置以获得预期的行为。还要确保配置的字体支持桌面区域设置区域设置,否则字体配置可能会被覆盖。

Fontconfig 配置文件使用 XML 格式,并且需要以下标头

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

  <!-- settings go here -->

</fontconfig>

本文中的配置示例省略了这些标签。

预设

在目录 /usr/share/fontconfig/conf.avail 中安装了预设。可以通过创建指向它们的符号链接来启用它们,用户级别和全局级别均可,如 /etc/fonts/conf.d/README 中所述。这些预设将覆盖其各自配置文件中的匹配设置。

例如,要全局启用子像素 RGB 渲染

$ cd /etc/fonts/conf.d
# ln -s /usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf

要执行相同的操作,但改为用户级别的配置

$ mkdir $XDG_CONFIG_HOME/fontconfig/conf.d
$ ln -s /usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf $XDG_CONFIG_HOME/fontconfig/conf.d

抗锯齿

字体栅格化将矢量字体数据转换为位图数据,以便可以显示。由于锯齿,结果可能显得参差不齐。抗锯齿可以用来增加字体边缘的视觉分辨率。默认情况下,抗锯齿是启用的。要禁用它

  <match target="font">
    <edit name="antialias" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
注意: 某些应用程序可能会覆盖默认的抗锯齿设置

微调

字体微调(也称为指导)是使用数学指令来调整轮廓字体的显示,使其与栅格化网格(即显示器的像素网格)对齐。其预期效果是使字体看起来更清晰,从而更易于阅读。当显示器具有大约 300 DPI 时,字体将在没有微调的情况下正确对齐。

字节码解释器 (BCI)

使用 BCI 微调,TrueType 字体中的指令根据 FreeType 的解释器进行渲染。BCI 微调适用于具有良好微调指令的字体。默认情况下,微调是启用的。要禁用它

  <match target="font">
    <edit name="hinting" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
注意: BCI 实现可以在脚本 /etc/profile.d/freetype2.sh 中切换。解释器通过将参数 truetype:interpreter-version=NNNN 对应于所选版本)传递给脚本中的 FREETYPE_PROPERTIES 变量来设置。最常用的值是
  • 35 用于经典模式(模拟 Windows 98),
  • 40 用于 最小模式(精简的 Infinality,这是默认值)。
子像素渲染应使用子像素 BCI。有关详细信息,请参阅 [1]

自动微调器

自动微调器尝试进行自动微调,忽略字体中嵌入的任何微调信息。最初,它是默认设置,因为 TrueType2 字体受专利保护,但现在这些专利已过期,几乎没有理由使用它。它确实更适用于具有损坏或没有微调信息的字体,但对于具有良好微调信息的字体来说,它将非常次优。通常,常用字体属于后一种类型,因此自动微调器将无用。默认情况下,自动微调器是禁用的。要启用它

  <match target="font">
    <edit name="autohint" mode="assign">
      <bool>true</bool>
    </edit>
  </match>

微调样式

微调样式是为了与网格对齐而完成的字体重塑量。微调值有:hintnonehintslighthintmediumhintfullhintslight 将使字体更模糊以与网格对齐,但在保留字体形状方面会更好(请参阅 [2]),而 hintfull 将是清晰的字体,可以很好地与像素网格对齐,但会丢失更多的字体形状。hintslight 隐式地在仅垂直模式下使用自动微调器,以支持非 CFF (.otf) 字体的字体原生信息。

hintslight 是默认设置。要更改它

  <match target="font">
    <edit name="hintstyle" mode="assign">
      <const>hintnone</const>
    </edit>
  </match>
注意: 某些应用程序可能会覆盖默认的微调设置

子像素布局

Fontconfig 将需要知道您的子像素布局,以便能够正确显示您的字体。使用 子像素布局 显示器测试(Lagom LCD 显示器测试页面的一部分)来找出您的子像素排列。

子像素几何形状通过 rgba 属性配置,可以是

  • rgb绿 — 最常见,当今大多数显示器都使用它
  • bgr
  • vrgb — 垂直
  • vbgr
  <match target="font">
    <edit name="rgba" mode="assign">
      <const>rgb</const>
    </edit>
  </match>
注意: 如果没有#子像素渲染,freetype 将只关心子像素的对齐方式(垂直或水平)。例如,RGBBGR 之间没有区别。

不支持不寻常的子像素布局,例如“Pentile”和“RGBY”,偶尔会在电视和移动屏幕上发现。对于这些设备,最好放弃子像素渲染并依赖灰度。

子像素渲染

子像素渲染是一种通过有效利用子像素使水平(或垂直)分辨率提高三倍来提高字体渲染清晰度的技术。在 Windows 机器上,此技术称为 ClearType

FreeType2 提供了两种不同类型的子像素渲染,称为 Harmony 和 ClearType (FT_CONFIG_OPTION_SUBPIXEL_RENDERING) [3]。从 FreeType 2.10.3 开始,Arch Linux 默认启用 ClearType 子像素渲染 [4]

启用 ClearType 子像素渲染时,建议使用 LCD 滤镜。Harmony 子像素渲染不需要设置 LCD 滤镜,并且使用默认 LCD 几何形状,它等效于带有 lcdlight 滤镜的 ClearType [5]。请参阅以下关于如何启用 LCD 滤镜及其优点的部分。

LCD 滤镜

使用 ClearType 子像素渲染时,应启用 LCD 滤镜,该滤镜旨在减少彩色条纹。这在 FreeType 2 API 参考的 LCD 滤镜下进行了描述。FT_LcdFilter 下描述了不同的选项,并且此 LCD 滤镜测试页面对其进行了说明。

lcddefault 滤镜适用于大多数用户。还有其他滤镜可用于特殊情况:lcdlight;一种更轻的滤镜,非常适合看起来太粗体或模糊的字体,lcdlegacy,原始的 Cairo 滤镜;以及 lcdnone 完全禁用它。

  <match target="font">
    <edit name="lcdfilter" mode="assign">
      <const>lcddefault</const>
    </edit>
  </match>

高级 LCD 滤镜规范

如果可用的内置 LCD 滤镜不令人满意,则可以通过构建自定义 freetype2 软件包并修改硬编码的滤镜来非常具体地调整字体渲染。Arch 构建系统可用于从源代码构建和安装软件包。

检出 freetype2 PKGBUILD 并下载/提取构建文件。Arch 构建系统#检索 PKGBUILD 源代码 列出了一些方法。

通过编辑文件 src/freetype-VERSION/include/freetype/config/ftoption.h 并取消注释 FT_CONFIG_OPTION_SUBPIXEL_RENDERING 宏来启用 ClearType 子像素渲染。

然后,编辑文件 src/freetype-VERSION/src/base/ftlcdfil.c 并查找常量 default_filter[5] 的定义

static const FT_Byte  default_filter[5] =
    { 0x10, 0x40, 0x70, 0x40, 0x10 };

此常量定义应用于渲染字形的低通滤波器。根据需要修改它。(参考:freetype 列表讨论)保存文件,构建并安装自定义软件包

$ makepkg --noextract
# pacman --remove --nodeps freetype2
# pacman --upgrade freetype2-VERSION-ARCH.pkg.tar.zstd

重启 X。lcddefault 滤镜现在应该以不同的方式渲染字体。

特定字体或字体样式的自定义设置

某些字体可能在 BCI 微调下看起来不太好。可以仅为这些字体禁用它

...
<match target="font">
    <test name="family" qual="any">
        <string>My Font</string>
    </test>
    <edit name="hinting" mode="assign">
        <bool>false</bool>
    </edit>
</match>
...

设置默认或后备字体

匹配测试

设置默认或后备字体的可靠方法是添加 XML 片段以执行匹配测试。例如,使用“binding”属性,以下设置将回退到 Gentium 代替 Georgia

...
<match target="pattern">
  <test qual="any" name="family" compare="eq"><string>Georgia</string></test>
  <edit name="family" mode="assign" binding="same"><string>Gentium Book Plus</string></edit>
</match>
...

在上面,“compare”属性可以是“eq”(即,与 Georgia 完全相等)、“contains”(例如,匹配 GeorgiaGeorgia Pro)或其他值。请参阅 fonts-conf(5)

别名

另一种方法是使用 <alias> 设置“首选”字体。匹配 <family> 元素的字体将被编辑为在匹配的 <family> 之前添加 <prefer>ed 系列的列表。以下示例将在调用 Helvetica 时回退到 Bitstream Vera Sans

...
<alias>
    <family>Helvetica</family>
    <prefer>
        <family>Bitstream Vera Sans</family>
    </prefer>
</alias>
...

当缺少某些字形时,<alias> 也可以用于指定后备字体。例如,许多版本的 Helvetica Neue 不包含希腊字符。用户可能安装了 Helvetica Neue 并希望将其用于拉丁字符,并回退到 FreeSans 用于希腊字符,因为它与 Helvetica 相似。但是,同一用户可能已将另一个字体 Noto Sans 设置为默认的无衬线字体。以下内容将允许实现此目的

...
<alias>
    <family>Helvetica Neue LT Pro</family>
    <prefer>
        <family>Helvetica Neue LT Pro</family>
        <family>FreeSans</family>
    </prefer>
</alias>
...

如果用户只是想在缺少字形时回退到默认字体,则不需要上述操作。

字体白名单和黑名单

元素 <selectfont><acceptfont><rejectfont> 元素结合使用,以选择性地将字体列入解析列表和匹配请求的白名单或黑名单。最简单和最典型的用例是拒绝用户需要安装的字体,但该字体与通用字体查询匹配,从而导致用户界面出现问题。

首先,获取字体本身列出的系列名称

$ fc-scan .fonts/lklug.ttf --format='%{family}\n'
LKLUG

然后,在 <rejectfont> 节中使用该系列名称

<selectfont>
    <rejectfont>
        <pattern>
            <patelt name="family" >
                <string>LKLUG</string>
            </patelt>
        </pattern>
    </rejectfont>
</selectfont>

通常,当两个元素组合在一起时,首先对更通用的匹配 glob 使用 <rejectfont> 以拒绝一大组(例如,整个目录),然后在它之后使用 <acceptfont> 以将较大黑名单组中的单个字体列入白名单。

<selectfont>
    <rejectfont>
        <glob>/usr/share/fonts/OTF/*</glob>
    </rejectfont>
    <acceptfont>
        <pattern>
            <patelt name="family" >
                <string>Monaco</string>
            </patelt>
        </pattern>
    </acceptfont>
</selectfont>

禁用位图字体

位图字体有时用作缺少字体的后备字体,这可能会导致文本渲染像素化或过大。使用 70-no-bitmaps.conf 预设 来禁用此行为。

禁用所有字体的嵌入式位图

~/.config/fontconfig/conf.d/20-no-embedded.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <match target="font">
    <edit name="embeddedbitmap" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
</fontconfig>

禁用特定字体的嵌入式位图字体

<match target="font">
  <test qual="any" name="family">
    <string>Monaco</string>
  </test>
  <edit name="embeddedbitmap">
    <bool>false</bool>
  </edit>
</match>

如果禁用了所有字体的嵌入式位图,则仍然可以为特定字体启用它们,以防它在没有嵌入式位图的情况下无法工作。例如,对于 Noto Color Emoji

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <match target="font">
    <edit name="embeddedbitmap" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
  <match target="font">
    <test name="family" qual="any">
      <string>Noto Color Emoji</string>
    </test>
    <edit name="embeddedbitmap">
      <bool>true</bool>
    </edit>
  </match>
</fontconfig>

禁用位图字体缩放

要禁用位图字体的缩放(这通常会使它们模糊),请删除 /etc/fonts/conf.d/10-scale-bitmap-fonts.conf。请注意,这可能会破坏表情符号字体(例如 Segoe UI Emoji)的缩放,使其变得巨大。

要重新启用位图字体的缩放,请重新创建符号链接

# ln -s /usr/share/fontconfig/conf.default/10-scale-bitmap-fonts.conf /etc/fonts/conf.d/10-scale-bitmap-fonts.conf

为不完整的字体创建粗体和斜体样式

FreeType 能够为没有粗体和斜体样式的字体自动创建斜体粗体样式,但前提是应用程序明确要求。鉴于程序很少发送这些请求,本节介绍如何手动强制生成缺少的样式。

首先编辑 /usr/share/fonts/fonts.cache-1,如下所述。将修改的副本存储在另一个文件中,因为使用 fc-cache 进行字体更新将覆盖 /usr/share/fonts/fonts.cache-1

假设安装了 Dupree 字体

"dupree.ttf" 0 "Dupree:style=Regular:slant=0:weight=80:width=100:foundry=unknown:index=0:outline=True:etc...

复制该行,将 style=Regular 更改为 style=Bold 或任何其他样式。还要将 slant=0 更改为 slant=100 以表示斜体,将 weight=80 更改为 weight=200 以表示粗体,或将它们组合起来表示 粗斜体

"dupree.ttf" 0 "Dupree:style=Bold Italic:slant=100:weight=200:width=100:foundry=unknown:index=0:outline=True:etc...

现在将必要的修改添加到 $XDG_CONFIG_HOME/fontconfig/fonts.conf

...
<match target="font">
    <test name="family" qual="any">
        <string>Dupree</string>
         <!-- other fonts here .... -->
     </test>
     <test name="weight" compare="more_eq"><int>140</int></test>
     <edit name="embolden" mode="assign"><bool>true</bool></edit>
</match>

<match target="font">
    <test name="family" qual="any">
        <string>Dupree</string>
        <!-- other fonts here .... -->
    </test>
    <test name="slant" compare="more_eq"><int>80</int></test>
    <edit name="matrix" mode="assign">
        <times>
            <name>matrix</name>
                <matrix>
                    <double>1</double><double>0.2</double>
                    <double>0</double><double>1</double>
                </matrix>
        </times>
    </edit>
</match>
...
提示: 对于现有的粗体字体,请使用值 embolden 以使它们更粗。

规则优先级

Fontconfig 按数字顺序处理 /etc/fonts/conf.d 中的文件。因此,01-aaa.conf02-bbb.conf 的规则与单个 01-aaabbb.conf 文件首先包含 01-aaa 的规则,然后包含 02-bbb 的规则具有相同的效果。

通常,这意味着前缀较小的文件将具有更高的优先级。但是,Fontconfig 语法很灵活,允许新规则优先于现有规则。因此,建议#查询当前设置以测试规则交互的结果。

本文或本节的事实准确性存在争议。

原因: 实际行为似乎与下面描述的不同。(在 Talk:Font_configuration#Rule_priority 中讨论)

请注意,用户在 $XDG_CONFIG_HOME/fontconfig/fonts.conf 和目录 $XDG_CONFIG_HOME/fontconfig/conf.d 中定义的规则通过文件 /etc/fonts/conf.d/50-user.conf 加载,并且通常优先于以较高数字开头的文件中定义的规则。

查询当前设置

要了解哪些设置生效,请使用 fc-match --verbose。例如:

$ fc-match --verbose Sans
family: "DejaVu Sans"(s)
hintstyle: 3(i)(s)
hinting: True(s)
...

fonts-conf(5) 中查找数字的含义。例如,“hintstyle: 3”表示“hintfull”

不支持 Fontconfig 的应用程序

注意: 至少使用 xcb 后端的 Qt 6.8 开始优先考虑 X11 资源而不是 fontconfig,因此这些设置将成为 Qt 6 客户端的权威,尽管它们完全支持 fontconfig

某些应用程序(如 URxvt)会忽略 Fontconfig 设置。您可以使用 ~/.Xresources 来解决此问题,但它不如 Fontconfig 灵活。示例(有关选项的说明,请参阅 #Fontconfig 配置

~/.Xresources
Xft.autohint: 0
Xft.lcdfilter: lcddefault
Xft.hintstyle: hintslight
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb

使用 xrdb -q 确保在 X 启动时正确加载了设置(有关更多信息,请参阅 X 资源)。

故障排除

字体失真

有关处理高 DPI 或混合 DPI 显示器的说明,请参阅 HiDPI:使用与物理硬件不匹配的 DPI 设置可能会导致字体显示模糊。

Calibri、Cambria、Monaco 等字体渲染不正确

某些可缩放字体具有嵌入式位图版本,这些版本会被渲染,主要是在较小的尺寸下。使用度量兼容字体作为替换可以改善这些情况下的渲染效果。

您还可以通过禁用嵌入式位图来强制在所有尺寸下使用可缩放字体,但会牺牲一些渲染质量。

应用程序覆盖微调设置

某些应用程序或桌面环境可能会覆盖默认的 Fontconfig 微调和抗锯齿设置。例如,在使用 Qt 应用程序(如 vlcsmplayer)时,GNOME 3 中可能会发生这种情况。在这种情况下,请使用应用程序的特定配置程序。对于 GNOME,请尝试 gnome-tweaks

应用程序未从 GNOME 设置中获取微调

例如,在 GNOME 下,有时 Firefox 会应用完全微调,即使在 GNOME 设置中设置为“无”也是如此,这会导致字体变得清晰且加宽。在这种情况下,您必须将微调设置添加到您的 fonts.conf 文件中

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
 <match target="font">
  <edit mode="assign" name="hinting">
   <bool>false</bool>
  </edit>
 </match>
</fontconfig>

在此示例中,微调设置为 grayscale

GTK 应用程序中不正确的微调

在某些桌面环境(尤其是在 GNOMEPlasma 之外)中,某些 GTK 应用程序可能无法正确读取字体配置。为了解决此问题,请安装 xsettingsdxsettingsd-gitAUR 并在每次系统启动时执行它。另请参阅 Xsettingsdxsettingsd wiki 以获取更多信息。可以使用以下常见配置对其进行配置

~/.xsettingsd
Xft/Hinting 1
Xft/HintStyle "hintslight"
Xft/Antialias 1
Xft/RGBA "rgb"

如果在某些其他应用程序中不起作用,您可以安装 xorg-xrdb 并提供以下配置

~/.Xresources
Xft.hinting: 1
Xft.hintstyle: hintslight
Xft.antialias: 1
Xft.rgba: rgb 

然后,您可以在每次系统启动时执行脚本 xrdb -merge ~/.Xresources 以应用选项。另请参阅 X 资源#不支持 Fontconfig 的应用程序

GTK4 程序中的微调

GTK4 和 libadwaita 程序忽略字体微调设置。要解决此问题,请创建或修改以下配置

~/.config/gtk-4.0/settings.ini
[Settings]
gtk-hint-font-metrics=true

另请参阅 GTK 文档GTK 问题 3787

生成的 PDF 中 Helvetica 字体问题

如果以下命令

fc-match helvetica

产生

helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"

然后,由 xorg-fonts-75dpi 提供的位图字体很可能被嵌入到由各种应用程序的“打印到文件”或“导出”功能生成的 PDF 文件中。位图字体可能是安装整个 xorg 组(通常推荐)的结果。要解决像素化字体问题,您可以卸载该软件包。安装 gsfonts (Type 1 字体) 或 tex-gyre-fonts (OpenType 字体) 以获得与 Helvetica (和其他 PostScript/PDF 基本字体) 对应的免费替代品。

当您打开需要 Helvetica 字体但未嵌入该字体的 PDF 文件进行查看时,您也可能会遇到类似的问题。

FreeType 破坏位图字体

一些用户报告了问题 (FS#52502),在将 freetype2 升级到 2.7.1 版本后,位图字体的名称已更改,这在终端模拟器和一些其他程序(如 dwmdmenu)中造成了混乱,因为它们会回退到另一种(不同的)字体。这是由 PCF 字体族格式的更改引起的,这在他们的发行说明 [6] 中有所描述。从旧格式过渡的用户可能希望创建一个字体别名来解决这些问题,就像 [7] 中描述的解决方案一样,这里也给出了该解决方案

假设我们要为 terminus-font 创建一个别名,它在之前描述的 freetype2 更新中从 Terminus 重命名为 xos4 Terminus

本文或章节已过时。

原因: /etc/fonts/conf.avail 已被 /usr/share/fontconfig/conf.avail 替换,但后者用于预安装的文件。(在 Talk:Font configuration 中讨论)
  • /etc/fonts/conf.avail/ 中为字体别名创建一个配置文件
/etc/fonts/conf.avail/33-TerminusPCFFont.conf
<?xml version="1.0"?>
 <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
 <fontconfig>
     <alias>
         <family>Terminus</family>
         <prefer><family>xos4 Terminus</family></prefer>
         <default><family>fixed</family></default>
     </alias>
 </fontconfig>
  • /etc/fonts/conf.d 目录中创建一个指向它的符号链接。在我们的示例中,我们将如下链接:ln -s /etc/fonts/conf.avail/33-TerminusPCFFont.conf /etc/fonts/conf.d 以使更改永久生效。

现在一切应该像更新前一样工作,字体别名应该已经生效,但请确保先重新加载 .Xresources 或重启显示服务器,以便受影响的程序可以使用别名。

DejaVu Monospace 字体无法渲染下划线

自 Pango 1.44 起,当使用 DejaVu Sans Mono 字体时,在某些字体大小下,下划线字符会消失。一种解决方法是使用 Liberation Mono 作为等宽字体,请参阅 #设置默认或回退字体

调试 FreeType 字体

freetype2-demos 提供了用于调试 FreeType 字体配置的工具。ftview 是一个 GUI,您可以在其中通过实时预览调整字体渲染设置。例如

$ ftview -e unic -d 1024x768x24 -r 96 10 /usr/share/fonts/noto/NotoSans-Regular.ttf

文本模糊

一些应用程序(例如 Chromium/Electron)未正确应用伽马校正,有些应用程序在某些情况下(灰度)禁用伽马校正,这会导致深色背景上的小文本模糊且在 <=1080p 屏幕上无法阅读。这是 Chromium/Electron 的一个 长期存在的问题,一种解决方法是使用 FREETYPE_PROPERTIES="cff:no-stem-darkening=0 autofitter:no-stem-darkening=0" 环境变量 启用笔画加粗

font-config-info

您可以使用 font-config-info-gitAUR 收集您有效的字体配置。它从 多个 GTK 来源、X resourcesXSETTINGS 协议和 fontconfig 查询信息。

参见