字体配置

来自 ArchWiki
(重定向自 Fontconfig

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 日志来检查 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 已知的字体列表,请使用来自 xorg-xlsfonts 软件包的 xlsfonts 命令。

Fontconfig 配置

Fontconfig 配置文档位于 fonts-conf(5) man page 中。

可以通过 $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>
注意: 某些应用程序可能会覆盖默认的抗锯齿设置

微调

字体微调(也称为 instructing)是使用数学指令来调整轮廓字体的显示,使其与栅格化网格(即显示器的像素网格)对齐。其预期效果是使字体看起来更清晰,从而更具可读性。当显示器具有大约 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 将是与像素网格良好对齐的清晰字体,但会丢失更多的字体形状。对于非 CFF (.otf) 字体,hintslight 隐式地以垂直方向使用自动微调器,而不是使用字体原生信息。

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> 的族列表。以下示例将在调用 Helvetica 时回退到 Bitstream Vera Sans

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

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

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

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

字体白名单和黑名单

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

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

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

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

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

通常,当两个元素组合使用时,<rejectfont> 首先用于更通用的匹配 glob 以拒绝一大组字体(例如整个目录),然后在其后使用 <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=0slant=100 以获得斜体,weight=80weight=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,但这些设置将成为 Qt 6 客户端的权威设置

某些应用程序(如 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 issue 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 破坏位图字体

一些用户报告称,在将 freetype2 升级到 2.7.1 版本后,位图字体名称已更改,导致终端模拟器和一些其他程序(如 dwmdmenu)出现问题 (FS#52502),因为它们回退到另一个(不同的)字体。这是由于 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" 环境变量 启用 stem darkerning

font-config-info

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

参见