如何禁用未使用的亚洲字体?

ger*_*los 6 package-management apt fonts libreoffice localization

我正在为意大利的一所学校配置 Ubuntu 18.04 LTS PC,我发现超过 200 种字体被安装为ubuntu-desktop软件包的依赖项。

我们不需要其中的大多数,例如,我们不期望典型用户用孟加拉语或泰语编写或阅读文档。实际上,如此多的字体使我们的用户(例如在 LibreOffice 中)选择字体变得更加困难,因为他们很难找到有用的字体。

有没有办法在系统范围内禁用这些非拉丁字体,这样它们就不会出现在应用程序中?

我知道我可以手动删除它们(例如清除fonts-tlwg-*软件包),但我想保留它们的安装状态,因此单个用户可以在需要时稍后启用它们,而不会影响同一系统的其他用户。

ger*_*los 5

无需卸载任何软件包,因为fontconfig提供了一种将某些字体或路径列入黑名单的方法,并将它们排除在外,就好像它们不存在于系统中一样。

您只需要在系统或用户配置中添加如下几行:

<selectfont>
    <rejectfont>
    <glob>/usr/share/fonts/truetype/fonts-beng-extra/*</glob>
    </rejectfont>
</selectfont>
Run Code Online (Sandbox Code Playgroud)

配置放在哪里

  • 要在系统范围内禁用这些字体,您可以将这些说明放入/etc/fonts/local.conf
  • 要仅为一个用户禁用这些字体,您可以将它们放入~/.config/fontconfig/fonts.conf

要为每个新用户设置默认行为,请将此配置放入/etc/skel/.config/fontconfig/fonts.conf.

这样,默认情况下会禁用不需要的字体,但用户仍然可以让它们重新编辑自己的fontconfig配置文件(最后一种方法对于我的用例来说似乎更通用)。

显然,如果您放入此配置,则/etc/skel/不会影响现有用户。他们需要手动将其复制到自己的主目录中才能使其正常工作。

配置示例

这是我的完整fonts.conf文件,它禁用了我不需要的所有非拉丁字体。它住在~/.config/fontconfig/fonts.conf

这不仅使字体列表更短,而且还使一些应用程序(例如 LibreOffice)速度更快一些,因为它们需要处理较少的字体进行预览,并且用户仍然可以在需要时为自己启用某些字体,而不会影响其他用户和没有管理员权限。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <!-- disable non-latin fonts -->
    <selectfont>
        <rejectfont>
        <glob>/usr/share/fonts/opentype/malayalam/*</glob>
        <glob>/usr/share/fonts/opentype/noto/*CJK*</glob>
        <glob>/usr/share/fonts/truetype/abyssinica/*</glob>
        <glob>/usr/share/fonts/truetype/fonts-beng-extra/*</glob>
        <glob>/usr/share/fonts/truetype/fonts-deva-extra/*</glob>
        <glob>/usr/share/fonts/truetype/fonts-gujr-extra/*</glob>
        <glob>/usr/share/fonts/truetype/fonts-guru-extra/*</glob>
        <glob>/usr/share/fonts/truetype/fonts-kalapi/*</glob>
        <glob>/usr/share/fonts/truetype/fonts-orya-extra/*</glob>
        <glob>/usr/share/fonts/truetype/fonts-telu-extra/*</glob>
        <glob>/usr/share/fonts/truetype/Gargi/*</glob>
        <glob>/usr/share/fonts/truetype/Gubbi/*</glob>
        <glob>/usr/share/fonts/truetype/kacst/*</glob>
        <glob>/usr/share/fonts/truetype/kacst-one/*</glob>
        <glob>/usr/share/fonts/truetype/lao/*</glob>
        <glob>/usr/share/fonts/truetype/lohit*</glob>
        <glob>/usr/share/fonts/truetype/malayalam/*</glob>
        <glob>/usr/share/fonts/truetype/Nakula/*</glob>
        <glob>/usr/share/fonts/truetype/Navilu/*</glob>
        <glob>/usr/share/fonts/truetype/padauk/*</glob>
        <glob>/usr/share/fonts/truetype/pagul/*</glob>
        <glob>/usr/share/fonts/truetype/Sahadeva/*</glob>
        <glob>/usr/share/fonts/truetype/samyak/*</glob>
        <glob>/usr/share/fonts/truetype/samyak-fonts/*</glob>
        <glob>/usr/share/fonts/truetype/Sarai/*</glob>
        <glob>/usr/share/fonts/truetype/sinhala/*</glob>
        <glob>/usr/share/fonts/truetype/tibetan-machine/*</glob>
        <glob>/usr/share/fonts/truetype/tlwg/*</glob>
        <glob>/usr/share/fonts/truetype/ttf-khmeros-core/*</glob>
        </rejectfont>
    </selectfont>
</fontconfig>
Run Code Online (Sandbox Code Playgroud)

参考


djv*_*jvg 5

@gerlos 的答案很好,但是就我个人而言,我不喜欢为每种语言指定单独的文件夹。这感觉有点麻烦而且看起来很脆弱。

另一种方法是排除所有不支持所需语言的字体,例如en在我的例子中为英语 ( )。

用户配置文件 ( ~/.config/fontconfig/fonts.conf) 可能如下所示:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration -->
<fontconfig>
  <selectfont>
    <!-- reject all fonts -->
    <rejectfont>
      <pattern>
      </pattern>
    </rejectfont>
    <!-- accept only fonts that support english -->
    <acceptfont>
      <pattern>
        <patelt name="lang">
          <string>en</string>
        </patelt>
      </pattern>
    </acceptfont>
  </selectfont>
</fontconfig>
Run Code Online (Sandbox Code Playgroud)

如果这限制太多,我们可以根据需要接受其他字体。