Протокол X11, разработанный в середине 80-х годов, определяет взаимодействие между приложением и системой отображения графики. Приложения называется клиентом X11, а система отображения — сервером X11. Таким образом, вопреки сложившимся житейским представлениям, сервер X11 работает на компьютере или X-терминале пользователя, а приложение (клиент X11) может быть запущено как локально, так и удалённо.
Протокол X11 представляет шрифт как набор матриц из нулей и единиц (растров). Каждый шрифт имеет ряд характеристик (имя, размер, кодировка и т.д.). Сервер ищет требуемый приложением растр шрифта с запрошенными свойствами сам, при помощи своего шрифтового модуля, или обращается за ним к специальному серверу шрифтов, запущенному локально или удалённо. Таким образом, протокол X11 был изначально ориентирован на работу с растровыми (bitmap) шрифтами (PCF, BDF), при этом приложение (клиент) может лишь запрашивать шрифт, но само с его растрами не работает.
С ростом возможностей печатающих устройств, они стали использовать масштабируемые шрифты, задаваемые векторно, что позволило легко масштабировать их, а также осуществлять другие преобразования. Более того, при выводе на качественные устройства печати символы шрифтов отображаются не одним цветом, а оттенками цвета, что позволяет создать эффект сглаживания (антиалиасинга). UNIX™ прекрасно справлялся и справляется с красивой печатью масштабируемыми шрифтами при помощи знаменитых программ nroff (groff в варианте GNU), TeX, Ghostscript, но программы просмотра выходных форматов этих программ не пользуются шрифтовыми возможностями протокола X, ограниченного растром, а посылают серверу X уже сформированную картинку, что сильно замедляет работу и делает практически невозможным динамическое отображение текста в процессе набора или использование его в элементах интерфейса.
Для использования в оконной системе X масштабируемых шрифтов (Type1, TTF, Speedo), необходимо преобразовывать их символы (глифы) в растры. В свободной реализации X, XFree86, это делает либо сам сервер X11, собранный с библиотекой растеризации freetype1 (сейчас это более распространённый способ), либо сервер шрифтов. При этом существенно увеличивается количество доступных шрифтов, появляется возможность использовать для отображения и печати одни и те же шрифты, но вот качество отображения оставляет желать лучшего, так как на экране символ по-прежнему остаётся одноцветным, без полутонов, т.е. сглаживания.
Сглаживание шрифтов в XFree86, не модифицирующее протокол X11, было реализовано около двух лет назад. Для создания картинки из глифа использовалась библиотека freetype2 [1], для отрисовки её на экране с использованием, при возможности, аппаратной акселерации — расширение Render сервера X, а для управления шрифтами и взаимодействия с расширением Render — библиотека Xft1.
Важно, что картинка сглаженного глифа создаётся клиентом из шрифтов на стороне клиента, а расширение Render на стороне сервера X11 отрисовывает её, согласуя с фоном. При этом расширение Render аппаратно-зависимо и, к сожалению, существует не для всех видеочипов. Тем более его нет на стандартных X-терминалах. Вот почему сглаживание шрифтов, использующее библиотеку Xft1, работает не на всех системах.
Летом 2002 года Кейт Паккард (Keith Packard), автор новой концепции рендеринга для X и библиотеки Xft1, выпустил её новую, переработанную редакцию — Xft2. Кейт выделил библиотеку управления шрифтами клиента, назвав её fontconfig, а в Xft2 добавил возможность отрисовки на сервере X11 картинок сглаженных глифов даже в том случае, если расширения Render на нем нет. При этом, конечно, трафик между клиентом и сервером заметно возрастает.
Каталоги со шрифтами, управляемыми самим сервером X11, описываются в секции «Files» файла конфигурации /etc/X11/XF86Config-4 (здесь и далее приводится расположение файлов, принятое в ALT Linux). В каждом таком каталоге должен быть файл fonts.dir (созданный, например, при помощи утилиты mkfontdir для каталогов с растровыми шрифтами и утилитой ttmkfdir — для каталогов с TTF) с описанием шрифтов и, возможно, файл fonts.alias с альтернативными описаниями шрифтов каталога. Для того чтобы изменения в секции «Files» (равно как и в других секциях XF86Config) вступили в силу, требуется перезапуск сервера X11. В то же время, добавить или удалить шрифты в процессе работы можно при помощи утилиты xset [+|-]fp. В стандартной конфигурации XFree86 в ALT Linux непосредственное управление шрифтами сервером X не используется.
В большинстве современных дистрибутивов Linux для управления шрифтами X11 используется сервер шрифтов xfs. Для того, чтобы указать серверу X11 на необходимость обращения к серверу шрифтов, достаточно указать в XF86Config-4 его сетевой адрес и протокол доступа. В случае, если xfs запущен локально, в XF86Config-4 есть строчка
FontPath "unix/:-1"
в секции «Files». Каталоги со шрифтами перечисляются в /etc/X11/fs/config/. Самый удобный способ добавления/удаления каталогов шрифтов — утилита chkfontpath, которая изменяет файл настроек xfs и перезапускает сервер шрифтов.
Просмотреть шрифты, доступные системе, можно при помощи программы xfontsel.
Файл системных настроек шрифтов клиента, управляемых при помощи библиотеки fontconfig, ./etc/fonts/fonts.conf, представляет из себя файл в разметке XML. Его формат описан в man-странице fontconfig. Утилита fc-list позволяет увидеть список доступных шрифтов, а утилита fc-cache — пересоздать файлы описания fonts.cache-NN для каталогов со шрифтами. Утилита fontconfig позволяет управлять не только масштабируемыми, но и растровыми шрифтами в кодировке iso10646-1 (Unicode).
Система управления шрифтами на основе fontconfig позволяет пользователю легко добавлять новые шрифты без перезапуска серверов. Для этого достаточно разместить их в каталоге ~/.fonts и выполнить команду
fc-cache ~/.fonts
Шрифты станут доступны всем вновь запущенным приложениям, использующим fontconfig.
Утилита fontconfig используется не только приложениями, работающими с сервером X, но и, например, библиотекой печати gnome-print2. Унификация управления шрифтами, которую предлагает fontconfig, — одна из задач, которую предстоит решить в ближайшем будущем.
Свои средства подключения и настройки шрифтов имеют интерпретатор языка PostScript — GNU GhostScript, издательская система TeX, программы форматирования текстов groff и GNU enscript.
Расположение файла описания шрифтов GhostScript — Fontmap, а также каталогов со шрифтами, определяется системной переменной GS_LIB. В ALT Linux файл Fontmap находится в каталоге /etc/gs. Значение переменной GS_LIB удобно наблюдать в выводе команды gs -help.
В пакете teTeX-2.0, входящем в дистрибутивы Master и Junior, значительно улучшена и упрощена работа со шрифтами Type1. Именно они, а не шрифты Metafont, как ранее, являются основными в нашем пакете.
Основными растровыми шрифтами в distro являются шрифты misc из поставки XFree86, а также шрифты Дмитрия Болховитянова XFree86-cyr_rfx-75dpi в различных кириллических кодировках и шрифты XFree86-75dpi-unicode, созданные ASP Linux путём объединения шрифтов XFree86 и шрифтов Дмитрия Болховитянова.
Для правильной работы некоторых приложений с кириллицей важно, чтобы шрифты в требуемой кириллической кодировке стояли первыми в списке шрифтов xfs. При установке системы это требование соблюдается, но если вы изменили основную кодировку системы, то может понадобиться доустановить пакет шрифтов в новой кодировке и поменять порядок путей в /etc/X11/fs/config.
Свободные шрифты Type1 в distro стали основными шрифтами для приложений, использующих сглаживание (антиалиасинг). Современные версии библиотеки freetype2 позволяют обеспечить их качественный рендеринг.
Большинство приложений Qt/KDE и Gtk+2/GNOME 2 используют по умолчанию шрифты пакета urw-fonts с кириллическими глифами Валентина Филиппова. Эти же шрифты используются при печати из большинства приложений.
Мы рекомендуем также установить пакеты свободных шрифтов sharatype-fonts и dmtr40in-fonts, созданных Сергеем Шарашкиным (на основе шрифтов bitstream) и Дмитрием Сорокиным (оригинальный шрифт XlinSans).
Пакет шрифтов cm-super, созданный Владимиром Воловичем на основе шрифтов Ольги Лапко, является основным для нашего пакета teTeX, но, отчасти, может быть использован для отображения и печати. Система именования шрифтов в TeX и библиотеках, работающих со шрифтами Type1, отличается, потому большинство этих прекрасных шрифтов пока недоступны вне TeX.
Наконец, в Master включены декоративные шрифты проекта Vedi [2]. Они не свободные, но бесплатные для многих применений — не забудьте ознакомиться с их лицензией.
Если вы используете сглаживание, то в установке шрифтов True Type нет большой необходимости. В противном случае, можно установить пакет val-ttf, созданный Валентином Филипповым на основе urw-fonts.
По умолчанию сглаживание шрифтов включено в приложениях Qt/KDE, Gtk+2/GNOME и Mozilla. В WindowMaker, fvwm2, waimea, xjed оно также доступно, но по умолчанию выключено. В документации к соответствующим пакетам (/usr/share/doc/<имя пакета>-<версия>) вы можете прочитать о способах настройки шрифтов в этих приложениях.
Выключить сглаживание шрифтов в KDE и GNOME 2 можно через меню настроек этих систем, а также установив в «0» системные переменные QT_XFT и GDK_USE_XFT соответственно.
Мы настоятельно рекомендуем всем пользователям тщательно проверять любые шрифты, не входящие в комплект distro, перед их установкой в системные каталоги, используя пользовательскую установку при помощи xset [+|-]fp или fc-cache, как это было описано выше в этой главе.
Если шрифты уже проверены, то лучший способ их установки — сборка шрифтового пакета на примере пакетов, входящих в Master. Если со сборкой таких пакетов возникают проблемы, то можно обратиться за консультацией в наши списки рассылки.