如何在 Linux 上安装和管理字体如何在 Linux 上安装和管理字体如何在 Linux 上安装和管理字体如何在 Linux 上安装和管理字体
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 Linux 上安装和管理字体

发表 admin at 2025年2月28日
类别
  • 未分类
标签
月額480円〜の高速レンタルサーバー ColorfulBox

字体是用户体验非常重要的一部分。在最常用的基于 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
[...]

正如您在上面看到的,对于每个已安装的字体,该命令返回:

  1. 系统中字体文件的路径

  2. 字体家族

  3. 字体样式

有关已安装字体的更多信息可以通过使用 -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”)安装字体。

©2015-2025 Norria support@alaica.com