Настраиваем шрифты в xorg (FreeBSD и Linux)

шкрифты в linux и freebsdсли попытаться сравнить Windows и Unix-like системы в плане удобства для пользователя, пожалуй в первой десятке будет красота шрифтов. Для меня это очень важный пункт, так как за чёткими и аккуратными шрифтами можно и просидеть дольше без покрасневших глаз. Программирование, чтение руководств и блогов — всё это требует хороших шрифтов.

Но, как и почти всё в Unix, шрифты надо уметь настраивать.

Чем отличается хинтинг от антиалиасинга

Перед тем, как приступить к настройке шрифтов, нужно узать: а собственно что мы будем настраивать. В Убунте была вкладочка в окне настройки рабочего стола, где можно было потыкаться и на глаз всё настроить. Вы, в принципе, можете и здесь поступить так же, но потратите больше времени, чем на убунте и не узнаете почти ничего нового. Это не наш метод!

Рекомендую всем прочитать статью в Викиучебнике о шрифтах в Linux. На самом деле, не только в линукс, а во всём, что использует xorg. Например, так я настраивал шрифты в своей FreeBSD.

Параметры рендеринга шрифтов в картинках

Что такое хинты (hints):

что такое хинтыТо есть, по сути, хинты отвечают за «чёткость» или «корявость» шрифтов. Есть ещё и механизм автохинтинга (autohint), который работает не то, чтобы совсем плохо, но я его не использую:

автохинты в рендеринге шрифтовЧто такое антиалиасинг (anti-aliasing):

антиалиасинг шрифтов

По сути это «аккуратность» или «размазанность» шрифтов. Вещь полезная — в шрифтах исчезает «лесенка».

Субпиксельное сглаживание:

Суть довольно проста: экраны существуют разные, и технологии в них зашиты разные. В большинстве экранов каждой точке соответствует 3 субпиксела: для красного, зелёного и синего. Их комбинация — и есть точка, которую мы видим. Но вот как они расположены технологически, в каком порядке?

субпикселы в шрифтах

От этого также зависит отображение шрифтов на экране. В частности, при неправильном выборе конфигурации, появляется «радуга».

радуга в шрифтах

Ну вот, вроде и всё: все параметры перечислены, осталось только грамотно их задать.

Конфиг ~/.fonts.conf

Конфигурацию отображения шрифтов каждый пользователь может задать себе сам, отредактировав файл ~/.fonts.conf . Там всё довольно понятно:

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

    <!--
        install ==> print/freetype2
        install ==> x11-fonts/dejavu
        install ==> x11-fonts/webfonts
        install ==> x11-fonts/terminus-font
    -->

    <!-- reject all bitmap fonts, with the exception of 'terminus' -->
    <selectfont>
        <acceptfont>
            <pattern>
                <patelt name="family"> <string>Terminus</string> </patelt>
            </pattern>
        </acceptfont>
        <rejectfont>
            <pattern>
                <patelt name="scalable"> <bool>false</bool> </patelt>
            </pattern>
        </rejectfont>
    </selectfont>

    <!-- preferred aliases -->
    <alias> <family>serif</family>
        <prefer>
            <family>DejaVu Serif</family>
        </prefer>
    </alias>

    <!-- preferred aliases -->
    <alias> <family>sans-serif</family>
        <prefer>
            <family>DejaVu Sans</family>
        </prefer>
    </alias>

    <!-- preferred aliases -->
    <alias> <family>monospace</family>
        <prefer>
            <family>DejaVu Sans Mono</family>
            <family>Terminus</family>
        </prefer>
    </alias>

    <!-- default quality settings -->
    <match target="font">
        <edit mode="assign" name="rgba">      <const>rgb</const>     </edit>
        <edit mode="assign" name="antialias"> <bool>true</bool>       </edit>
        <edit mode="assign" name="autohint">  <bool>none</bool>       </edit>
        <edit mode="assign" name="hinting">   <bool>true</bool>       </edit>
        <edit mode="assign" name="hintstyle"> <const>hintmedium</const> </edit>
    </match>

    <!-- reduce ringing ==> requires freetype2 'WITH_LCD_FILTERING=yes' -->
    <match target="font">
        <edit mode="assign" name="lcdfilter"> <const>lcdlight</const> </edit>
    </match>

    <!-- disable autohinting for bold fonts -->
    <match target="font">
        <test compare="more" name="weight">   <const>medium</const> </test>
        <edit mode="assign"  name="autohint"> <bool>false</bool>    </edit>
    </match>

    <!-- disable autohinting for fonts that don't need it -->
    <match target="pattern" name="family">
        <test qual="any" name="family">
          <string>Andale Mono</string>
          <string>Arial</string>
          <string>Arial Black</string>
          <string>Comic Sans MS</string>
          <string>Courier New</string>
          <string>Georgia</string>
          <string>Impact</string>
          <string>Trebuchet MS</string>
          <string>Tahoma</string>
          <string>Times New Roman</string>
          <string>Verdana</string>
          <string>Webdings</string>
       </test>
       <edit mode="assign" name="hinting">  <bool>true</bool>  </edit>
       <edit mode="assign" name="autohint"> <bool>false</bool> </edit>
    </match>

</fontconfig>

Собствено, что тут происходит:

  • Во-первых, надо поставить пакеты, указанные в первом комментарии (здесь написаны относительные пути во FreeBSD’шных портах).
  • Настройка отображения шрифта Terminus — его я обычно использую в терминале.
  • Устанавливаю соответствие шрифтов по-умолчанию шрифтам из семейства DejaVu (клёвые шрифты, всем советую).

И вот как раз то место, что мы подробно обсуждали выше:

<match target="font">
    <edit mode="assign" name="rgba">     <const>rgb</const>       </edit>
    <edit mode="assign" name="antialias"><bool>true</bool>        </edit>
    <edit mode="assign" name="autohint"> <bool>none</bool>        </edit>
    <edit mode="assign" name="hinting">  <bool>true</bool>        </edit>
    <edit mode="assign" name="hintstyle"><const>hintmedium</const></edit>
</match>

Здесь:

  • rgba — это выбор типа отображения субпикселов на Вашем экране. Доступные константы: unknown, rgb, bgr, vrgb, vbgr, none;
  • antialias — включаем или нет сглаживание шрифтов (true или none);
  • autohint — автоисправление шрифтов. Значение опять же белевое, поэтому варианты те же: true и none;
  • hinting — включаем исправление растеризованного и масштабированного глифа или нет (true и none);
  • hintstyle — тип хинтинга. Возможные варианты: hintnone, hintslight, hintmedium, hintfull — по возрастанию степени хинтинга.

Ну и ещё настраиваем отображение жирных шрифтов и отключаем автохинтинг для шрифтов, которые в этом не нуждаются. Это можно было и не писать — автохинтинг мы всё равно отключили, но «пусть будет» — подумал я: «а вдруг кому пригодится».

Всё, теперь после перезагрузки иксов Ваши шрифты будут мягкими и шелковистыми!

Настройка шрифтов в Gtk приложениях

Рас уж зашёл разговор о шрифтах, бонусом ещё опишу настройку их для gtk приложений. Для того, чтобы в gtk программах использовались «правильные» шрифты нужно в файле .gtkrc.mine прописать определение этих «правильных» шрифтов:

style "user-font"
{
    font_name = "DejaVu Sans 9"
}
widget_class "*" style "user-font"
gtk-font-name = "DejaVu Sans 9"

Как я уже говорил, мне нравятся шрифты DejaVu — их и написал. А 9ый кегль смотрится довольно неплохо на моём мониторе.

Надеюсь, данная заметка помогла лучше понять галочки в Убунте, или даже сберегла пару глаз!

Мне понравилась эта заметка:
Другое:
  • гкд
Настраиваем шрифты в xorg (FreeBSD и Linux): 2 комментария
  1. Вы бы ещё скриншот сделали, как всё это будет выглядеть в итоге.

    Себе я шрифты вот так настроил: http://lampslave.ru/fontsconf/

  2. Не велите казнить. Глянул на рисунок с отверстиями (RGB), споткнулся о воспоминания. Кинескопы телевизоров и мониторов ранее не различались по виду отверстий. И те и другие требовали «сведения» лучей. Щелевидные отверстия появились уже в кинескопах с самосведением лучей. Ваш покорный слуга изготовил для этих целей генератор сетчатого, клетчатого, точечного полей и цветных полос. Вдобавок намотал петлю для размагничивания. В лихие 90е подарил всё товарищу, школьному учителю, для дополнительного прокорма.

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

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

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>