Рендеринг и сглаживание шрифтов в GNU/Linux, как в MS Windows 7

Мне очень нравится Microsoft’овский моноширинный шрифт Consolas, разработанный Luc(as)’ом de Groot’ом специально для технологии сглаживания ClearType. На мой взгляд, основное из преимуществ этого шрифта — это перечеркнутый нуль, сильно отличающийся от буквы «O». Ну и полная поддержка кириллицы, разумеется. Однако в некоторых дистрибутивах GNU/Linux с отображением текста с помощью этого и некоторых других шрифтов не всё так гладко, в прямом и переносном смыслах.


Шрифт Consolas, изображение взято с en.wikipedia.org
Шрифт Consolas, изображение взято с en.wikipedia.org

Перенесенные из MS Windows «*.ttf»-файлы шрифта никак не хотели отображаться у меня в Linux Mint 15 KDE, так же, как и в Windows 7. Субпиксельное сглаживание, применявшееся в этом дистрибутиве, постоянно «размазывало» текст, отображаемый этим шрифтом, делая его невероятно отвратным. Иногда было невозможно отличить жирный текст от нормального.

К счастью, немного погуглив в интернете, я наткнулся на замечательный проект infinality, энтузиасты из которого разрабатывают патчи для библиотеки freetype. Благодаря этому проекту можно не только улучшить качество рендеринга шрифтов, но и тонко настроить способ субпиксельного сглаживания: имеется несколько предустановленных схем, которые имитируют популярные технологии рендеринга текста в различных операционных системах.

Установка infinality

Установка патчей от infinality в debian-based дистрибутив довольно проста. С помощью команд, опубликованных ниже, добавляется репозиторий с патченными библиотеками, обновляется список доступных пакетов, устанавливается fontconfig-infinality и обновляется библиотека libfreetype6.

Инструкции по установке infinality в другие GNU/Linux дистрибутивы можно найти здесь:

После установки infinality, система нуждается в настройке. Для этого выполняем следующую команду:

sudo bash /etc/fonts/infinality/infctl.sh setstyle

После её выполнения вам будет предложено сменить стиль сглаживания шрифтов:

Просто набираем цифру, к примеру, в контексте этой статьи это «6», и нажимаем «Enter».
Для более тонкой настройки необходимо отредактировать файл «/etc/profile.d/infinality-settings.sh»:

sudo vim /etc/profile.d/infinality-settings.sh

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

Кстати, в Linux Mint 15 KDE и других дистрибутивах GNU/Linux, использующих в качестве «login screen» приложение mdm, всплыл очень интересный баг: при использовании патчей от infinality, mdm не стартует автоматически. И при запуске системы нас встречает голая консоль. Чтобы исправить это недоразумение, необходимо выполнить в терминале следующие команды:

И добавить в файл «~/.bashrc» строку, подгружающую настройки infinality:

echo -e '. /etc/infinality-settings.sh' >> ~/.bashrc

Если вы используете Linux Mint, обязательно выполните команды, написанные выше. Если любой другой дистрибутив, не использующий mdm, просто проигнорируйте их.

После всего этого можно перезагрузить систему и увидеть новое сглаживание, максимально приближенное к технологии ClearType, использующейся в Windows 7.

Результаты

Посмотреть на получившиеся результаты и сравнить их между собой можно в этой таблице:

Шрифт
Linux Mint 15 KDE default;
Use anti-aliasing: Enabled
Windows 7 default
Linux Mint 15 KDE infinality;
Use anti-aliasing: Enabled
Шрифт Consolas, 9 pt
Шрифт Consolas, в Linux Mint 15 KDE default; Use anti-aliasing: Enabled
Шрифт Consolas, в Windows 7 default
Шрифт Consolas, в Linux Mint 15 KDE infinality; Use anti-aliasing: Enabled
Шрифт Courier New, 9pt
Шрифт Courier New, в Linux Mint 15 KDE default; Use anti-aliasing: Enabled
Шрифт Courier New, в Windows 7 default
Шрифт Courier New, в Linux Mint 15 KDE infinality; Use anti-aliasing: Enabled
Шрифт Fira Mono, 9pt
Шрифт Fira Mono, в Linux Mint 15 KDE default; Use anti-aliasing: Enabled
Шрифт Fira Mono, в Windows 7 default
Шрифт Fira Mono, в Linux Mint 15 KDE infinality; Use anti-aliasing: Enabled
Шрифт Terminus, 9pt
Шрифт Terminus, в Linux Mint 15 KDE default; Use anti-aliasing: Enabled
Шрифт Terminus, в Windows 7 default
Шрифт Terminus, в Linux Mint 15 KDE infinality; Use anti-aliasing: Enabled

Для демонстрации рендеринга шрифтов в различных системах используется кросс-платформенная IDE — Qt Creator

Как видно из таблицы, infinality просто отлично справляется со своей задачей. Шрифт Consolas отображается практически так же, как и в Windows 7. Только линии немного толще. В Courier New междустрочные интервалы менее заметны, чем в Windows 7, хотя начертание букв практически одинаково. Свободный шрифт Fira Mono рендерится с большими междустрочными интервалами, из-за чего в GNU/Linux-системах он выглядит немного «разряженным». Ну а пиксельный Terminus, как и ожидаемо, рендерится во всех системах одинаково. Различия как всегда в междустрочных интервалах.

