Проблема со шрифтами в GNU/Linux дистрибутивах

Теги

Любой пользователь Linux неизбежно сталкивается с необходимостью настроить отображение шрифтов в графической оболочке.

В UNIX-системах (например в Arch Linux) фактически стандартом стало использование графической системы X Window System (далее для краткости она обозначается просто как X или X11, по-русски часто говорят «иксы») для построения графических интерфейсов пользователя. X Window System обеспечивает базовые функции графической среды: отрисовку и перемещение окон на экране и взаимодействие с устройствами ввода: клавиатурой, мышью или тачпадом, например.

X Window System не определяет конкретные элементы графического интефейса, этим должны заниматься сами программы. По этой причине разные приложения даже в одной сессии X Window System могут выглядеть совершенно по-разному. X не является частью ядра операционной системы и выполняется как рядовая программа, однако обеспечивает ещё один дополнительный уровень, на котором базируется множество других приложений. 

Официальной реализацией X Window System является X.Org Server, это бесплатное и свободное программное обеспечение, поддерживаемое и контролируемое организацией X.Org Foundation. Этот программный продукт входит практически во все современные дистрибутивы операционных систем GNU/Linux. X-клиентом может выступать любое приложение, использующее Core Protocol, например, посредством библиотеки libX11.

FreeType, FreeType 2 — библиотека, которая используется для растеризации шрифтов и операций над ними. В частности, используется для отображения шрифтов в X11. FreeType не содержит своего API для вызова функций обработки графики (например, рендеринг цветного текста). Однако, библиотека значительно упрощает операции обработки текстов, предоставляя простой интерфейс доступа к содержимому файлов шрифта. 

После этой лирики выше, стоит отметить только одно... Наста*издело за 10+ лет работы в UNIX-системах :-) Как и в других ОС всегда есть проблемы с оборудованием, драйверами и тд. Но шрифты, и проблемы как были с 1990-х так и по сей день. Старый убогий FreeType и X11 уже настолько в этой проблеме себя исчерпали, что просто удалить и забыть как страшный сон. Такое ощущение что, для Linux пользователей, это как знак для отпугивания новых пользователей. Автора лично до сих пор раздражает очередной, новый Linux дистрибутив, после загрузки которого, хочется выключить сразу монитор. Да, есть проблемы с лицензиями и корпоративные условия, но за столько лет эту проблему не решают принципиально не в одном из известных дистрибутивов. После перехода на IPS мониторы, ужас автора начал расти еще больше... Нет, правда... Вы видели этот кошмар на IPS мониторе с максимальное коррекцией черного цвета? На днях одну из рабочих станций пришлось перенести на Arch Linux (Manjaro), и опять шрифты, ругаться по русски матом не красиво... Но, б*ядь как оно надоело :-)

Основная проблема это браузеры и приложения использующие реализацию на QT. В самом Arch Linux это еще больше плясок с "бубном". Откровенно скажу, автор работал бы всю жизнь в консоле как в 1989, но надо посмотреть как видит домохозяйка Маша ее заказанный контент... Поэтому приводится краткие заметки по настройки шрифтов в Arch Linux.

Перед тем как добавлять шрифты с основного репозитория Arch, выполняем следующие изуверство (одно дерево этот пакет есть в AUR репозитории, поэтому сделай сам).

Скопируй все шрифты из папки установленного Windows (C:/windows/Fonts) в свой каталог (например .Fonts).

Да, автор знает что у вас еще есть раздел с Windows, поэтому от нее только один. DLL и Шрифты.

Затем, обновите кэш fontconfig: 

# fc-cache -vf

Конечно обязательно зайдите на WiKi и прочтите дополнительную информацию. Теперь TrueType Microsoft готов и эмулировать рендеринг шрифтов Windows стало проще. 

Дополнительно установим набор из популярных шрифтов:

packman -S ttf-dejavu ttf-liberation ttf-carlito ttf-caladea ttf-nato

