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

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

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

我们不需要其中的大部分,例如,我们不希望 tipycal 用户用孟加拉语或泰语书写或阅读文档。实际上,如此多的字体使我们的用户(例如在 LibreOffice 中)的字体选择更加困难,因为这使他们很难找到有用的字体。

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

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

答案1

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

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

<selectfont>
    <rejectfont>
    <glob>/usr/share/fonts/truetype/fonts-beng-extra/*</glob>
    </rejectfont>
</selectfont>

配置存放位置

  • 要在系统范围内禁用这些字体,请将这些说明放入/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>

参考

答案2

@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>

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

答案3

请注意ubuntu-desktop 建议大多数字体包;它不依赖它们。因此,您应该能够安全地删除字体包,同时仍保留ubuntu-desktop

相关内容