Настройка рендеринга шрифтов в десктопных приложениях для FreeBSD и
большинства других операционных систем семейства Linux/Unix вызывала, вызывает и
будет вызывать множество споров. Если Microsoft Windows предоставляет всего
несколько опций, позволяющих изменить внешность шрифтов, то в случае Linux/Unix
возможности настройки шрифтов ограничены только вкусами и потребностями
пользователя (к сожалению, в некоторых заокеанских странах еще и лицензионными
соглашениями).
Постановка задачи
Необходимо настроить шрифты на десктопе с FreeBSD таким образом, чтобы:
во-первых, они выглядели, как минимум, не хуже чем в Microsoft Windows с
включенным сглаживанием ClearType (были четкими, сглаженными, ни в коем
случае не размазанными и не замыленными), во-вторых, чтобы все Веб-страницы,
просматриваемые в браузерах для FreeBSD, имели такие же пропорции, как при
просмотре в браузерах для Microsoft Windows (к сожалению, многие
Веб-разработчики "не слышали” о существование Linux/Unix, поэтому их творения
выглядят в среде FreeBSD отвратительно), ну и, в-третьих, необходимо обойтись
без шрифтов webfonts (в связи с различием алгоритмов
рендеринга эти шрифты никогда не будут выглядеть в FreeBSD также, как в
Microsoft Windows).
Исходные данные
Действия, описанные в данной статье, выполнялись на компьютере с
интегрированной видеокартой на базе контроллера Intel® 82G33, к которому был
подключен 17″ LCD-монитор Samsung SyncMaster 710v. Этот компьютер работал под
управлением операционной системы FreeBSD 8.0, оконной системы Xorg 7.4_3 и
графической оболочки KDE 4.3.5. Библиотеки рендеринга шрифтов пересобирались из
последних на начало марта 2010 года версий портов. После установки Xorg и KDE c
опциями по-умолчанию шрифты выглядели так (слабонервным ни в коем случае не
смотреть):
Установка и интеграция в систему шрифтов Liberation
Сразу отвечу на вопрос, почему именно Liberation . Потому, что шрифт Liberation Serif
метрически совместим со шрифтом Times New Roman, Liberation Sans – с Arial, а
Liberation Mono – с Courier New, соответственно. При этом в среде FreeBSD шрифты
Liberation выглядят гораздо симпатичнее своих аналогов из Microsoft Windows.
Шрифты Liberation могут быть установлены из порта liberation-fonts-ttf , однако, коллекция портов
содержит не самую последнюю их версию, в связи с чем я рекомендую выполнить
установку "вручную”. Для загрузки из официального репозитория и установки последней
версии шрифтов Liberation (в моем случае – версии 1.05.2 от 27 декабря 2009
года) необходимо выполнить следующую последовательность команд:
mkdir
/usr/local/lib/X11/fonts/Liberation
cd
/usr/local/lib/X11/fonts/Liberation
fetch
https://fedorahosted.org/releases/l/i/liberation-fonts/liberation-fonts-ttf-1.05.2.20091227.tar.gz
tar -xf
liberation-fonts-ttf-1.05.2.20091227.tar.gz
mv ttf/* .
rm -Rf
liberation-fonts-ttf-1.05.2.20091227.tar.gz ttf
mkfontscale .
mkfontdir .
fc-cache
-fs
После установки шрифтов Liberation следует изменить ряд опция в разделе
Шрифты модуля Внешний Вид , который находится на закладке
Основные окна Параметры системы . В частности, следует включить
Сглаживание , Межточечное сглаживание (наилучший режим
межточечного сглаживания зависит от типа используемого монитора) и Полный
хинтинг , а также установить в поле Использовать другой DPI
значение 96 dpi . Для того, чтобы в качестве псевдошрифтов Serif,
Sans-Serif и Monospace всегда использовались шрифты Liberation Serif, Liberation
Sans и Liberation Mono, необходимо подкорректировать два файла конфигурации
шрифтов, которые расположены в папке
/usr/local/etc/fonts/conf.avail. Резделы Serif
faces, Sans-serif faces и Monospace faces файла
45-latin.conf по умолчанию содержат ссылки на шрифты Liberation
Serif, Liberation Sans и Liberation Mono, однако, их следует перенести с третьих
мест после Bitstream Vera и DejaVu на первые:
Serif faces
-->
<alias>
<family>Liberation Serif</family>
<family>Bitstream Vera Serif</family>
<family>DejaVu Serif</family>
<family>Times New Roman</family>
...
</alias>
<!--
Sans-serif faces
-->
<alias>
<family>Liberation Sans</family>
<family>Bitstream Vera Sans</family>
<family>DejaVu Sans</family>
<family>Arial</family>
...
</alias>
<!--
Monospace faces
-->
<alias>
<family>Liberation Mono</family>
<family>Bitstream Vera Sans
Mono</family>
<family>DejaVu Sans Mono</family>
<family>Inconsolata</family>
...
</alias>
Разделы Serif, Sans-serif и Monospace
файла 60-latin.conf по умолчанию не содержат ссылки на шрифты
Liberation Serif, Liberation Sans и Liberation Mono, поэтому их необходимо
добавить, причем на первые места, как и в предыдущем случае:
<family>serif</family>
<prefer>
<family>Liberation Serif</family>
<family>Bitstream Vera Serif</family>
<family>DejaVu Serif</family>
...
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>Liberation Sans</family>
<family>Bitstream Vera Sans</family>
<family>DejaVu Sans</family>
...
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Liberation Mono</family>
<family>Bitstream Vera Sans
Mono</family>
<family>DejaVu Sans Mono</family>
...
</prefer>
</alias>
Для того, чтобы при отображении всех элементов интерфейса Mozilla Firefox,
Mozilla Thunderbird и остальных приложений, построенных на базе GTK2 , использовался шрифт Liberation Sans 10,
необходимо создать в домашней папке файл .gtkrc-2.0, имеющий
следующее содержимое:
{
font_name="Liberation Sans 10"
}
widget_class
"*" style "user-font"
gtk-font-name="Liberation Sans
10"
Для того, чтобы при отображении всех элементов интерфейса приложений пакета
OpenOffice.org использовались настройки
шрифтов, заданные в конфигурации KDE4, необходимо пересобрать порт
OpenOffice.org с опцией WITH_KDE4:
cd
/usr/ports/editors/openoffice.org-3
make
-DWITH_KDE4 -DWITHOUT_GNOME LOCALIZED_LANG=ru deinstall build install
clean
На этом установка и интеграция в систему шрифтов Liberation заканчивается.
Остается отключить ненужные более растровые шрифты, добавив в папку
/usr/local/etc/fonts/conf.d символическую ссылку на файл
/usr/local/etc/fonts/conf.avail/70-no-bitmaps.conf:
cd
/usr/local/etc/fonts/conf.d
ln -s
../conf.avail/70-no-bitmaps.conf
Если Вы не хотите отказываться от какого-либо растрового шрифта, например, от
шрифта Terminus , (на мой взгляд, он является лучшим
шрифтом для консольных приложений), необходимо добавить в файл
/usr/local/etc/fonts/conf.avail/70-no-bitmaps.conf следующие
строки:
<acceptfont>
<pattern>
<patelt
name="family">
<string>Terminus</string>
</patelt>
</pattern>
</acceptfont>
<rejectfont>
После выполнения всех действий, описанных в данном разделе, представленный
выше скриншот очень заметно изменился в лучшую сторону:
Пересборка библиотек Cairo и FreeType 2
В связи с возможными нарушениями авторских прав многие очень полезные функции
библиотек рендеринга шрифтов Cairo и FreeType 2 по умолчанию отключены. В связи с тем,
что патенты на данные функции действую на территории США, мы можем "нарушать” их
без зазрения совести. В настоящее время существует множество патчей для
библиотек Cairo и FreeType 2. Лично я пересобирал библиотеки согласно статье ClearType-сглаживание в Linux, или шрифты как в
Ubuntu , которая предлагает наложить один патч на Cairo и пять патчей на
FreeType 2. Также автор рекомендует пропатчить библиотеку libXft, однако, в моем
случае ее модификация не дала каких-либо заметных улучшений. В связи с тем, что
указанная статья написана достаточно подробно, мне остается только привести
список команд, позволяющих пересобрать библиотеки из портов FreeBSD:
cd
/usr/ports/graphics/cairo
make deinstall
clean extract
cd
work/cairo-1.8.8
fetch
http://aur.archlinux.org/packages/cairo-cleartype/cairo-cleartype/cairo-1.2.4-lcd-cleartype-like.diff
patch -Np1 -i
cairo-1.2.4-lcd-cleartype-like.diff
cd ../..
make install
clean
cd
/usr/ports/print/freetype2
make deinstall
clean extract
cd
work/freetype-2.3.11
fetch
http://aur.archlinux.org/packages/freetype2-cleartype/freetype2-cleartype/bytecode.patch
\
http://aur.archlinux.org/packages/freetype2-cleartype/freetype2-cleartype/freetype-2.2.1-subpixel-disable-quantization.diff
\
http://aur.archlinux.org/packages/freetype2-cleartype/freetype2-cleartype/freetype-2.3.0-enable-spr.patch
\
http://aur.archlinux.org/packages/freetype2-cleartype/freetype2-cleartype/freetype-2.2.1-enable-valid.patch
\
http://aur.archlinux.org/packages/freetype2-cleartype/freetype2-cleartype/freetype-2.2.1-memcpy-fix.patch
patch -Np0 -i
bytecode.patch
patch -Np1 -i
freetype-2.2.1-subpixel-disable-quantization.diff
patch -Np1 -i
freetype-2.3.0-enable-spr.patch
patch -Np1 -i
freetype-2.2.1-enable-valid.patch
patch -Np1 -i
freetype-2.2.1-memcpy-fix.patch
cd ../..
make install
clean
На этом настройка шрифтов в десктопных приложениях для FreeBSD заканчивается.
Любителям красивых шрифтов (похожих на шрифты Microsoft Windows c включенным
сглаживанием ClearType или на шрифты Ubuntu), в число которых вхожу и я,
остается переключиться на Легкий хинтинг :
Почитателям строгих, максимально четких шрифтов (похожих на классические
шрифты Linux/Unix) лучше оставить Полный хинтинг :
Альтернатива пересборки библиотеки FreeType 2
Следует отметить, что альтернативой пересборки библиотеки FreeType 2,
позволяющей не нарушать патенты, является включение автохинтинга, однако, на мой
взгляд, с ним шрифты, особенно мелкие, выглядят значительно хуже. Если Вы все же
захотите попробовать автохинтинг, добавьте в папку
/usr/local/etc/fonts/conf.d символическую ссылку на файл
/usr/local/etc/fonts/conf.avail/10-autohint.conf для его
включения:
cd
/usr/local/etc/fonts/conf.d
ln -s
../conf.avail/10-autohint.conf
Достаточно часто после активации автохинтинга жирные шрифты становятся
безобразно жирными. Для того, чтобы отключить автохинтиг для жирных шрифтов,
необходимо добавить в файл
/usr/local/etc/fonts/conf.avail/10-autohint.conf следующие
строки:
<match
target="font">
<test
compare="more" name="weight">
<const>medium</const>
</test>
<edit
mode="assign" name="autohint">
<bool>false</bool>
</edit>
</match>
</fontconfig>
Заключение
Я искренне надеюсь, что рекомендации, содержащиеся в данной статье, помогут
Вам настроить шрифты в десктопных приложениях для FreeBSD или любой другой
операционной системы семейства Linux/Unix согласно Вашим вкусам и потребностям.
Я же обязательно продолжу свои эксперименты по переходу с Microsoft Windows на
FreeBSD и по мере возможности буду рассказывать о том, что получилось и не
получилось.