Назад Вернуться к оглавлению. Далее

24. Фонты и их использование в Linux

24.5. Ревизия фонтового хозяйства


Установлен ли фонт-сервер

Давайте начнем такую ревизию с проверки того, что корректно установлен фонт-сервер xfs. Вначале запустите команду:
        ps ax|grep xfs
Если xfs уже установлен в Вашей системе (в противном случае установите его), Вы должны увидеть строку примерно такого вида:
  401 ?        S      0:04 xfs -droppriv -daemon -port -1
По этой строке можно определить, какой порт использует эта программа. Этот же номер должен быть указан в строке вида
                FontPath "unix/:port_number"
в секции "Files" в конфигурационном файле X-сервера (в Red Hat это файл /etc/X11/XF86Config). Скорее всего секция "Files" в этом случае вообще содержит только одну строку FontPath, например, такую:
                FontPath "unix/:-1"
Впрочем. можно не искать файл /etc/X11/XF86Config, а выполнить команду:
                xset -q
в выводе которой Вы должны увидеть такие строки:
FontPath
         "unix/:-1"
Если перечень каталогов фонтов XFree86 содержит строку типа unix:/port_number, где port_number совпадает с номером порта, используемым программой xfs (Вы получили его по команде ps), то сервер xfs у Вас установлен корректно. В противном случае, Вы должны добавить ссылку на него в перечень каталогов фонтов XFree86 либо с помощью команд:
                xset fp+ unix/:port_number
                xset fp rehash
либо путем непосредственной корректировки файла /etc/X11/XF86Config и последующего перезапуска X Window.

Для редактирования файла /etc/X11/XF86Config Вы должны иметь права суперпользователя. Если Вы таких прав получить не можете, то для корректной установки фонт-сервера Вы должны обатиться к администратору.

Какие фонты имеются в Вашей системе

Давайте теперь посмотрим, какие фонты установлены в системе. Поскольку Вы уже знаете (загляните еще раз в FontPath), в каких каталогах находятся файлы фонтов, Вы можете непосредственно просмотреть эти каталоги. Но одного наличия файла с фонтом еще недостаточно для того, чтобы фонт был доступен для X-сервера. Для того, чтобы увидеть список фонтов, известных X-серверу, лучше воспользоваться командой xlsfonts, которая выводит на экран перечень таких фонтов. Если запустить ее с опцией -lll, то она дополнительно выдаст массу информации о каждом фонте. Перенаправьте вывод в файл :
    xlsfonts > fontlist
и Вы получите список доступных фонтов в файле fontlist.

Но для того, чтобы этот список прочитать, надо иметь представление о том, как именуются фонты. Без этого прочитать полученный файл fontlist будет очень трудно.

Существует стандарт консорциума X (X Consortium) на имена фонтов для X Window System, который называется X Logical Font Description Conventions (обычно упоминаемый как XLFD). Полное описание его дано в [10]. В соответствии с этим стандартом имя фонта состоит из 14 полей :

foundry (fndry) - производитель фонта (Adobe, Bitstream и т.п.);
family (fmly) - название семейства фонтов (например, Times);
weight (wght) - толщина (bold, demibold, medium);
slant (slant) - наклон (roman, italic, oblique);
set width (sWdth) - ширина (normal, condensed, double wide);
add style (adstyl) - стиль (serif, sans serif, decorated);
pixel size (pxlsz) - размер символа по вертикали (в пикселах, 0 означает масштабируемый фонт);
point size (ptSz) - размер символа по горизонтали;
resolutionX (resx) - разрешение по горизонтали;
resolutionY (resy) - разрешение по вертикали;
spacing (spc) - ширина символов (пропорциональный, моноширинный);
avg width (avgWdth) - среднее значение ширины глифов фонта;
registry (rgstry) - название стандарта на кодировку символов (koi8, iso8859);
encoding (encdng) - язык или кодовая страница (r, u).

Здесь в начале каждой строки указано наименование поля, затем (в скобках) сокращение этого наименования, используемое в программе xfontsel (о ней чуть ниже), после чего дается перевод (приблизительный) наименования поля. В скобках после русского перевода названия поля приводится по несколько примеров возможных значений этого поля, которые поясняют его назначение.

При задании конкретного фонта поля в его имени принято разделять дефисами. Приведем пару примеров имен в стандарте XLFD:

-adobe-times-medium-r-normal-*-14-140-75-75-p-74-iso8859-1
-misc-fixed-medium-i-semicondensed-*-13-120-75-75-c-60-koi8-r
-adobe-courier-bold-o-normal-*-10-100-75-75-M-60-iso8859-1
(если какое-то поле не определено, то в соответствующей позиции ставится звездочка; таким образом можно одной строкой задать множество фонтов).

В качестве параметра команде xlsfonts можно указать имя конкретного фонта или семейства фонтов (этой возможностью просто необходимо воспользоваться, если Вы задали опцию -lll, иначе масса полученной информации окажется слишком велика).

