Обеспечение доступа к шрифтам
Обеспечение доступа к шрифтам
Серверы шрифтов в основном предназначены для того, чтобы системный администратор мог, не затрачивая больших усилий, обеспечить доступ к шрифтам узлов сети, состоящей из компьютеров под управлением Linux и UNIX. (X-серверы в Windows, MacOS и других системах также иногда используют удаленные серверы шрифтов.) Для того чтобы обеспечить работу программ с использованием сервера шрифтов, необходимо выполнить два основных действия: задать пути к шрифтам для сервера шрифтов (эти пути отличаются от путей к шрифтам, задаваемых для X-сервера) и включить шрифты в соответствующие каталоги.
Указание путей к шрифтам
Пути к шрифтам задаются в конфигурационном файле сервера шрифтов (обычно это файл /etc/X11/fs/config или /etc/X11/fs/conf). Вместо ключевого слова FontPath, присутствующего в файле XF86Config, для указания шрифтов в файле config или conf используется ключевое слово catalogue. Пример записи, с помощью которой задаются пути к шрифтам, приведен ниже.
catalogue = /usr/X11R6/lib/X11/fonts/75dpi:unscaled,
/usr/X11R6/lib/X11/fonts/Type1,
/usr/X11R6/lib/X11/fonts/TrueType,
/usr/X11R6/lib/X11/fonts/75dpi
Запись catalogue может занимать несколько строк. Каталоги в списке разделяются запятыми. После последнего каталога запятая не указывается, что является признаком окончания списка. Если имя каталога сопровождается выражением :unscaled, это означает, что растровые шрифты, находящиеся в этом каталоге, могут использоваться только в том случае, если их размеры совпадают с требуемыми размерами шрифтов. При отсутствии ключевого слова unscaled обработка растровых шрифтов производится следующим образом: если имя шрифта совпадает с именем, указанным в запросе, а файл, содержащий битовые карты нужного размера, отсутствует, шрифт приводится к требуемому размеру путем масштабирования (при этом качество шрифта обычно получается невысоким). Подобные соглашения действуют также при описании путей к шрифтам в файле XF86Config. В приведенном выше примере сервер шрифтов использует растровый шрифт из каталога 75dpi только в том случае, если его размер строго соответствует размеру, указанному в запросе. Если найти битовые карты подходящего размера не удается, система продолжает поиск шрифта в каталогах Type1 и TrueType, а затем возвращается к каталогу 75dpi и масштабирует один из находящихся там растровых шрифтов.
Изменяя список, задаваемый с помощью ключевого слова catalogue, вы можете добавлять или удалять каталоги со шрифтами. Так, например, если вы хотите добавить набор шрифтов, скопированный из Internet или полученный на компакт-диске, то должны поместить файлы в каталог и включить его в запись. При инсталляции некоторых серверов в конфигурационном файле указываются каталоги, которые содержат шрифты, поставляемые вместе с сервером. Если эти шрифты вам не нужны, удалите путь к каталогу из списка. (При этом необходимо следить за тем, чтобы после последнего каталога в списке не было запятой.)
Включение шрифтов в каталог
Настройка сервера шрифтов предполагает создание файлов описания каталогов. Файл описания каталогов имеет имя fonts.dir, а его содержимое представляется в следующем формате:
число
имя_файла_шрифта1 XLFD1
имя_файла_шрифта2 XLFD1
...
Первая строка содержит число, которое указывает, сколько шрифтов описано в данном файле. Каждая последующая строка описывает один шрифт. Все строки, кроме первой, начинаются с имени шрифта (например, goodfont.ttf или t1f32.pfb). Файл шрифта с указанным именем должен присутствовать в каталоге.
Каждый шрифт Туре 1 реализуется в виде нескольких файлов. Файл PFB (Printer Font Binary — двоичный шрифт печати) содержит основную информацию о шрифте; имя этого файла обычно указывается в fonts.dir. Вместо PFB-файла вы можете задать в составе fonts.dir файл PFA (Printer Font ASCII — ASCII шрифт печати), в котором находятся те же данные, представленные в другом формате. Прочие файлы, определяющие шрифт, имеют расширения pfm, .afb и .afm. Эти файлы необходимы для того, чтобы сервер шрифтов мог предоставлять клиентам шрифты Туре 1.
Остальная часть строки представляет собой логический дескриптор шрифта (XLFD — X Logical Font Descriptor). Ниже приведен пример подобного дескриптора.
-bitstream-charter-medium-r-normal--0-0-0-0-p-0-iso8859-1
Логический дескриптор шрифта состоит из нескольких полей, разделенных дефисами (-). В полях дескриптора содержатся информация об изготовителе шрифта (bitstream); название семейства шрифтов (charter); "вес" шрифта (medium); сведения о том, представлены ли символы шрифта курсивом (r); ширина символов (normal); дополнительное имя стиля (в данном примере не используется); обобщенные данные о размере (строка, состоящая из нулевых значений, означает, что шрифт допускает масштабирование); сведения о том, является ли шрифт моноширинным или пропорциональным (p); средняя ширина (0 для масштабируемого шрифта) и кодировка (iso8859-1).
При составлении XLFD легко допустить ошибку, а в случае ошибки сервер не сможет предоставить шрифт клиенту. Поэтому для создания XLFD и даже для формирования всего файла fonts.dir предусмотрены специальные утилиты.
На заметку
Для поддержки семейства шрифтов серверу требуется несколько файлов. Предположим, что в текстовом процессоре используется шрифт Times и возникает необходимость выделять фрагменты текста полужирным шрифтом или курсивом. Разновидности шрифта Times по сути являются отдельными шрифтами, для их представления используются отдельные файлы шрифтов, а в файле fonts.dir создаются XLFD. Многие текстовые процессоры и подобные им программы могут имитировать курсив и полужирный текст, но гораздо лучшие результаты получаются при использовании специальных шрифтов, в особенности это относится к символам, представленным курсивом.
Утилита, позволяющая создавать файл fonts.dir на основании файлов шрифтов Туре 1, содержащихся в каталоге, называется type1inst. Эта утилита поставляется в составе многих дистрибутивных пакетов Linux, но по умолчанию она не инсталлируется. После установки данной программы надо сделать текущим каталог со шрифтами Туре 1 и ввести следующую команду:
# type1inst
Программа type1inst просматривает файлы шрифтов, извлекает имена шрифтов и другую XLFD-информацию и на основании полученных данных создает файл fonts.dir. Данная программа также оповещает пользователя о ходе обработки шрифтов, например, она может сообщить, что на данный момент создана 21 запись в файле fonts.dir, одна из них описывает шрифт, изготовителя которого не удалось определить. Файл fonts.dir, созданный программой type1inst, можно отредактировать вручную и удалить несоответствия, например, выявить файлы шрифтов, принадлежащие одному семейству, но созданные различными производителями. X-программы используют информацию, содержащуюся в файле fonts.dir, и игнорируют данные в составе шрифтов. Поэтому изменение некоторых деталей файлов шрифтов не влияет на работу этих программ. Несоответствия, о которых шла речь выше, могут привести к возникновению проблем, в частности, если информация о производителе не совпадает, то, запросив шрифт, клиент может получить ту или иную его разновидность.
Программа аналогичного назначения создана и для работы с шрифтами TrueType. Эта программа называется ttmkfdir и входит в состав библиотеки FreeType, используемой xfsft и XFree86 4.0. Программа ttmkfdir работает подобно программе type1inst, но позволяет задавать имя выходного файла посредством опции -о. Данная программа не включает в выходной файл сведения о шрифтах, в которых отсутствуют некоторые символы. Для того чтобы сведения об этих шрифтах были включены в выходной файл, необходимо задать опцию -с. Чтобы учесть изменения, внесенные в каталог со шрифтами, надо задать следующую команду:
# ttmkfdir -с -о fonts.dir
Если вы обнаружите, что при работе с некоторыми шрифтами возникают проблемы, вызовите эту же команду, но без опции -с. Список шрифтов станет короче, но оставшиеся в нем шрифты скорее всего будут работоспособны.
Внимание
Как было сказано выше, программы type1inst и ttmkfdir создают новый файл fonts.dir взамен существующего. Если вы добавляете шрифты в каталог, желательно создать резервную копию файла fonts.dir. Как вы уже знаете, автоматически созданный файл fonts.dir можно редактировать вручную. Копия файла поможет вам вспомнить, какие изменения уже были внесены в него.
После изменения файла fonts.dir необходимо остановить и снова запустить сервер шрифтов. Кроме того, надо либо перезапустить X-серверы, использующие сервер шрифтов, либо указать им на то, что список доступных шрифтов должен быть обновлен. Сделать это можно с помощью следующей команды:
# xset fp rehash
Если вы не сделаете этого, новые шрифты будут не доступны X-серверам. Если вы удалили шрифты и не оповестили об этом X-сервер, то при попытке получить отсутствующий шрифт, работа X-сервера будет приостановлена.