如何在 Linux 上安装和管理字体
字体是用户体验非常重要的一部分。在最常用的基于 Linux 的发行版上,有许多可以使用本机包管理器安装的打包字体。然而,有时我们可能想手动安装一些字体。在本教程中,我们将了解如何执行此类操作,以及更一般地说,如何在 Linux 上管理字体。
在本教程中您将学习:
如何通过 fontconfig 库配置字体
如何生成和更新字体缓存
如何使用 fc-list 获取已安装字体的列表
如何手动安装字体
使用的软件要求和约定
字体配置库
在基于 Linux 的操作系统上,字体通过 fontconfig
库进行管理。应安装字体的目录在 /etc/fonts/font.conf
配置文件中声明:
<!-- Font directory list -->
<dir>/usr/share/fonts</dir>
<dir>/usr/share/X11/fonts/Type1</dir> <dir>/usr/share/X11/fonts/TTF</dir> <dir>/usr/local/share/fonts</dir>
<dir prefix="xdg">fonts</dir>
<!-- the following element will be removed in the future -->
<dir>~/.fonts</dir>
如您所见,扫描字体文件的目录是使用 <dir>
标记声明的。默认设置以下目录:
/usr/share/字体
/usr/share/X11/fonts/Type1
/usr/share/X11/字体/TTF
/usr/local/共享/字体
〜/.字体
<dir>
标记的 prefix
属性可用于自动为传递的目录添加特定前缀。例如,在下面的行中,前缀属性的值为 xdg
;这意味着传递的目录将以 XDG_DATA_HOME
变量为前缀:
<dir prefix="xdg">fonts</dir>
prefix
属性也可以设置为 default
或 cwd
:在这些情况下,当前工作目录用作字首。最后,如果 prefix 的值为relative
,则传递的目录将以包含配置文件的目录路径为前缀。
不应就地修改此系统范围的配置文件,因为它可能会被未来的系统更新覆盖。相反,自定义设置应放入 /etc/fonts/local.conf
文件中,如果该文件不存在,则应创建该文件。还可以创建每用户配置:
$XDG_CONFIG_HOME/fontconfig/fonts.conf
〜/.fonts.conf
字体实用程序
fontconfig 包中包含一些实用程序,可以让我们轻松执行有用的操作,例如重新生成字体缓存或列出已安装的字体。让我们看一些它们的用法示例。
生成和更新字体缓存
要重新扫描存储字体的目录,并重新创建字体缓存(通常我们希望在安装新字体后执行此操作),我们可以使用 fc-cache
实用程序。如果在没有任何参数的情况下调用,该实用程序将重新扫描所有配置的目录:
$ fc-cache
为了仅扫描特定目录,我们可以将其作为参数传递给命令。在以下示例中,我们仅重新扫描 /usr/share/fonts
目录。 -v
选项用于使输出更加详细:
$ fc-cache -v /usr/share/fonts
Font directories:
/usr/share/fonts
/usr/share/fonts: skipping, existing cache is valid: 0 fonts, 37 dirs
/usr/share/fonts/adobe-source-code-pro: skipping, existing cache is valid: 14 fonts, 0 dirs
/usr/share/fonts/cantarell: skipping, existing cache is valid: 11 fonts, 0 dirs
/usr/share/fonts/dejavu-sans-fonts: skipping, existing cache is valid: 9 fonts, 0 dirs
[...]
在上面的示例中,您可以看到,如果现有缓存被视为有效,则会跳过重新生成。如果我们想强制执行该过程,可以将 -f
选项传递给命令:
$ fc-cache -v -f /usr/share/fonts
fc-cache /usr/share/fonts -vf
Font directories:
/usr/share/fonts
/usr/share/fonts: caching, new cache contents: 0 fonts, 37 dirs
/usr/share/fonts/adobe-source-code-pro: caching, new cache contents: 14 fonts, 0 dirs
/usr/share/fonts/cantarell: caching, new cache contents: 11 fonts, 0 dirs
/usr/share/fonts/dejavu-sans-fonts: caching, new cache contents: 9 fonts, 0 dirs
[...]
使用 fc-list 获取可用字体列表
要从命令行获取系统上当前可用字体的列表,我们可以使用 fc-list
:
$ fc-list
/usr/share/fonts/google-droid-sans-fonts/DroidSansTamil-Bold.ttf: Droid Sans,Droid Sans Tamil:style=Bold
/usr/share/fonts/julietaula-montserrat-fonts/Montserrat-Bold.otf: Montserrat:style=Bold
/usr/share/fonts/google-droid-sans-fonts/DroidSansArmenian.ttf: Droid Sans,Droid Sans Armenian:style=Regular
/usr/share/fonts/google-noto/NotoSans-CondensedBlack.ttf: Noto Sans,Noto Sans Condensed Black:style=Condensed Black,Regular
/usr/share/fonts/google-noto/NotoSansMono-SemiCondensedLight.ttf: Noto Sans Mono,Noto Sans Mono SemiCondensed Light:style=SemiCondensed Light,Regular
/usr/share/fonts/google-noto/NotoSansMono-CondensedMedium.ttf: Noto Sans Mono,Noto Sans Mono Condensed Medium:style=Condensed Medium,Regular
/usr/share/fonts/urw-base35/NimbusMonoPS-Italic.otf: Nimbus Mono PS:style=Italic
[...]
正如您在上面看到的,对于每个已安装的字体,该命令返回:
系统中字体文件的路径
字体家族
字体样式
有关已安装字体的更多信息可以通过使用 -v
选项调用该实用程序来获取:
Pattern has 26 elts (size 32)
family: "Cantarell"(s) "Cantarell Thin"(s)
familylang: "en"(s) "en"(s)
style: "Thin"(s) "Regular"(s)
stylelang: "en"(s) "en"(s)
fullname: "Cantarell Thin"(s)
fullnamelang: "en"(s)
slant: 0(i)(s)
weight: 0(f)(s)
width: 100(f)(s)
foundry: "ABAT"(s)
file: "/usr/share/fonts/cantarell/Cantarell-Thin.otf"(s)
index: 0(i)(s)
outline: True(s)
scalable: True(s)
charset:
0000: 00000000 ffffffff ffffffff 7fffffff 00000000 ffffffff ffffffff ffffffff
0001: ffffffff fff3ffff fffffdff 7fffffff 00048000 00018003 1ffffff0 fc000cc0
0002: 0fffffff 008f3c00 02000000 00000000 00000000 de000000 3f001fc0 00000000
0003: 0806bfdf 01e243d8 00000000 04200000 ffffd770 fffffffb 00807fff 00000000
0004: ffffffff ffffffff ffffffff 003c0c0c 3fff0000 0fcfcc3f f3ff9807 03ffc3fc
0005: 3c000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
001e: 30f0f300 0cc3cc33 cc0ff3fc 0f00f3ff 408cc03f ffffffff ffffffff 03ffffff
001f: 3f3fffff ffffffff aaff3f3f 3fffffff ffffffff ffdfffff 6fcfffdf 7fdcffff
0020: 773f0fff 063d0047 00040010 03f10000 000003ff 37367ada 00000000 00000000
0021: 00480000 00004044 ffff0000 00000000 000f0200 00000000 00000000 00000000
0022: 46268064 00400800 00000100 00000037 00000000 00000000 00000000 00000000
0024: 00000000 00000008 00000000 00000000 00000000 00000000 00000000 00000000
0025: 00000000 00000000 00000000 00000000 00000000 00000000 00008c00 00000000
0027: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000300
00a7: 00000000 00000000 00000000 00000000 00001800 00000000 00000000 00000000
00fb: 00000006 00000000 00000000 00000000 00000000 00000000 00000000 00000000
(s)
lang: aa|ast|av|ay|az-az|ba|be|bg|bi|bin|br|bs|bua|ca|ce|ch|chm|co|cs|cv|cy|da|de|el|en|eo|es|et|eu|fi|fj|fo|fr|fur|fy|gd|gl|gn|gv|haw|ho|hr|hu|ia|ig|id|ie|ik|io|is|it|kaa|ki|kk|kl|ku-am|kum|kv|kw|ky|la|lb|lez|lt|lv|mg|mh|mk|mo|mt|nb|nds|nl|nn|no|nr|nso|ny|oc|om|os|pl|pt|rm|ro|ru|sah|se|sel|sh|sk|sl|sm|sma|smj|smn|so|sq|sr|ss|st|sv|sw|tg|tk|tl|tn|to|tr|ts|tt|tyv|uk|uz|vi|vo|vot|wa|wen|wo|xh|yap|zu|an|crh|csb|fil|hsb|ht|jv|kj|ku-tr|kwm|lg|li|mn-mn|ms|na|ng|nv|pap-an|pap-aw|qu|quz|rn|rw|sc|sg|sn|su|ty|za(s)
fontversion: 19726(i)(s)
capability: "otlayout:DFLT otlayout:latn"(s)
fontformat: "CFF"(s)
decorative: False(s)
postscriptname: "Cantarell-Thin"(s)
color: False(s)
symbol: False(s)
variable: False(s)
fonthashint: False(s)
order: 0(i)(s)
如果我们只想获取有关特定字体模式的信息,我们可以将其作为参数传递给命令。例如,要获取与“Cantarell”匹配的字体的信息,我们将运行:
$ fc-list cantarell
如果该模式与任何字体匹配,我们将获得类似于以下的结果:
usr/share/fonts/cantarell/Cantarell-Light.otf: Cantarell,Cantarell Light:style=Light,Regular
/usr/share/fonts/cantarell/Cantarell-VF.otf: Cantarell:style=Bold
/usr/share/fonts/cantarell/Cantarell-Bold.otf: Cantarell:style=Bold
/usr/share/fonts/cantarell/Cantarell-ExtraBold.otf: Cantarell,Cantarell Extra Bold:style=Extra Bold,Regular
/usr/share/fonts/cantarell/Cantarell-VF.otf: Cantarell:style=Light
/usr/share/fonts/cantarell/Cantarell-VF.otf: Cantarell:style=Regular
/usr/share/fonts/cantarell/Cantarell-Thin.otf: Cantarell,Cantarell Thin:style=Thin,Regular
/usr/share/fonts/cantarell/Cantarell-VF.otf: Cantarell
/usr/share/fonts/cantarell/Cantarell-VF.otf: Cantarell:style=Extra Bold
/usr/share/fonts/cantarell/Cantarell-Regular.otf: Cantarell:style=Regular
/usr/share/fonts/cantarell/Cantarell-VF.otf: Cantarell:style=Thin
检查系统中是否安装了特定字体的方法是在调用fc-list
时使用-q
选项。当我们这样做时,应用程序的所有输出都会被抑制,如果传递的模式没有产生匹配,则 1
将作为退出代码返回。在以下示例中,系统上不存在“foo”字体。您可能知道,$?
变量包含 shell 中启动的最后一个命令的退出代码:
$ fc-list -q foo
echo $?
1
还可以根据特定属性过滤已安装的字体。例如,假设我们只想获取有关“DemiLight”样式的字体的信息。我们会运行:
$ fc-list :style=Demilight
启动上述命令后,我正在使用的系统上会生成以下输出:
/usr/share/fonts/google-noto-cjk/NotoSansCJK-DemiLight.ttc: Noto Sans CJK TC,Noto Sans CJK TC DemiLight:style=DemiLight,Regular
/usr/share/fonts/google-noto-cjk/NotoSansCJK-DemiLight.ttc: Noto Sans CJK JP,Noto Sans CJK JP DemiLight:style=DemiLight,Regular
/usr/share/fonts/google-noto-cjk/NotoSansCJK-DemiLight.ttc: Noto Sans CJK HK,Noto Sans CJK HK DemiLight:style=DemiLight,Regular
/usr/share/fonts/google-noto-cjk/NotoSansCJK-DemiLight.ttc: Noto Sans CJK KR,Noto Sans CJK KR DemiLight:style=DemiLight,Regular
/usr/share/fonts/google-noto-cjk/NotoSansCJK-DemiLight.ttc: Noto Sans CJK SC,Noto Sans CJK SC DemiLight:style=DemiLight,Regular
同样,要仅获取支持特定语言的字体的信息,我们可以使用 lang
属性:
$ fc-list :lang=it
安装新字体
具有免费开源许可证的字体通常被打包并包含在 Linux 发行版中,但是,有时我们可能想要手动安装从网络下载的特定字体。在这种情况下,我们所要做的就是将字体文件放在适当的目录中。让我们看一个例子。假设我们要安装“JetBrains Mono”谷歌字体。我们做的第一件事是导航到谷歌字体页面:
一旦我们下载并解压了包含字体文件的 zip 文件,我们所要做的就是将其复制到 ~/.fonts
或 中,以使该字体仅供我们的用户使用。 ~/.local/share/fonts
目录,然后刷新字体缓存:
$ cp JetBrainsMono-Italic-VariableFont_wght.ttf ~/.local/share/fonts
$ fc-cache -vf
还可以使用图形应用程序安装字体,例如 GNOME 字体(该软件包称为 gnome-fonts-viewer)。要使用此类应用程序安装字体,我们用它打开字体文件:将显示字体的预览。要继续安装,我们只需单击“安装”按钮:
如果 KDE Plasma Desktop 是我们最喜欢的环境,则执行相同操作的本机应用程序称为 KFontView(遗憾的是,该应用程序尚不支持 Wayland,因此只能在 Xorg 上使用):
结论
在本教程中,我们了解了如何在基于 Linux 的操作系统上管理和安装字体。我们了解到字体是通过“fontconfig”库进行管理的,可以使用哪些配置文件,以及默认情况下哪些目录托管字体。我们还了解了如何列出系统上的可用字体、如何重新生成字体缓存以及如何从命令行和通过图形应用程序(例如“GNOME fonts”和“KFontView”)安装字体。