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

Итак, друзья, в моей жизни произошло поворотное событие. Эта своеобразная точка бифуркации, сулила мне или отказ от старого, удобного и привычного инструмента — 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, но со временем я понял, что это лишь временное решение и нельзя игнорировать проблему вечно.

Так же рекомендую прочитать статью продолжающую мой цикл о линукс под названием: Linux mint 19 Tara системные требования (Xfce, Cinnamon, Mate) 

В поисках решения перечитал множество различных ресурсов и википедий, выбрав для себя алгоритм замены 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

Приводя его к виду:


<?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. После всего проделанного перезагружаемся или просто убиваем иксы ctrl+alt+backspace.

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

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

  1. Ничего особо не изменилось. Как были шрифты говно так и остались… Manjaro kde 18.0

    • Сложно ответить на подобный комментарий 🙂 Мне этого было достаточно для моего вкуса, поищите варианты получше если найдёте, поделитесь с радостью пополню свою копилку знаний

  2. xrdb -merge ~/.Xresources
    xrdb: No such file or directory
    xrdb: can’t open file ‘/home/kurwa/.Xresources’

    Делаю все как написано, чяднт?

    • а вы nano ~/.Xresources делали?
      без sudo?

      Вы же сначала этот файл создаете с указанным содержимым, а потом его применяете

        • Xft.dpi: 96
          Xft.antialias: true
          Xft.hinting: true
          Xft.rgba: rgb
          Xft.autohint: false
          Xft.hintstyle: hintslight
          Xft.lcdfilter: lcddefault

          Эти параметры можно выставить через GUI настройки вашего DE

          • Спасибо, разобрался. Неправильно выставил настройки. Спасибо за инструкцию!

  3. Лучше бы написали, как сделать человеческую прокрутку роликом мыши без модулей и танцев с бубном

  4. Автору спасибо!
    Шрифты стали ГОРАЗДО ЛУЧШЕ!!
    Правда еще немного тошнотворные шрифты остались в наименованиях вкладок браузеров. Но в целом очень и очень даже неплохо!

  5. Автор — суперкрасавчик!
    Всё стало обалденно красиво, прям большущее спасибо!
    Система Arch+i3

  6. Извините, ваша инструкция ещё актуальна в 2021 году?
    У меня получается так:

    xrdb -merge ~/.Xresources
    xrdb: No such file or directory
    xrdb: can’t open file ‘/home/user/.Xresources’

    Заполнял содержимое файла через nano ~/.Xresources без sudo. Файл Xresources создался и лежит в домашней папке. Даже перезагружал систему. Но всё равно xrdb не видит файл ~/.Xresources

    В DE MATE выставлены следующие настройки:
    Точек на дюйм (DPI): 96
    Сглаживание: полутона
    Уточнение: Слабое
    Порядок субпикселов: RGB

    Других настроек шрифтов нет.

    Спасибо!

  7. Понятно,ещё хотел спросить вот эти несколько шрифтов ttf-croscore ttf-dejavu ttf-liberation ttf-carlito ttf-caladea —noconfirm они обязательны? Как их в Debian добавить если я твоей инструкцией воспользуюсь.

    • А ты уверен, что у тебя плохо отрисовываются шрифты?
      Статья древняя, и сейчас со шрифтами во всех линупсах вроде бы получше, возможно уже и не стоит ничего ломать?

  8. Уверен,у меня все дистрибутивы настроены под себя,в сети множество инструкций но твоя более менее правдоподобная в частности твой конфиг мне понравился у меня вроде такого в KDE Neon и в LXLE сглаживание хорошо поднимал,сейчас у меня 2-й системой Deepin установлен и мой способ там уже не работает,поэтому хотел твоей методикой воспользоваться.

  9. Походу в Deepin нет Freetype,там своё что-то.По этому адресу /etc/profile.d/freetype2.sh нет такого исполняемого файла.А как вообще устанавливается эта конфигурация?

Leave a Comment