Делаем красивые шрифты с новым freetype2 в Linux

Софт /
Софт: font freetype2 infinality
Итак, друзья, в моей жизни произошло поворотное событие. Эта своеобразная точка бифуркации, сулила мне или отказ от старого, удобного и привычного инструмента — infinality, в угоду новому freetype2, который, по моему мнению, не компенсировал все возможности infinality, или инерционное поедание кактуса со старым инструментом — infinality или вообще послать все эти ваши линупсы и уйти в ubuntu.

Началось всё с того, что в Manjaro Linux перестали работать репозитории bohoomil, собственно из которых, мною ставились патченные freetype2-infinality, fontconfig-infinality и cairo-infinality. И всё бы ничего, но с недавним обновлением в KDE, иксы отказывались стартовать, как выяснилось по причине несовместимости новых пакетов harfbuzz и harfbuzz-ico с патченными infinality файлами. Первым решением было заморозить обновление harfbuzz и harfbuzz-ico в /etc/pacman.conf, но со временем я понял, что это лишь временное решение и нельзя игнорировать проблему вечно.

В поисках решения перечитал множество различных ресурсов и википедий, выбрав для себя алгоритм замены infinality на стандартный freetype2. Оисанное ниже в первую очередь подходит для Arch-based дистрибутивов, но при желании легко реализуется и в других дистрибутивах, с некоторыми отличиями лишь в установочных командах.

Первым делом ставим freetype2, соглашаясь на удаление infinality патченных версий, если у вас таковые были установленны, если нет, то пропускаем это шаг(если установлены ubuntu патчи, то тоже выполняем этот шаг):
yaourt -S --asdeps freetype2 cairo fontconfig

Далее устанавливаем нужные, для приведения к красивости, шрифты:
yaourt -S ttf-croscore ttf-dejavu ttf-liberation ttf-carlito ttf-caladea --noconfirm

В двух словах опишу что это за шрифты:
  • ttf-croscore — шрифты из ChromeOS, они метрически совместимы с MS шрифтами, и уж точно не хуже их выглядят, содержат Arimo, Tinos, Cousine и прочие.
  • ttf-dejavu и ttf-liberation — базовые шрифты в Manjaro, и есть по умолчанию, насколько я знаю в любом DE, если ошибаюсь исправьте в комментариях.
  • ttf-carlito — метрически совместим с MS Calibri
  • ttf-caladea — метрически совместим с MS Cambria
Ну и теперь переходим к самому важному шагу, выбираем метод рендеринга шрифтов. Начиная с 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"

Да-да, тем самым мы выбрали infinality мод. Дефолтный вариант тоже не плох, можете попробовать, хотя в нём полностью игнорируются все инструкции горизонтального сглаживания и нет никакого субпиксельного сглаживания.
Теперь создаём и редактируем файл настроек, это мои настройки, опытным путём приведённые к понравившемуся мне виду, все параметры имеют комментарии, меняйте на своё усмотрение:
sudo nano /etc/fonts/local.conf

Приводя его к виду:
/etc/fonts/local.conf
Здесь был опубликован спойлер, чтобы его прочитать вам нужно просмотреть полную версию текста.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!--Размещаем здесь: /etc/fonts/local.conf-->
<fontconfig>
<!-- Настройки отображения -->
<!--antialias true  включаем устранение эффекта «зубчатости»-->
  <match target="font">
       <edit name="antialias" mode="assign">
           <bool>true</bool>
       </edit>
<!--autohint false  отключаем автохинт для лучшей чёткости в соответствии с настройками hinting ниже-->      
 <edit name="autohint" mode="assign">
           <bool>false</bool>
       </edit>
<!--embeddedbitmap false  отключаем встроенный растр-->           
  <edit name="embeddedbitmap" mode="assign">
           <bool>false</bool>
       </edit>
<!--hinting true  вкключаем хинтинг-->
       <edit name="hinting" mode="assign">
           <bool>true</bool>
       </edit>
       <edit name="hintstyle" mode="assign">
<!--hintslight - hintslight сделает шрифт более нечётким выстраивая по сетке, но сохранит лучше форму шрифта, в то время как hintfull сделает чётким шрифт, выровняет хорошо по пиксельной сетке, но больше потеряет форму шрифта-->
           <const>hintslight</const>
       </edit>
<!--lcddefault будет работать для большинства; lcdlight  для шрифтов, которые выглядят слишком жирными или нечеткими, lcdlegacy  оригинальный фильтр Cairo; и lcdnone чтобы отключить его полностью-->
       <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>
   </match>
<!--Замена шрифтов MS на метрически совместимые ChromeOS -->
  <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>
   <test name="family"><string>Georgia</string></test>
   <edit name="family" mode="assign" binding="strong">
   <string>Arimo</string>
    </edit>
 </match>   
  </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. После всего проделанного перезагружаемся или просто убиваем иксы ctrl+alt+backspace.

Принципиально не буду приводить то, как выглядят шрифты у меня, во первых потому, что сколько не сомтрел скрины в интернетах, мне всегда не нравится как выглядит, а когда делаю тем же способом, то на моём мониторе выглядят пристойно, потому дабы не отпугивать вас, просто делайте и настраивайте. А во вторых, у всех свои вкусы, и многим мои скрины придутся не по нраву, а моя неокрепшая психопатическая сущность, начнёт грубить в ответ, посему — хотите попробовать мои настройки пробуйте, если у вас не получается довести до приемлемого, лично вам, внешнего вида, значит кривизна ваших рук, имеет принципиальное не соответствие с кривизной вашей системы, старайтесь и у вас получится Ищущий да обрящет.
5 комментариев
nZemekis
А в рускоязычном Manjaro нет ничего о том, что bohoomil отвалились? Может и там как-то продублировать информацию?
manjarqo

сделал, пусть и не очень деликатно, но информация имеет место быть
jacobtey
хорошо, что не затер полностью.
ujmskazelinkml
А эти Коментарии в /etc/fonts/local.conf Удалить? или Оставить?
manjarqo
Не имеет значения, они же закоментированы, потому не читаются системоц
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.