Но просмотр списка фонтов, выдаваемого командой xlsfonts, малоинформативен в том смысле, что при этом Вы не видите изображений символов, которые будет давать на экране данный фонт. В этом плане гораздо удобнее воспользоваться программой xfontsel, которая работает в графическом режиме и выводит в своем окошке изображения некоторых символов данного фонта, позволяющих представить себе, как будет выглядеть выводимый текст.

Эти две команды могут оказаться полезными, как для определения того, какие фонты уже имеются в системе, так и для проверки того, что новые фонты успешно установились. Я не буду здесь подробно описывать, как пользоваться этими командами. Воспользуйтесь соответствующими man-страницами или системой info.

На мой взгляд пользователь обычно руководствуется в выборе шрифта только следующими признаками из перечисленных выше: семейство фонтов (fmly), вариант фонта - жирный шрифт или обычный (wght), наклон (slant), ширина шрифта (sWdth), размер шрифта в пикселах (pxlsz), стандарт (rgstry) и язык (encdng).

Попробуйте выбирать разные значения этих параметров в программе xfontsel и Вы получите неплохое представление о том, какие фонты установлены в Вашей системе. Для русскоязычных пользователей просмотр стоит начать с двух последних полей. Задайте для поля rgstry значение koi8, а для поля encdng - значение r, и Вы увидите сколько русскоязычных фонтов в кодировке koi8-r у Вас установлено. Кириллические фонты задаются также значениями iso8859-5 в двух последних полях.

Кроме xlsfonts и xfontsel cуществуют еще несколько программ для просмотра установленных в системе фонтов.

Файлы fonts.dir, fonts.alias и fonts.scale

Если Вы последуете приведенному Выше совету и выполните команду
    xlsfonts > fontlist
а после этого пересчитаете число файлов в каталогах, перечисленных в FontPath, то скорее всего обнаружите, что в fontlist перечислено гораздо больше фонтов, чем имеется файлов с фонтами. Чтобы понять, почему это так, надо разобраться с файлами fonts.dir, fonts.alias и fonts.scale. Если Вы заглянете в любой каталог с фонтами, то найдете там по крайней мере файл fonts.dir, а может быть и два других: fonts.alias и fonts.scale. Для чего же они нужны?

Структура файла fonts.dir очень проста и из нее становится ясно, зачем этот файл нужен. Каждая строка файла fonts.dir (кроме первой) содержит имя одного из файлов с фонтом, содержащегося в том каталоге, где расположен данный файл fonts.dir, вслед за которым (после пробела или символа табуляции) указывается имя содержащегося в этом файле фонта. Пример:

koi12x24.pcf.gz -cronyx-fixed-medium-r-normal--24-170-100-100-c-120-koi8-u
Первая строка файла fonts.dir содержит число фонтов, перечисленных в этом файле (и, соответственно, имеющихся в данном каталоге с фонтами).

Файл fonts.dir совершенно необходим для того, чтобы X-сервер мог работать с фонтами. По-видимому (я могу судить об этом только на основании собственного опыта, поскольку в литературе такого описания не встречал), при запуске X-сервера или фонт-сервера на основе файлов fonts.dir из каталогов фонтов в оперативной памяти создается таблица доступных для системы фонтов.

Файл fonts.scale, по-видимому, задает список масштабируемых фонтов и необходим некоторым приложениям для корректной работы с такими фонтами. В большинстве случаев это либо точная копия файла fonts.dir, либо просто ссылка на fonts.dir. Естественно, что в каталогах с растровыми фонтами мы такого файла не найдем.

Файл fonts.alias - это еще один конфигурационный файл, оказывающий влияние на работу с фонтами. Уже по названию ("alias" - прозвище, кличка) можно догадаться о его назначении. Строки этого файла имеют следующий вид:
    синоним XLFD_имя_реального_фонта
При этом каждая строка должна оканчиваться только символом конца строки (must end with one linefeed) и владельцем файла должен быть суперпользователь.

Вот для примера первые строки из файла /usr/X11R6/lib/X11/fonts/misc/fonts.alias в системе Redhat :

fixed        -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
variable     -*-helvetica-bold-r-normal-*-*-120-*-*-*-*-iso8859-1
Слово fixed здесь является синонимом или ссылкой ('alias'). Каждый раз, когда запрашивается фонт 'fixed', будет фактически происходить обращение к фонту, указанному во второй колонке. Шрифт кажется маловат? Просто поменяйте имя, на которое дана ссылка этим определением.

Тот же самый принцип применим ко всем фонтам, включая TrueType. Более того, если у Вас не установлены фонты TrueType, Вы можете использовать этот же трюк для того, чтобы использовать какой-то из фонтов Type 1 вместо запрашиваемых приложением фонтов TrueType.

Маленькое ПРЕДОСТЕРЕЖЕНИЕ для тех, кто имеет привычку "сильно быстро делать": некоторые синонимы должны быть известны системем в любой момент времени ! В первую очередь это относится к синонимам "cursor", "fixed" и "variable" в каталогах /misc. Если таких строк в misc/fonts.alias нет или они указывают на несуществующий фонт, то графическая оболочка просто откажется запускаться.

Файл fonts.alias важен для некоторых приложений, которые не могут нормально обрабатывать данные, предоставляемые файлом fonts.scale. Самый характерный пример - Netscape. Без fonts.alias Вы можете столкнуться с тем, что Netscape будет отображать только фонты с размером символов от 0 до 12 точек. Создав корректный файл fonts.alias в каталоге с фонтами truetype, Вы получите возможность выбирать из большего числа вариантов в "Preferences/fonts" в Netscape. Вы можете также обнаружить, что если Вы зададите какой-то другой размер для масштабируемого фонта в пункте "Preferences" настроек, Netscape не запомнит эту установку. Наличие файла fonts.scale позволяет устранить и этот недостаток. Приведем небольшой пример. Предположим, что в файле fonts.scale имеются строки:

 arial.ttf   -monotype-Arial-medium-r-normal--0-0-0-0-p-0-ascii-0
 arial.ttf   -monotype-Arial-medium-r-normal--0-0-0-0-p-0-fcd8859-15
 arial.ttf   -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-15
 arial.ttf   -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-1

Это масштабируемые фонты, так что в их именах не указаны размеры. Поэтому в файле fonts.alias должны, соответственно, присутствовать строки:

-monotype-Arial-medium-r-normal--6-60-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--9-90-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--7-70-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--9-90-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--8-80-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--10-100-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--9-90-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--11-110-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--10-100-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--12-120-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--11-110-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--12-120-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--12-120-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--12-120-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--13-130-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--13-130-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--14-140-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--14-140-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--15-150-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--15-150-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--18-180-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--18-180-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--24-240-0-0-p-0-iso8859-1  -monotype-Arial-medium-r-normal--24-240-75-75-p-0-iso8859-1

После этого Netscape будет корректно масштабировать фонт Arial.

Обратите внимание на различие в размерах шрифта в правой и левой колонках. Например, в первой строке слева указан размер в 6 точек, а справа - 9 точек. С помощью этого приема удается преодолеть "склонность" Netscape к использованию слишком маленьких шрифтов. Просто подберите справа цифры в соответствии с Вашими вкусами.

Создавать файлы fonts.dir, fonts.scale и fonts.alias вручную - занятие не из простых. Поэтому разработаны специальные программки, которые запускаются в каталоге с фонтами и создают эти файлы. Файл fonts.dir в каталоге с растровыми фонтами можно создать с помощью команды mkfontdir.

Для создания файлов fonts.dir и fonts.scale в каталогах с фонтами Type1 надо воспользоваться утилитой type1inst. Это скрипт на языке perl, который автоматически создает файлы fonts.dir и fonts.scale, которые необходимы для того, чтобы X-ы могли использовать фонты. Рекомендации по установке и настройке этого скрипта Вы найдете в файле README, который поставляется вместе с пакетом.

Для фонтов True Type необходима своя утилита ttmkfdir, которую можно найти на многих сайтах с программным обеспечением для Linux. В Redhat эта утилита включена в состав rpm-пакета Freetype.

На странице Some Linux for Beginners Вы можете найти скрипт на языке python, с помощью которого можно создать файл fonts.alias.

Удаление ненужных фонтов

Когда я просмотрел с помощью программы xfontsel, какие фонты установлены в системе, я с удивлением обнаружил, что по умолчанию устанавливаются фонты с какими-то иероглифами (поскольку я не знаю ни китайского, ни японского, то не могу точно сказать, какому языку эти иероглифы соответствуют). Естественно, что появилось желание удалить эти ненужные фонты, хотя бы для того, чтобы не занимать зря драгоценное место на диске. Теперь, когда мы знаем, где эти фонты расположены (смотри перечень каталогов фонтов), а также как фонты именуются, удалить ненужные довольно просто.

Вначале давайте удалим фонты с иероглифами (если Вы не возражаете!). При работе с программой xfontsel я обнаружил, что иероглифы появляются на экране программы xfontsel тогда, когда в поле registry стоит комбинация jisx с какими-то еще цифрами. Перейдя в каталог /usr/X11R6/lib/X11/fonts/misc я просмотрел файл fonts.dir, который устанавливает связь между именами фонтов и именами файлов, в которых хранятся соответствующие фонты. С помощью этого файла нужно найти имена файлов с иероглифами и удалить их. После этого надо запустить команду mkfontdir, которая подкорректирует файл fonts.dir. Можно, конечно, и просто вручную удалить из fonts.dir строки, соответствующие удаленным файлам. Только не забудьте, что первая строка файла fonts.dir должна указывать число разных вариантов фонта (не файлов в каталоге, а практически умньшенное на единицу число строк в файле fonts.dir).

Кроме фонтов с иероглифами, которые являются просто самым характерным примером, имеются еще множество фонтов, которые Вы, скорее всего, никогда не будете использовать. Но тут я не буду давать советов (я и о фонтах с иероглифами рассказал только для примера), экспериментируйте на свой страх и риск.


Назад Вернуться к оглавлению. Далее

В.А.Костромин
Последние изменения
в содержание файла внесены
12 января 2001 г.