1

Я использую Debian с XFCE.

Поведение по умолчанию: нет совпадений или псевдонимов

Во-первых, позвольте мне показать поведение моей системы по умолчанию, когда ~/.config/fontconfig/fonts.conf не имеет совпадений или псевдонимов.

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
</fontconfig>

В этом случае fc-match выводит следующее для Courier и Consolas.

lone@debian:~$ fc-match Courier
n022003l.pfb: "Nimbus Mono L" "Regular"
lone@debian:~$ fc-match Consolas
DejaVuSans.ttf: "DejaVu Sans" "Book"

Пользовательское поведение: когда совпадение определено

Теперь у меня есть следующее в ~/.config/fontconfig/fonts.conf.

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <!-- Courier => DejaVu Sans Mono -->
    <match>
        <test name="family"><string>Courier</string></test>
        <edit name="family"><string>Deja Vu Sans Mono</string></edit>
    </match>

    <!-- Consolas => DejaVu Sans Mono -->
    <match>
        <test name="family"><string>Consolas</string></test>
        <edit name="family"><string>Deja Vu Sans Mono</string></edit>
    </match>
</fontconfig>

В этом случае fc-match выдает следующее.

lone@debian:~$ fc-match Courier
n022003l.pfb: "Nimbus Mono L" "Regular"
lone@debian:~$ fc-match Consolas
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"

Здесь мы видим, что система соблюдала мое правило замены для Consolas, но она не соблюдала мое правило замены для Courier. Почему выход fc-match Courier прежнему "Nimbus Mono L", а не "DejaVu Sans Mono"?

2 ответа2

3

Я знаю, что этот вопрос, скорее всего, устарел, но я натолкнулся на его собственный поиск решения для замены системной замены Arial на Liberation Sans, которая мне не понравилась на новом рабочем столе Kubuntu Xenial 16.04.

Если вы хотите переопределить замену fontconfig по умолчанию для вашего пользователя, возможно, вам интересно прочитать мой пост на Askubuntu: https://askubuntu.com/a/793363/306420

Краткое содержание

В современных системах fontconfig извлекает конфигурацию пользователя из ~/.config/fontconfig/fonts.conf или (лучше для разделения) ~/.config/fontconfig/conf.d

В моем случае я хотел, чтобы Firefox отображал текст с набором шрифтов CSS, который предпочитает Arial с использованием Noto Sans. Fontconfig по умолчанию настроен на использование Liberation Sans в качестве метрической вставки для Arial (/etc/fonts/conf.avail/30-metric-aliases.conf), который поначалу казался невозможным переопределить без изменения основных файлов конфигурации fontconfig.

После долгих поисков, проб и ошибок решение оказалось очень простым: переопределения соблюдаются, когда в упомянутых пользовательских каталогах они называются в соответствии с ожиданиями fontconfig в форме [0-9][0-9]*.conf (см. / Etc / fonts /conf.avail/50-user.conf и /etc/fonts/conf.d/README).

Моя рабочая конфигурация для переопределения Arial:

~/.config/fontconfig/conf.d/00-arial-noto.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <!-- Map Arial to Noto Sans instead of Liberation Sans
       (overrides /etc/fonts/conf.d/30-metric-aliases.conf) -->
  <alias binding="same">
    <family>Arial</family>
    <accept>
      <family>Noto Sans</family>
    </accept>
  </alias>
</fontconfig>

Проверьте с помощью fc-match Arial на консоли, как ваш пользователь, он должен вывести "Noto Sans" (или любой другой ваш конфиг) без дополнительных усилий.

Потратив полдня на выяснение всего этого, включая чтение приключенческих историй о смелых битвах в сферах fontconfig, я надеюсь, что это поможет другим.

0

Если вы ничего не изменили в конфигурации по умолчанию, файлы конфигурации шрифтов в /etc/fonts/conf.d/ не содержат ссылок на Consolas, поэтому для этого используются ваши настройки.

Тем не менее, они уже содержат записи для Курьера, совмещая их с Nimbus Mono L.

Таким образом, к тому времени, когда ваш файл fonts.conf будет проанализирован, Courier уже обработан, и больше нет Курьера для работы, только Nimbus Mono L.

Решения:

Либо работайте над шрифтом Nimbus Mono L в вашем файле fonts.conf.
Если ты пишешь

<match>
    <test name="family"><string>Nimbus Mono L</string></test>
    <edit name="family"><string>DejaVu Sans Mono</string></edit>
</match>

тогда fc-match Courier выдаст DejaVu Sans Mono.

Или удалите псевдонимы Courier из всех файлов .conf в /etc/fonts/conf.d.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .