Если выделить главные преимущества Unix-like систем перед Windows, то в первой десятке будет красота шрифтов. Для меня это очень важный пункт, так как за чёткими и аккуратными шрифтами можно и просидеть дольше без покрасневших глаз.
Программирование, чтение руководств и блогов — всё это требует хороших шрифтов.
Но, как и почти всё в 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 приложений (gtk2 — до сих пор на нём сижу :-p). Для того, чтобы в gtk программах использовались правильные шрифты, нужно в файле .gtkrc.mine прописать определение этих правильных шрифтов:
style "user-font" { font_name = "DejaVu Sans 9" } widget_class "*" style "user-font" gtk-font-name = "DejaVu Sans 9"
Как я уже говорил, мне нравятся шрифты DejaVu их и написал. А 9-ый кегль смотрится довольно неплохо на моём мониторе.
Надеюсь, данная заметка помогла лучше понять галочки в Убунте, или даже сберегла пару глаз!