如何删除非拉丁字体而不自动删除 xubuntu-desktop?

如何删除非拉丁字体而不自动删除 xubuntu-desktop?

xubuntu-desktop 默认安装了许多非拉丁字体,这对于亚洲或阿拉伯用户来说非常棒,但却使我的(西方用户)在字体列表中选择字体的界面变得混乱。

因此我确实删除了许多我从未使用过的字体:

sudo apt-get remove --purge fonts-beng fonts-beng-extra fonts-deva fonts-deva-extra fonts-gargi fonts-gubbi fonts-gujr fonts-gujr-extra fonts-guru fonts-guru-extra fonts-indic fonts-kalapi
  fonts-khmeros-core fonts-knda fonts-lao fonts-lklug-sinhala fonts-lohit-beng-assamese fonts-lohit-beng-bengali fonts-lohit-deva fonts-lohit-gujr fonts-lohit-guru
  fonts-lohit-knda fonts-lohit-mlym fonts-lohit-orya fonts-lohit-taml fonts-lohit-taml-classical fonts-lohit-telu fonts-mlym fonts-nakula fonts-navilu 
  fonts-orya fonts-orya-extra fonts-pagul fonts-sahadeva fonts-samyak-deva fonts-samyak-gujr fonts-samyak-mlym
  fonts-samyak-taml fonts-sarai fonts-sil-abyssinica fonts-sil-padauk fonts-smc fonts-smc-anjalioldlipi fonts-smc-chilanka fonts-smc-dyuthi fonts-smc-gayathri
  fonts-smc-karumbi fonts-smc-keraleeyam fonts-smc-manjari fonts-smc-meera fonts-smc-rachana fonts-smc-raghumalayalamsans fonts-smc-suruma fonts-smc-uroob fonts-taml
  fonts-telu fonts-telu-extra fonts-thai-tlwg fonts-tibetan-machine fonts-tlwg-garuda fonts-tlwg-garuda-ttf fonts-tlwg-kinnari fonts-tlwg-kinnari-ttf fonts-tlwg-laksaman
  fonts-tlwg-laksaman-ttf fonts-tlwg-loma fonts-tlwg-loma-ttf fonts-tlwg-mono fonts-tlwg-mono-ttf fonts-tlwg-norasi fonts-tlwg-norasi-ttf fonts-tlwg-purisa
  fonts-tlwg-purisa-ttf fonts-tlwg-sawasdee fonts-tlwg-sawasdee-ttf fonts-tlwg-typewriter fonts-tlwg-typewriter-ttf fonts-tlwg-typist fonts-tlwg-typist-ttf fonts-tlwg-typo
  fonts-tlwg-typo-ttf fonts-tlwg-umpush fonts-tlwg-umpush-ttf fonts-tlwg-waree fonts-tlwg-waree-ttf fonts-yrsa-rasa 
  fonts-noto-core fonts-noto-hinted fonts-noto-ui-core  fonts-noto-cjk

因此我的字体列表(在 LibreOffice 或 Inkscape 中,ao)变得更加可用,欢呼!

但是这次清除的副作用是删除了xubuntu-default-settings(取决于fonts-noto-hinted),因此xubuntu-corexubuntu-desktop......这意味着我的大多数软件(包括 LibreOffice)现在都在 aptautoremove列表中......所以我无法再清理我的安装。

我怎样才能删除这些非拉丁字体,同时保持 xubuntu-desktop 软件堆栈不受影响?

我尝试重新安装没有推荐软件包的 xubuntu-desktop,但无济于事(由于依赖于 fonts-noto):

sudo apt-get install --no-install-recommends xubuntu-desktop

我还尝试通过添加到 /etc/apt/preferences 将所有这些字体固定为永不安装:

Package: <all fonts packages>
Pin: release *
Pin-Priority: -1

但我的问题依然存在。

答案1

一个解决方法是安装字体管理器

sudo apt install font-manager

...然后禁用那些你不会使用的字体(比如大多数 Noto 字体)我以这种方式禁用了 180 多种字体,运行起来好多了。它们仍然是“已安装”的,但系统上的其他程序将看不到它们。除非你的驱动器空间有限,而且每千字节都很重要,否则只能这样做。仍然不知道为什么至少 100 种很少有用户需要的字体是依赖项!在此处输入图片描述

答案2

按照@gunnar-hjalmarsson 的指示,我保留了字体,并且元包安装了强大的依赖项(fonts-noto-core fonts-noto-hinted fonts-noto-ui-core)......并且只删除了在(X)Ubuntu 安装过程中默认安装的“推荐”字体:

sudo apt-get remove --purge fonts-beng fonts-beng-extra fonts-deva \
    fonts-deva-extra fonts-gargi fonts-gubbi fonts-gujr fonts-gujr-extra \
    fonts-guru fonts-guru-extra fonts-indic fonts-kalapi fonts-khmeros-core \
    fonts-knda fonts-lao fonts-lklug-sinhala fonts-lohit-beng-assamese \
    fonts-lohit-beng-bengali fonts-lohit-deva fonts-lohit-gujr \
    fonts-lohit-guru fonts-lohit-knda fonts-lohit-mlym fonts-lohit-orya \
    fonts-lohit-taml fonts-lohit-taml-classical fonts-lohit-telu fonts-mlym \
    fonts-nakula fonts-navilu fonts-orya fonts-orya-extra fonts-pagul \
    fonts-sahadeva fonts-samyak-deva fonts-samyak-gujr fonts-samyak-mlym \
    fonts-samyak-taml fonts-sarai fonts-sil-abyssinica fonts-sil-padauk \
    fonts-smc fonts-smc-anjalioldlipi fonts-smc-chilanka fonts-smc-dyuthi \
    fonts-smc-gayathri fonts-smc-karumbi fonts-smc-keraleeyam \
    fonts-smc-manjari fonts-smc-meera fonts-smc-rachana \
    fonts-smc-raghumalayalamsans fonts-smc-suruma fonts-smc-uroob fonts-taml \
    fonts-telu fonts-telu-extra fonts-thai-tlwg fonts-tibetan-machine \
    fonts-tlwg-garuda fonts-tlwg-garuda-ttf fonts-tlwg-kinnari \
    fonts-tlwg-kinnari-ttf fonts-tlwg-laksaman fonts-tlwg-laksaman-ttf\
    fonts-tlwg-loma fonts-tlwg-loma-ttf fonts-tlwg-mono fonts-tlwg-mono-ttf \
    fonts-tlwg-norasi fonts-tlwg-norasi-ttf fonts-tlwg-purisa \
    fonts-tlwg-purisa-ttf fonts-tlwg-sawasdee fonts-tlwg-sawasdee-ttf \
    fonts-tlwg-typewriter fonts-tlwg-typewriter-ttf fonts-tlwg-typist \
    fonts-tlwg-typist-ttf fonts-tlwg-typo fonts-tlwg-typo-ttf \
    fonts-tlwg-umpush fonts-tlwg-umpush-ttf fonts-tlwg-waree \
    fonts-tlwg-waree-ttf fonts-yrsa-rasa fonts-noto-cjk

答案3

让我们先花一点时间来欣赏成就能登. 希望从阿法尔语到祖鲁语的任何语言的用户都能够在他们的计算机上默认看到他们母语书写系统的所有字符,这当然是一件高尚的事情。

遗憾的是,技术实现(至少对于 Debian 衍生的 Linux 发行版而言)有很多不足之处,因为数百组成 Noto 的单独字体。正如您所注意到的,这些字体会堵塞字体菜单,并使从字体中进行选择变得对于您实际上使用更是一件苦差事。


正如指出的那样fixitmanarizona 的回答,您可以禁用不想看到的字体。我相信这可以实现您的目标,而无需删除单个字体包 — — 从而冒着破坏依赖这些字体的其他包的风险。

字体管理器会创建一个~/.config/fontconfig/conf.d/78-Reject.conf包含您已通过其 GUI 取消选择的字体的字体。当然,这样做的缺点是,您必须执行一百多次才能取消选择所有仅支持非西方脚本的 Noto Sans 字体,以及您使用的所有系统。

下面是一个 Perl 脚本,它将为您完成此操作。使用方法如下:

mkdir -p ~/.config/fontconfig/conf.d
perl fc-reject.pl > ~/.config/fontconfig/conf.d/88-reject.conf

这将隐藏$rejectfam正则表达式中未指定$mylang(也是 RE)作为其支持语言之一的任何字体。对我来说,这 120 种字体我不再需要在 LibreOffice 等简陋的字体选择下拉菜单中滚动浏览 — 真是松了一口气!

如果您希望将文件命名为 以外的其他名称88-reject.conf,只需确保其以 结尾.conf并以两位数字开头即可。这是 fontconfig 找到它的必要条件。

测试是否有效

你可以通过 ping你确定应该排除的字体grep的输出来查看它是否有效,例如fc-list线性 A

fc-list | grep 'Linear A'

输出中不应有任何输出,或者至少不应有 Noto 字体。

撤消/禁用脚本执行的操作

要撤消脚本所做的操作,只需删除文件即可.conf。更改会立即生效。不过,某些程序可能需要重新启动。

您可以暂时禁用配置(关于- 启用所有排除的字体)通过将其重命名为不是有一个.conf扩展,如下所示:

# e.g., for the Bash shell
mv 88-reject.conf{,.disabled}

顺便说一下,参观维基百科中有关线性 A 的文章是查看 Noto 是否正常工作的有效测试。也就是说,如果字体安装正确,您应该看到“no tofu”(没有Unicode 替换符号) 在该文章中。

剧本fc-reject.pl

#!/usr/bin/env perl
# Usage:   fc-reject.pl > ~/.config/fontconfig/conf.d/88-reject.conf
# Author:  https://askubuntu.com/users/681614
# License: CC-BY-SA-4.0 (see https://askubuntu.com/help/licensing)
use v5.12;
use warnings;
use autodie;

my $mylang = 'en';      # use '(en|lang1|lang2)' for other languages
my $rejectfam = 'Noto'; # use '(Noto|Other Family|Another Family)' for others
my $rejectlist = {};

open my $fh, '-|', 'fc-cat';
while (<$fh>) {
    if (/.* "([^:,]+).*:lang=([^:]*):.*/) {
        my ($name, $lang) = ($1, $2);
        if ($name =~ /$rejectfam/ and (!$lang or $lang !~ /$mylang/)) {
            $rejectlist->{$name} = 1;
        }
    }
}
close $fh;

print <<EOF;
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <selectfont>
    <rejectfont>
EOF

foreach my $name (keys %$rejectlist) {
    print <<EOF;
      <pattern>
        <patelt name="family">
          <string>$name</string>
        </patelt>
      </pattern>
EOF
}

print <<EOF;
    </rejectfont>
  </selectfont>
</fontconfig>
EOF

这是在 Ubuntu 20.04 衍生版(elementaryOS 6.1 Jólnir)上测试的。其他发行版的测试结果可能会有所不同。

相关内容