Удаление infinality

Для удаления infinality и его репозитория следует выполнить следующие команды:

Затем, для полного отката всех изменений следует установить стабильную библиотеку freetype из дефолтных репозиториев с помощью команды:

sudo apt-get install libfreetype6

Или с помощью команды:

sudo apt-get install libfreetype6 libfreetype6:i386

Если вы используете архитектуру x86_64. После удаления infinality не забудьте перезагрузить систему.

Полезные ссылки и советы

  1. Better Font Rendering In Linux With Infinality
  2. Fixed bug: mdm won’t start after installing infinality
  3. Firefox OS Typeface — по этой ссылке можно скачать свободные шрифты от Firefox, в том числе и Fira Mono.
  4. Terminus Font for Windows — скачать пиксельный шрифт Terminus с поддержкой кириллицы для Windows.
  5. Для установки шрифта Terminus в GNU/Linux дистрибутив, следует выполнить команду:
    sudo apt-get install xfonts-terminus
  6. Для исправления некорректного рендеринга шрифтов в GIMP, следует воспользоваться следующей инструкцией.
Manuals, Others

Комментарии: 22

  1. Перепробовал дюжину дистрибутивов в надежде хоть где нибудь увидеть нормальный шрифт на своем 24″ экране.
    (К слову сказать — во всеми хваленом Ubuntu 13.10 меня преследовало ощущение гигантизма! Нет, конечно, на моем 12.5″ ноуте выглядит красиво, но не на 24″.)
    Последняя надежда была именно на KDE от Mint.
    Но как оказалось и тут все не так радужно.
    Сделал всё по вашей инструкции, перезашел в систему — и о чудо! Родные шрифты — красивые во всех браузерах!!!!
    Спасибо огромное!!!!!!!! Наконец-то можно работать с удовольствием!

    1. Рад, что эта инструкция вам пригодилась. Да, к сожалению, в последней Ubuntu 13.10 на мониторах с большой диагональю шрифты выглядят просто ужасно.

  2. То, что получилось у меня в моей Debian Wheeze иначе, как чудо, назвать нельзя. Отображение шрифтов даже без дополнительных настроек стало таким великолепным, что переход на Linux с Windows на домашнем ПК сразу стал свершившимся и окончательным. Спасибо автору за прекрасную статью о фантастическом пакете.

      1. Конечно, могу прислать снимок экрана, только сообщите email или какой-нибудь другой способ доставки.

  3. с этим патчем у меня перестала нормально собираться wine (даже иногда глючит, если запусается)

    -> перешел на технологию «ClearType-сглаживание», все иделаьно в плане стабильности, работоспособности и внеш.вид, ренедринг действительно идеальный (как у ubuntu, шрифт читабельный, глаза не напрягаются)
    удачи

  4. только слепой не увидит что рендеринг отличается, причем не в лучшую сторону в случае убунту. Хочу шрифты точь-в-точь

    1. Хочу шрифты точь-в-точь

      К сожалению, Microsoft использует проприетарную технологию рендеринга шрифтов ClearType и повторить её «точь-в-точь» вряд ли будет возможно.
      Хотя, с момента написания этой заметки прошло два года, в проекте Infinality могло многое измениться, в т. ч. и ренедеринг «Windows 7» стать более удачным. Попробуйте посмотрите. Я уже давно привык и к дефолтным шрифтам GNU/Linux, и к немного изменённому ренедерингу в Windows 8/10, и даже к рыхлым и мохнатым шрифтам OS X. А потому не слежу за изменениями в проекте.

  5. Автору респект за эту статью. Уже почти год бился с этими шрифтами, много перепробовал разных способов, но результата не было. А тут сразу после перезагрузки не нарадуюсь. Даже в тех приложениях, которые установлены в wine — MS Word и т.д., шрифты стали отображаться отлично. Спасибо еще раз.

    1. Infinality устарел, лучше всего использовать новый Freetype, в котором уже есть патчи для нормального субпиксельного сглаживания.

    1. Насколько я знаю, новые версии FreeType, начиная с версии 2.7 содержат необходимые патчи, которые были в infinality. Здесь есть информация по этому поводу.

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

      Эта статья более неактуальна.

      1. Я сделал так: скачал deb пакеты с http://ppa.launchpad.net/no1wantdthisname/ppa/ubuntu/pool/main/f/fontconfig-infinality/ установил, правда смутило, что старье 2013 года. Дальше я сделал sudo bash /etc/fonts/infinality/infctl.sh setstyle и выбрал 6) и заработало я вижу разницу стало намного лучше. Правда я поставил виндовс шрифты перед этим. Tahoma в систему. И выставил настройки шрифта яндекс браузера как у меня на винде10, в том числе я установил моноширифный шрифт Consolas. Но я думаю это роли не играет. Интересно что будет если выбрать шрифты от 4) osx 5) osx2

        1. Интересно что будет если выбрать шрифты от 4) osx 5) osx2

          Будут «жирные» и «мохнатые» шрифты, примерно такие же, какими они рендерятся в macOS.

      2. А где найти FREETYPE_PROPERTIES? Да и какие настройки нужно делать, ведь с infinality есть пункт 6) win7 а в случае с freetype такого нету.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *