FreeBSD: Настройка шрифтов в десктопных приложениях
Настройка рендеринга шрифтов в десктопных приложениях для 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. Библиотеки рендеринга шрифтов пересобирались из последних версий портов (по мере появления новых версий библиотек я обновляю команды их пересборки). После установки 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, поэтому их необходимо добавить, причем на первые места, как и в предыдущем случае:
<alias>
<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, имеющий следующее содержимое:
style "user-font"
{
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 следующие строки:
<selectfont>
<acceptfont>
<pattern>
<patelt name="family">
<string>Terminus</string>
</patelt>
</pattern>
</acceptfont>
<rejectfont>
После выполнения всех действий, описанных в данном разделе, представленный выше скриншот очень заметно изменился в лучшую сторону:
Пересборка библиотек Cairo, FreeType 2 и libXft
В связи с возможными нарушениями авторских прав многие очень полезные функции библиотек рендеринга шрифтов Cairo, FreeType 2 и libXft по умолчанию отключены. С учетом того, что патенты на данные функции действуют на территории США, мы можем "нарушать" их без зазрения совести. В настоящее время доступно множество патчей для библиотек Cairo, FreeType 2 и libXft. Лично я пересобирал библиотеки согласно статье ClearType-сглаживание в Linux, или шрифты как в Ubuntu, которая предлагает наложить один патч на Cairo, пять патчей на FreeType 2 (написано позже: в связи с изменениями в последних версиях FreeType 2 можно обойтись наложением четырех патчей) и один патч на libXft. Если Вы не пользуетесь браузером Opera (лично меня все сильнее раздражает аппетит Mozilla Firefox), можно обойтись без пересборки библиотеки libXft. В связи с тем, что указанная статья написана достаточно подробно, мне остается привести список команд пересборки библиотек из портов FreeBSD:
cd /usr/ports/graphics/cairo make deinstall clean patch cd work/cairo-1.10.2 fetch http://www.sergeysl.ru/wp-content/uploads/freebsd/cairo-9999-cleartype.patch patch -Np1 -i cairo-9999-cleartype.patch cd ../.. make install clean cd ../../print/freetype2 make deinstall clean patch cd work/freetype-2.4.7 fetch http://www.sergeysl.ru/wp-content/uploads/freebsd/freetype-2.2.1-subpixel-disable-quantization.diff \ http://www.sergeysl.ru/wp-content/uploads/freebsd/freetype-2.3.0-enable-spr.patch \ http://www.sergeysl.ru/wp-content/uploads/freebsd/freetype-2.2.1-enable-valid.patch \ http://www.sergeysl.ru/wp-content/uploads/freebsd/freetype-2.2.1-memcpy-fix.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 cd ../../x11-fonts/libXft make deinstall clean patch cd work/libXft-2.1.14 fetch http://www.sergeysl.ru/wp-content/uploads/freebsd/libXft-2.1.14-lcd-cleartype.patch patch -Np1 -i libXft-2.1.14-lcd-cleartype.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> <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 и по мере возможности буду рассказывать о том, что получилось и не получилось.
Похожие статьи в рубриках ‘FreeBSD’ и ‘Десктоп с FreeBSD’
- FreeBSD: Устранение ошибок автоматического запуска сервера Akonadi
- FreeBSD: Flash в браузерах Mozilla Firefox, Chromium, Epiphany, Konqueror и Opera
- FreeBSD: Загрузка со второго жесткого диска с помощью NTLDR
- FreeBSD: Java в браузерах Mozilla Firefox, Chromium, Epiphany и Opera
- FreeBSD: Установка и начальная настройка десктопа с GNOME






Могу сказать только одно. Жаль что в интернете так мало таких хороших публикаций. Огромное вам спасибо!
На здоровье
Надобы обновить,вышли свежие версии,патчи соответственно не подходят.
Вчера делал
portupgrade -aRr, сегодня включил комп, шрифты не изменилисьМожет не обновилось дерево портов? У меня как минимум freetype обновился….
У меня вот так
pkg_info | grep freetype:freetype2-2.4.3 A free and portable TrueType font rendering engineДействительно сработало,видимо я на сайт заходил когда еще не был код обновлен,кстати,новый фритайп вышел в портах,жду обновления сайта
Готово (изменилась всего одна цифра)
Может эти пачти отправить разработчику порта,пусть включит через
make config, чтоб каждый раз не извращаться….Не получится. Они нарушают патенты в некоторых странах.
cairo-9999-cleartype.patchлежит теперь здесь.Поменяю код пересборки библиотек при следующем обновлении cairo.
Уже не лежит. В самое ближайшее время выложу здесь.
make deinstall clean patch– видимо опечатка. Отличный блог!Команда
make deinstall clean patchудаляет порт, качает дистрибутив, распаковывает его и накладывает патчи, которые входят в состав порта. А только потом накладываются патчи, о которых написано в статьеСпасибо
автор, скажите пожалуйста, а что конкретно делает эта команда?
make deinstall clean patchя так понимаю сначала порт удаляется, потом чистится… а зачем потом patch? ведь сам патч скачивается позднее и применяется понятным образом:
patch -Np1 -i cairo-9999-cleartype.patchда, и еще, а можешь переделать пожалуйста команды скачивания патчей не с твоего сайта, а из офиц. источника, так солиднее смотреться будет, и надежнее. заранее спасибо.
Уважаемый, Вы не умеете читать? Если умеете, то ответ на Ваш вопрос уже давно дан
К сожалению, Вы не правильно понимаете, не умеете культурно задавать вопросы и не любите читать документацию
Мы немного по-разному понимаем слова “солиднее” и “надежнее”. А где, кстати, этот самый официальный источник? Можно ссылочку? Или Вы способны только на словестный понос?
На здоровье
Хм… а ведь типичный такой пионер-задрот. Надеюсь, мое объективное наблюдение только улучшит мировоззрение автора, а не покалечит его самолюбие.
Всяческая гомосятина, типа Вас, меня абсолютно не смущает и никогда не смущала.
P.S.: Жди отключения от НовоТелекома. Я постараюсь, чтобы ты не пачкал Сеть своим присутствием.
Спасибо, пригодилось.
На здоровье!