Теперь берите "бубен", зайдите в настройки Внешнего Вида, установите ваши шрифты, и смотрите какие приложения не подхватили новые шрифты, стучите в "бубен". 

Метод рендеринга шрифтов. Начиная с freetype2 версии 2.7 появились следующие варианты:

  • truetype:interpreter-version=35 # Classic mode (используется по умолчанию в freetype2 — 2.6).
  • truetype:interpreter-version=38 # Infinality mode (более кастомизируемая настройка использует встроенные Infinality патчи).
  • truetype:interpreter-version=40 # Minimal mode (используется по умолчанию в freetype2 — 2.7).
sudo nano /etc/profile.d/freetype2.sh

Меняем нижнюю строку:

export FREETYPE_PROPERTIES="truetype:interpreter-version=38"

Теперь создаём и редактируем файл настроек:

# sudo nano /etc/fonts/local.conf

Пример local.conf:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!--Этот файл должен быть тут: /etc/fonts/local.conf-->
<!--Составлено Malody для записи в блоге http://archlinux.org.ru/forum/topic/16691/ -->
<fontconfig>
<!-- Настройки отоброжения -->
  <match target="font">
       <edit name="antialias" mode="assign">
           <bool>true</bool>
       </edit>
       <edit name="autohint" mode="assign">
           <bool>false</bool>
       </edit>
       <edit name="embeddedbitmap" mode="assign">
           <bool>false</bool>
       </edit>
       <edit name="hinting" mode="assign">
           <bool>true</bool>
       </edit>
       <edit name="hintstyle" mode="assign">
<!--hintslight - для более "полных" шрифтов, hintsfull - для более тонких -->
           <const>hintslight</const>
       </edit>
       <edit name="lcdfilter" mode="assign">
           <const>lcddefault</const>
       </edit>
       <edit name="rgba" mode="assign">
           <const>rgb</const>
       </edit>
<!--Отключение хинтинга для Bold шрифтов-->
       <test name="weight" compare="more">
        <const>medium</const>
    </test>
    <edit name="autohint" mode="assign">
        <bool>false</bool>
    </edit>
   </match>
<!--Замена шрифтов MS на метрически совместимые ChromeOs https://wiki.archlinux.org/index.php/Metric-compatible_fonts -->
  <alias>
    <family>serif</family>
    <prefer><family>Tinos</family></prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer><family>Arimo</family></prefer>
  </alias>
  <alias>
    <family>sans</family>
    <prefer><family>Arimo</family></prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer><family>Cousine</family></prefer>
  </alias>
     <!-- Map specific families to CrOS ones -->
  <match>
    <test name="family"><string>Arial</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Arimo</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Helvetica</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Arimo</string>
    </edit>
  </match>
  <match> <!-- Метрически не совместимая замена -->
    <test name="family"><string>Verdana</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Arimo</string>
    </edit>
  </match>
  <match> <!-- Метрически не совместимая замена -->
    <test name="family"><string>Tahoma</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Arimo</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Times New Roman</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Tinos</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Times</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Tinos</string>
    </edit>
  </match>
  <match> <!-- Метрически не совместимая замена -->
    <test name="family"><string>Consolas</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Cousine</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Courier New</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Cousine</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Calibri</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Carlito</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Cambria</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Caladea</string>
    </edit>
  </match>
</fontconfig>

Правка файла Xresources:

# nano ~/.Xresources

Xft.dpi: 96

Xft.antialias: true

Xft.hinting: true

Xft.rgba: rgb

Xft.autohint: false

Xft.hintstyle: hintslight

Xft.lcdfilter: lcddefault

Заставляем xrdb прочесть наш конфигурационный файл:

# xrdb -merge ~/.Xresources

Если используете Gnome, Mate, Cinnamon, Budgie, то измените в настройках сглаживание с grayscale на RGBa.


Векторные шрифты чаще всего можно встретить в форматах TrueType, Type1, Type3, OpenType и METAFONT. 

 

Последние материалы