ger*_*los 6 package-management apt fonts libreoffice localization
我正在为意大利的一所学校配置 Ubuntu 18.04 LTS PC,我发现超过 200 种字体被安装为ubuntu-desktop软件包的依赖项。
我们不需要其中的大多数,例如,我们不期望典型用户用孟加拉语或泰语编写或阅读文档。实际上,如此多的字体使我们的用户(例如在 LibreOffice 中)选择字体变得更加困难,因为他们很难找到有用的字体。
有没有办法在系统范围内禁用这些非拉丁字体,这样它们就不会出现在应用程序中?
我知道我可以手动删除它们(例如清除fonts-tlwg-*软件包),但我想保留它们的安装状态,因此单个用户可以在需要时稍后启用它们,而不会影响同一系统的其他用户。
无需卸载任何软件包,因为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)
@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)
如果这限制太多,我们可以根据需要接受其他字体。