10 лет назад 10 июня 2008 в 16:19 66

Сделай себе красиво

Автор: Сергей Голубев

Система должна быть надежной, графический интерфейс – удобным, а шрифты – красивыми. Если по первым двум качествам пользователь Linux вряд ли имеет основания предъявлять какие-то претензии, то с последним дела пока обстоят не самым лучшим образом. Впрочем, все можно поправить – были бы руки на месте.

Справедливости ради хочу заметить, что отставание UNIX от продукции Microsoft в области всевозможных “красивостей” было не всегда. Во времена, когда царствовали мейнфреймы и мини-ЭВМ, именно на подключенных к ним терминалам пользователи выполняли свою повседневную работу – кто конструкторскую, кто программерскую… И никто особо не жаловался.
Это все я не в “Википедии” прочел, а своими глазами видел. Более того, когда во всевозможных тогда еще советских НИИ самого разнообразного профиля стали появляться первые PC, то более-менее творческий народ пересаживался на них без особой охоты. Причем среди них были не только физики, химики и прочие ботаники, но и пользователи графических станций, которые проектировали вполне осязаемые вещи.
Но потом, как известно, все радикально изменилось. Персональные компьютеры становились все популярнее (не столько в силу их высоких технических свойств, сколько по причине доступной цены), благородный UNIX этого перенести не смог и так и остался на мейнфреймах. Пока не появился вполне демократичный Linux, но к тому времени разрыв был уже достаточно велик.
Кстати, а как обстоит дело с динамикой? Может быть, вообще ничего делать не надо, а просто немного подождать, когда Linux догонит Windows и по качеству отрисовки шрифтов?
Идея, между прочим, вполне здравая. Если сравнить то, что было буквально года три тому назад с современным положением вещей, то вывод напрашивается сам собой. В ближайшее время системы непременно сравняются. Поэтому можно и подождать.
Но если вы путаете терпение с ленью, то начинать надо прямо сейчас. Ведь потом будет поздно – еще несколько обновлений, и вся работа потеряет смысл. Впрочем, я могу и ошибаться – футурология никогда не была моей сильной стороной. Поэтому на всякий случай попробуем настроить шрифты самостоятельно. Пригодится – хорошо, нет – ну и ладно.
Закончить вводную часть я хочу небольшой рекомендацией по чтению этой статьи. Шрифты, как и все, что имеет непосредственное отношение к дизайну, относится к субъективным категориям, на которые распространяется правило относительно вкуса и цвета. К тому же поскольку особой практической пользы от них нет (каким шрифтом не пиши про корову, она от этого не превратится в козу), то следует сопоставить результат с трудозатратами. Не всякий пользователь готов потратить на оптимизацию отображения буковок даже несколько часов. Поэтому статья не является одним связным руководством. Каждая глава более-менее независима от других. Вы можете использовать все приводимые тут советы, а если жаль времени, то пропустите те, которые вам кажутся слишком нудными.

ИСПОЛЬЗОВАНИЕ ШРИФТОВ WINDOWS
Некоторое облегчение может принести установка шрифтов, используемых в Windows. Взять их можно тремя способами.
Первый – скачать с сайта Microsoft. Правда, они там то появляются, то пропадают. Честно говоря, я даже затрудняюсь дать прямую ссылку, по которой их можно найти.
Второй – взять со страницы corefonts.sourceforge.net. Там лежит RPM-пакет со шрифтами, а заодно и опубликована инструкция по их установке.
Третий – скопировать из уже установленной системы Windows. Наверное, именно этот способ будет самым популярным, поскольку с технической точки зрения он самый простой. Правда, не знаю, что на это скажут юристы. На мой сугубо дилетантский взгляд, если пользователь заплатил за систему, то имеет право распоряжаться ее компонентами по своему усмотрению. Впрочем, пути законодателя неисповедимы.
Вопрос второй: какие именно шрифты следует перенести? Обязательный комплект: Arial, Comic Sans MS, Courier New, Tahoma, Times New Roman и Verdana. Остальное, на мой взгляд, совершенно не нужно. Конечно, не будет особого вреда, если подключить все возможные шрифты, но ведь все бесполезное вредно, не так ли?
Вопрос третий: как переносить? Проще всего пользователям KDE, в состав которого входит соответствующий инструмент – менеджер шрифтов. Найти его можно в разделе “Системные установки” Центра управления. Чтобы установить шрифты для всей системы, перейдите в администраторский режим и воспользуйтесь кнопкой “Добавить шрифты”.
Впрочем, можно обойтись и обычным копированием. Все шрифты, как правило, располагаются в каталоге usr/X11R6/lib/X11/fonts. Добавьте туда новый каталог и не забудьте прописать его в разделе FontPath файла etc/X11/xorg.conf.

СТРАШНЫЙ ЗВЕРЬ DPI
Допустим, вы подключили Windows-шрифты. Посмотрели и удивились. По каким-то неведомым причинам один и тот же шрифт одного и того же кегля в разных системах имеет разные размеры. Ну как тут не поверить в то, что программисты Microsoft встраивают во все объекты тайные модули, препятствующие их нормальной работе в других ОС?
Если кому-то нравится так думать, то дело ваше. Однако никакой мистики тут нет. Все дело в DPI. DPI (dot per inch) – это один из основных параметров изображений (в том числе и шрифтов). Он показывает число пикселей, умещающееся на отрезке длиной в дюйм. Для тех, кто это знает, ответ на вопрос очевиден – размер экрана известен, разрешение тоже. Остальное – арифметика.
Нужны подробности? Пожалуйста.
Чтобы узнать действующее значение DPI, надо в терминале набрать команду xdpyinfo | grep resolution. Запомните ее – она пригодится для контроля, когда мы будем искать оптимальное значение этого параметра.
Кстати, а каким оно должно быть? В Linux-системах использовались два значения DPI – 75 и 100. Одно, как нетрудно догадаться, для мелкого шрифта, второе – для крупного. Если вы зайдете в каталог со шрифтами, то обязательно найдете там две директории: 75dpi и 100dpi. Дань традициям, так сказать.
А вот в Windows ситуация иная. По умолчанию там используется три размера шрифтов: мелкий (DPI – 72), средний (DPI – 96) и крупный (DPI – 120). Обратите внимание, что все эти значения кратны двенадцати. С чем это связано, я объяснить не могу. Возможно, это просто счастливое число для Microsoft, и сотрудники компании использовали его при составлении алгоритмов. Тем не менее факт остается фактом. Попробуйте задать произвольные значения DPI в Windows, и ухудшение будет заметно невооруженным глазом.
Нас же интересуют только эти три числа: 72, 96 и 120. Запомните их – в дальнейшем пригодится.
Теперь нам предстоит выяснить размер экрана. Точнее, каким его видит подсистема XWindow. Для этого воспользуйтесь командой xdpyinfo | grep dimension. Вы получите значения как в пикселях, так и в миллиметрах. Очевидно, что они должны полностью совпадать с теми, которые вы сами вводили при настройке графического режима, если конфигурировали его вручную. Если же доверили это дело автоматике, то убедитесь в том, что она вас не подвела.
На этом вся подготовительная работа закончена, и можно приступить к заданию оптимального для вас DPI. Каким должно быть его значение? Если вы используете шрифты, входящие в XWindow, то 75 или 100. Для шрифтов, взятых из Windows, используйте одно из трех виндосовских значений. Попробуйте все по очереди. Которое больше понравится – то и ваше.
Остается одна проблема: как задать DPI? Предложу несколько решений – выбирайте то, которое понравится, или то, которое будет работать в вашей системе – понятно, что протестировать все методы во всех дистрибутивах у меня нет физической возможности. Вполне может получиться, что вы используете что-то совершенно экзотическое, и часть рекомендаций вам просто не подойдет (хотя это весьма маловероятно).
Самый простой способ выяснить, какое значение DPI вам больше подходит – запускать иксы из консольного режима и явно указывать величину этого параметра. Делается это командой startx — -dpi <значение>.
Причем делать это каждый раз при запуске графического режима следует только на этапе подбора. Когда оптимальное для ваших глаз значение будет найдено, то просто присвойте его параметру defaultserverargs, который расположен в файле usr/X11R6/bin/startx. Там должна быть такая строка: defaultserverargs=”-dpi <значение>”.
Если графический режим стартует при загрузке системы, то можно попробовать задать DPI при помощи менеджера входа. Для KDM следует открыть конфигурационный файл opt/kde/share/config/kdm/kdmr и в секции [X-*-Core] ввести строку ServerArgsLocal=-dpi <значение>. Для GDM нужно отредактировать файл etc/X11/gdm/gdm.conf. Там в секции [server-Standard] команда запуска должна выглядеть следующим образом: command=/usr/X11R6/bin/X -dpi NN. Наконец, при использовании XDM позаботьтесь о том, чтобы строка запуска сервера, которая находится в файле etc/X11/xdm/Xservers выглядела так: :0 local /usr/X11R6/bin/X -dpi <значение>.
Классический метод заключается в неявном указании DPI в файле etc/X11/xorg.conf. Там имеется секция “Monitor”, в которой содержится такая строка: DisplaySize www hhh. Как нетрудно догадаться, это размеры экрана в миллиметрах. DPI же будет получено в результате простой арифметической операции, которую система произведет без вашей помощи.
Впрочем, в этой секции допускается и явное указание. Для этого нужна следующая строка:
Option “DPI” “<значение>”.
Выбор пути – исключительно на ваше усмотрение.
Еще один способ указать DPI заключается в использовании fontconfig. Если она применяется в вашем дистрибутиве (а почти наверняка это так), то в конфигурационный файл etc/X11/Xresources впишите следующую строку: Xft.dpi: <значение>. Узнать, входит ли в систему fontconfig, можно при помощи простой команды xft-config –libs. Будут перечислены все библиотеки – вы сразу же увидите, есть она в списке или нет.

ВКЛЮЧЕНИЕ СГЛАЖИВАНИЯ
Казалось бы, что тут обсуждать? В Центре управления KDE, например, достаточно поставить галку в квадратике, и функция активирована. Однако все не так просто.
Дело в том, что в FreeType по умолчанию выключена одна функция, без которой использование антиалиасинга не может считаться полноценным. Почему это не сделали создатели дистрибутива? Потому что они ограничены некоторыми лицензионными соглашениями, нарушать которые не имеют права. Поэтому придется поработать самим.
Первым делом зайдите на сайт freetype.sourceforge.net и скачайте исходный код FreeType. Распакуйте полученный каталог и найдите файл ftoption.h. Отыщите строку с параметром TT_CONFIG_OPTION_BYTECODE_INTERPRETER и измените ее, чтобы она выглядела так:
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER.
Затем запустите компиляцию командой make.
Если вы хотите полностью инсталлировать пакет, то воспользуйтесь командой make install. Но этого можно и не делать, особенно если FreeType уже был установлен у вас в системе. Просто перепишите файлы libfreetype.a, libfreetype.la и libfreetype.so.* в нужный каталог. Этот вариант даже предпочтительней, поскольку не придется вносить изменения в базу данных установленных пакетов.
Перезапустите иксы. Нужная вам опция включена. Можете проверить результат – сглаживание стало работать несколько лучше.

ИСПОЛЬЗОВАНИЕ XFT
Xtf – библиотека, основанная на FreeType. Особенность этой технологии заключается в том, что она работает на стороне клиента и вообще не зависит от конфигурации X-сервера. Соответственно, шрифты там тоже задаются отдельно. Интересно, что использование Xft позволяет каждому приложению использовать собственную конфигурацию, в том числе и шрифты.
Настройки Xft хранятся в файле etc/fonts/fonts.conf. Каких-то графических инструментов для его изменения нет (или мне таковой неизвестен). Но устроен он достаточно просто – прямое редактирование вряд ли вызовет какие-то затруднения.
Например, чтобы указать путь к каталогам со шрифтами, надо воспользоваться следующей записью:

<каталог со шрифтом>. При этом указанный каталог будет просматриваться вместе с вложенными директориями, поэтому нет смысла раздувать этот блок до немыслимых размеров, помещая в него слишком много тэгов.
Допустим, вы захотите включить сглаживание для всех шрифтов, которые видит Xft. Для этого воспользуйтесь следующей конструкцией:

false

.
Ее содержимое достаточно прозрачно. Указывается свойство, которое будет изменяться (тэг ), и присваиваемое ему значение (тэг ).
Таким образом можно задать сколько угодно правил, отвечающих за отрисовку шрифтов. Их количество и функции ограничены только вашей фантазией. И, разумеется, не забывайте проверять результат на практике – все-таки нам нужна красота.
Напоследок позволю себе дать один довольно важный, на мой взгляд, совет. Красиво и так, как в Windows – это совершенно не одно и то же. Сумейте отделить реальную проблему от обычных трудностей адаптации, которые бывают при любой миграции. Хоть с Windows на Linux, хоть обратно.

Цитаты:

По каким-то неизвестным причинам один и тот же шрифт одного и того же кегля в разных системах имеет разные размеры

В FreeType по умолчанию выключена одна функция, без которой использование антиалиасинга не может считаться полноценным

Картинки:

fonts-main – Отрисовка шрифтов в системе Linux уже давно не вынуждает пользователя моментально выключить компьютер

gonts-kde – Проще всего подключить Windows-шрифты через Центр управления KDE

fonts-dir – В каталоге с шрифтами находятся две директории – 100dpi и 75dpi

fonts-xorg – Директории со шрифтами должны быть перечислены в файле etc/X11/xorg.conf

fonts-xft – Настройки Xtf хранятся в файле etc/fonts/fonts.conf.