Вопрос или проблема
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 и др.) стал гораздо более удобным, ура!
Но это удаление имело побочный эффект: оно удалило xubuntu-default-settings
(в зависимости от fonts-noto-hinted
), а значит, и xubuntu-core
, и xubuntu-desktop
тоже… это означает, что большинство моего программного обеспечения (включая LibreOffice) теперь в списке autoremove
apt… так что я больше не могу очищать свои установки.
Как мне удалить эти нелатинские шрифты, не затрагивая стек программного обеспечения 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
Но моя проблема осталась.
Одним из обходных путей является установка Font Manager:
sudo apt install font-manager
… и затем отключение тех, которые вы не будете использовать (например, большинство шрифтов Noto). Я отключил таким образом более 180 шрифтов, и дела пошли гораздо лучше. Они все еще “установлены”, но другие программы на вашей системе не увидят их. Если у вас ограниченное дисковое пространство и каждое килобайт имеет значение, это правильный подход. Все равно не понимаю, почему по крайней мере 100 шрифтов, которые очень немногие пользователи когда-либо понадобятся, являются зависимостью!
Давайте сначала потратим минуту, чтобы оценить достижение, которым является Noto. Это, безусловно, благородное желание, чтобы пользователи любого языка от Афар до зулу могли видеть все символы своей родной письменности на своих компьютерах по умолчанию, из коробки.
К сожалению, техническая реализация (по крайней мере для дистрибутивов Linux на основе Debian) оставляет желать лучшего из-за сотен отдельных шрифтов, из которых состоит Noto. Как вы отметили, они загромождают меню шрифтов и делают выбор шрифтов для языков, которые вы на самом деле используете более трудоемким.
Как указано в ответе fixitmanarizona, вы можете отключить те, которые не хотите видеть. Я считаю, что это достигает вашей цели, не удаляя отдельные пакеты шрифтов, тем самым не рискуя сломать другие пакеты, которые зависят от этих шрифтов.
Font Manager создает файл ~/.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 мог его найти.
Проверка, сработало ли
Вы можете проверить, сработало ли это, используя grep
, чтобы просмотреть вывод fc-list
на наличие шрифтов, которые вы уверены, должны быть исключены, например, Linear A.
fc-list | grep 'Linear A'
Вывод не должен содержать ничего или, по крайней мере, никаких шрифтов Noto в выводе.
Отмена / отключение того, что делает скрипт
Чтобы отменить действия скрипта, просто удалите файл .conf
. Изменения вступят в силу немедленно. Однако некоторые программы могут потребовать перезапуска.
Вы можете временно отключить конфигурацию (повторно включив все исключенные шрифты), переименовав файл так, чтобы он не имел расширения .conf
, например:
# например, для оболочки Bash
mv 88-reject.conf{,.disabled}
Кстати, посещение статьи Википедии о Linear A является эффективным тестом, чтобы увидеть, выполняет ли Noto свою задачу. То есть, если шрифт установлен должным образом, вы должны увидеть “без тофу” (без символов замены Unicode) в этой статье.
Скрипт fc-reject.pl
#!/usr/bin/env perl
# Использование: fc-reject.pl > ~/.config/fontconfig/conf.d/88-reject.conf
# Автор: https://askubuntu.com/users/681614
# Лицензия: CC-BY-SA-4.0 (см. https://askubuntu.com/help/licensing)
use v5.12;
use warnings;
use autodie;
my $mylang = 'en'; # используйте '(en|lang1|lang2)' для других языков
my $rejectfam = 'Noto'; # используйте '(Noto|Другая Семья|Еще Одна Семья)' для других
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). Ваши результаты могут отличаться с другими дистрибутивами.
Следуя указанию @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
Ответ или решение
Избавление от шрифтов, не относящихся к латинице, в Xubuntu без удаления xubuntu-desktop может показаться сложной задачей. Однако, с учетом зависимостей и конфигураций, существуют несколько методов, которые могут помочь вам очистить список шрифтов, не затрагивая основной пакет программного обеспечения.
1. Использование команды удаления с учетом зависимостей
Первым шагом является удаление ненужных шрифтов. Для этого вы можете воспользоваться командой apt-get remove --purge
, но следует избегать удаления шрифтов, на которые зависят другие пакеты. Например, пакеты шрифтов, такие как fonts-noto-core
, fonts-noto-hinted
, и fonts-noto-ui-core
, часто имеют зависимости к метапакету 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-cjk
2. Пакетный менеджер шрифтов
Если вы хотите избежать удаления пакетов, вы можете использовать менеджер шрифтов, такой как Font Manager. Этот инструмент позволяет вам отключать шрифты, которые вы не хотите видеть в меню выбора шрифтов, сохраняя их установку. Больше 180 шрифтов можно отключить, что значительно упростит выбор шрифта.
sudo apt install font-manager
3. Конфигурация шрифтов для исключения
Кроме того, вы можете создать конфигурационный файл для fontconfig, который будет исключать определенные шрифты из списка. Вот пример Perl-скрипта, который поможет вам создать такой файл конфигурации.
#!/usr/bin/env perl
use v5.12;
use warnings;
use autodie;
my $mylang = 'en';
my $rejectfam = 'Noto';
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
Этот скрипт выполнит фильтрацию шрифтов, и вы сможете скрыть те, которые не нужны. Сохраните выходные данные в файл конфигурации:
mkdir -p ~/.config/fontconfig/conf.d
perl fc-reject.pl > ~/.config/fontconfig/conf.d/88-reject.conf
4. Тестирование и восстановление
После выполнения вышеперечисленных действий вы можете протестировать, работает ли новая конфигурация, запустив fc-list
и проверив наличие ненужных шрифтов:
fc-list | grep 'Noto'
Если вы хотите временно отключить конфигурацию, просто переименуйте файл:
mv ~/.config/fontconfig/conf.d/88-reject.conf ~/.config/fontconfig/conf.d/88-reject.conf.disabled
Заключение
Управление шрифтами в Xubuntu не обязательно требует удаления пакетов, от которых зависят другие компоненты системы. Используя Font Manager или настраивая конфигурации fontconfig, вы сможете оптимизировать список шрифтов без риска повредить вашу систему. Это не только упростит работу с текстами, но и улучшит производительность работы программного обеспечения с выбором шрифтов.