КомпьюАрт

10 - 2010

Про шрифты с продолжением. Часть 7

Николай Дубина info@prodtp.ru

Управление шрифтами в X Window

X Window System, называемая также просто «Иксы», X или X11 — оконная среда для графических дисплеев. На момент написания обзора последней ее версией была  X11R8.0 от апреля 2010 года. Начало X было положено в Массачусетсском технологическом институте (MIT) в 1984 году. X была реализована как часть проекта «Афина» (Project Atthena), предоставлявшего вычислительную среду, функционирующую на разнотипном оборудовании. В X­среде за вывод информации отвечает сервер экрана (display server), а логику приложения предоставляют клиенты. Взаимодействие между ними является прозрачным для сети, поэтому сервер и клиент могут работать на разных машинах. Следует отметить, что термины «клиент» и «сервер» несколько отличаются от обыденного представления. Помимо вывода информации сервер обрабатывает ввод информации от различных устройств, таких как клавиатура, мышь, графический планшет и сенсорный экран.

X­среда предоставляет набор средств для приложений с графическим интерфейсом, но не определяет конкретный интерфейс пользователя. В Linux обычно можно выбирать между графическими оболочками KDE и GNOME, а также между несколькими другими оконными менеджерами. Поскольку X не определяет интерфейс пользователя, то эти среды и оконные менеджеры выглядят по­разному.

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

Долгие годы за работу со шрифтами отвечала встроенная система шрифтов X11 (core X11 fonts system). Последние версии X­серверов XFree86 (и X.Org) включают систему шрифтов Xft («X FreeType» library). Встроенная система шрифтов первоначально поддерживала монохромные растровые шрифты, но со временем была усовершенствована. Система Xft была разработана с учетом современных требований, включая сглаживание и субпиксельное растрирование (sub­pixel rasterization) и позволяет приложениям иметь всесторонний контроль над рендерингом глифов. Основное различие между этими двумя системами шрифтов состоит в том, что встроенная система работает на сервере, а Xft­шрифты обрабатываются клиентами, которые отсылают необходимые глифы серверу.

X первоначально использовала шрифты Type 1 (или Adobe Type 1) — формат описания шрифтов, разработанный в компании Adobe. Система Xft может работать с ними наряду со шрифтами OpenType, TrueType, Speedo и CID.

Сервер шрифтов xfs

Со встроенной системой шрифтов X11 X Server получает шрифты и информацию о них от сервера шрифтов. Сервер шрифтов xfs обычно запускается как демон (англ. daemon — в системах класса UNIX — служба, работающая в фоновом режиме без прямого общения с пользователем) при старте системы, хотя возможно запустить его как обычную задачу. Как правило, вы будете устанавливать сервер шрифтов в ходе установки X. Тем не менее, поскольку X является сетевым протоколом, имеется возможность получать шрифты и информацию о них через сеть, а не с локальной машины.

X­сервер шрифтов обычно использует конфигурационный файл /usr/X11R6/lib/X11/fs/config. Пример файла конфигурации шрифтов показан в листинге 1. Конфигурационный файл также может быть расположен в или связан с /etc/X11/fs.

Листинг 1. Пример /usr/X11R6/lib/X11/fs/config

# allow a max of 10 clients to connect to this font server

client­limit = 10

# when a font server reaches its limit, start up a new one

clone­self = on

 

# alternate font servers for clients to use

#alternate­servers = foo:7101,bar:7102

 

# where to look for fonts

#

catalogue = /usr/X11R6/lib/X11/fonts/misc:unscaled,

         /usr/X11R6/lib/X11/fonts/75dpi:unscaled,

         /usr/X11R6/lib/X11/fonts/100dpi:unscaled,

         /usr/X11R6/lib/X11/fonts/misc,

         /usr/X11R6/lib/X11/fonts/Type1,

         /usr/X11R6/lib/X11/fonts/Speedo,

         /usr/X11R6/lib/X11/fonts/cyrillic,

         /usr/X11R6/lib/X11/fonts/TTF,

         /usr/share/fonts/default/Type1

 

# in 12 points, decipoints

default­point­size = 120

 

# 100 x 100 and 75 x 75

default­resolutions = 75,75,100,100

 

# how to log errors

use­syslog = on

 

# don’t listen to TCP ports by default for security reasons

no­listen = tcp

Если внимательно вчитаться, то всё становится понятно без особого напряжения. Этот пример типичен для установки Linux на рабочую станцию, где сервер шрифтов не предоставляет шрифты по TCP­соединениям (no­listen = tcp).

Библиотека Xft

Библиотека Xft предоставляет функции, позволяющие клиентским приложениям выбирать шрифты по заданному образцу и генерировать глифы для отправки их на сервер. Образцы учитывают семейство шрифтов (Helvetica, Times и т.д.), кегль, начертание и множество других характеристик. В то время как встроенная система шрифтов позволяет клиенту найти лишь первый подходящий шрифт на сервере, Xft находит лучший шрифт по всем критериям и затем отсылает информацию о глифах на сервер. Xft взаимодействует с FreeType для создания картинки из глифа и с расширением RENDER сервера X, ускоряющим процесс рендеринга. Xft входит в состав текущих версий как XFree86, так и X.Org.

Примечание. Если ваш X­сервер работает через сеть и используется видеокарта, не поддерживающая расширение RENDER, то производительность сети в данной ситуации может создать проблемы и вы можете захотеть отключить сглаживание. Вы можете использовать команду xdpyinfo для просмотра информации о вашем X­сервере. Листинг 4 содержит часть информации, выводимой xdpyinfo. Поскольку объем информации, создаваемой xdpyinfo, велик, можно воспользоваться командой grep для поиска ‘RENDER’.

Листинг 2. Проверка наличия расширения RENDER программой xdpyinfo

[ian@lyrebird ian]$ xdpyinfo

name of display:    :0.0

version number:    11.0

vendor string:    The XFree86 Project, Inc

vendor release number:    40300000

XFree86 version: 4.3.0

maximum request size:  4194300 bytes

motion buffer size:  256

bitmap unit, bit order, padding:    32, LSBFirst, 32

image byte order:    LSBFirst

number of supported pixmap formats:    7

supported pixmap formats:

    depth 1, bits_per_pixel 1, scanline_pad 32

    depth 4, bits_per_pixel 8, scanline_pad 32

    depth 8, bits_per_pixel 8, scanline_pad 32

    depth 15, bits_per_pixel 16, scanline_pad 32

    depth 16, bits_per_pixel 16, scanline_pad 32

    depth 24, bits_per_pixel 32, scanline_pad 32

    depth 32, bits_per_pixel 32, scanline_pad 32

keycode range:    minimum 8, maximum 255

focus:  window 0x2000011, revert to Parent

number of extensions:    30

    BIG­REQUESTS

    DOUBLE­BUFFER

    DPMS

    Extended­Visual­Information

    FontCache

    GLX

    LBX

    MIT­SCREEN­SAVER

    MIT­SHM

    MIT­SUNDRY­NONSTANDARD

    RANDR

    RECORD

    RENDER

    SECURITY

    SGI­GLX

    SHAPE

    SYNC

    TOG­CUP

    X­Resource

    XC­APPGROUP

    XC­MISC

    XFree86­Bigfont

    XFree86­DGA

    XFree86­DRI

    XFree86­Misc

    XFree86­VidModeExtension

    XInputExtension

    XKEYBOARD

    XTEST

    XVideo

default screen number:    0

number of screens:    1

Примечание. Xft вместо встроенной системы шрифтов X требует внесения изменений в приложения, поэтому вы можете обнаружить, что некоторые приложения не используют преимущества улучшенного рендеринга шрифтов в Xft. На момент написания статьи примерами приложений, применяющих Xft, были Qt (используется в KDE), GTK+ (применяется в GNOME) и Mozilla 1.2.

Установка шрифтов

Существует два метода установки шрифтов: один для Xft и более сложный — для встроенной системы шрифтов X11.

Шрифты для Xft

Xft использует шрифты, расположенные в ряде хорошо известных каталогов шрифтов, а также в подкаталоге
.fonts домашнего каталога пользователя. Хорошо известные каталоги шрифтов включают подкаталоги /usr/X11R6/lib/X11/lib/fonts, как перечислено в разделе каталогов в /usr/X11R6/lib/X11/fs/config. Другие каталоги шрифтов могут быть заданы в разделе FontPath файлов XF86Config или xorg.conf (в зависимости от используемого вами X­сервера).

Модули работы со шрифтами X-сервера

Модуль

Описание

bitmap

Растровые шрифты (BDF, PCF, SNF)

freetype

TrueType (TTF, TTC), OpenType (OTF, OTC) и Type 1 (PFA, PFB)

type1

Альтернативная поддержка шрифтов Type 1
(PFA, PFB) и CID

xtt

Альтернативный модуль TrueType (TTF, TTC)

speedo

Шрифты Speedo(SPD)

Просто скопируйте ваши шрифты в пользовательский каталог .fonts или для применения во всей системе — в /usr/local/share/fonts. Сервер шрифтов должен выбрать новые шрифты и сделать их доступными при следующем запуске. Вы можете провести обновление без перезапуска сервера командой fc­cache.

Текущая технология работы со шрифтами в X использует загружаемые модули для поддержки различных типов шрифтов, как показано в таблице.

Если у вас возникли проблемы с установкой и применением шрифта, то проверьте журнал сервера (например /var/log/XFree86.0.log), чтобы убедиться в том, что соответствующий модуль был загружен. Имена модулей чувствительны к регистру. Для просмотра (и изменения) настроек X­сервера, включая путь к шрифтам, расположение конфигурационных файлов и журналов, вы можете использовать команду xset, как показано в листинге 3.

Листинг 3. Отображение настроек X­сервера командой xset

[ian@lyrebird ian]$ xset ­display 0:0 ­q

Keyboard Control:

  auto repeat:  on    key click percent:  0    LED mask:  00000000

  auto repeat delay:  500    repeat rate:  30

  auto repeating keys:  00ffffffdffffbbf

                        fadfffffffdfe5ff

                        ffffffffffffffff

                        ffffffffffffffff

  bell percent:  50    bell pitch:  400    bell duration:  100

Pointer Control:

  acceleration:  2/1    threshold:  4

Screen Saver:

  prefer blanking:  yes    allow exposures:  yes

  timeout:  0    cycle:  0

Colors:

  default colormap:  0x20    BlackPixel:  0    WhitePixel:  16777215

Font Path:

  /home/ian/.gnome2/share/cursor­fonts,unix/:7100,/home/ian/.gnome2/share/fonts

Bug Mode: compatibility mode is disabled

DPMS (Energy Star):

  Standby: 7200    Suspend: 7200    Off: 14340

  DPMS is Enabled

  Monitor is Off

Font cache:

  hi­mark (KB): 5120  low­mark (KB): 3840  balance (%): 70

File paths:

  Config file:  /etc/X11/XF86Config

  Modules path: /usr/X11R6/lib/modules

  Log file:     /var/log/XFree86.0.log

 

Если вам требуется дополнительный контроль поведения Xft, вы можете использовать либо общесис­темный (/etc/fonts/fonts.conf), либо пользовательский (.fonts.conf в домашнем каталоге пользователя) конфигурационный файл. Кроме того, вы можете включить или отключить сглаживание и управлять субпиксельным рендерингом (применяется на ЖК­дисплеях). Это XML­файлы. Поэтому вы должны убедиться в том, что после редактирования они остались корректными. За дополнительной информацией о содержании и формате этих файлов обратитесь к интерактивной справке.

Встроенные шрифты X11

Перед установкой шрифтов в формате Bitmap Distribution Format (BDF; двоичный формат распространения) желательно преобразовать их в Portable Compiled Format (PCF, переносимый скомпилированный формат) и сжать, используя gzip. После этого вы можете скопировать новые шрифты в каталог, например /usr/local/share/fonts/bitmap/, и затем выполнить команду mkfontdir для создания каталога шрифтов, который будет применяться сервером. Эти шаги показаны в листинге 4.

Листинг 4. Установка растровых шрифтов

[root@lyrebird root]# bdftopcf courier12.bdf ­o courier12.pcf

[root@lyrebird root]# gzip courier12.pcf

[root@lyrebird root]# mkdir ­p /usr/local/share/fonts/bitmap

[root@lyrebird root]# cp *.pcf.gz /usr/local/share/fonts/bitmap/

[root@lyrebird root]# mkfontdir /usr/local/share/fonts/bitmap/

[root@lyrebird root]# ls /usr/local/share/fonts/bitmap/

courier12.pcf.gz  fonts.dir

Обратите внимание на то, что команда mkfontdir создает файл fonts.dir.

Для установки масштабируемых шрифтов типа TrueType или Type1 требуется дополнительный шаг. После копирования файлов шрифтов в целевой каталог выполните команду mkfontscale а затем mkfontdir. Команда mkfontscale создаст перечень масштабируемых шрифтов в файле fonts.scale.

Теперь, когда вы задали каталог шрифтов и информацию по их масштабированию, вы должны указать серверу, где искать новые шрифты. Это осуществляется включением нового каталога в путь поиска шрифтов. Вы можете сделать это на временной (используя xset) или постоянной (включением записи FontPath в файл XF86Config или xorg.conf) основе. Для того чтобы добавить новый каталог растрового шрифта в начало списка поиска шрифтов, воспользуйтесь параметром +fp команды xset, как показано в листинге 5.

Листинг 5. Обновление пути поиска шрифтов командой xset

[ian@lyrebird ian]$  xset +fp /usr/local/share/fonts/bitmap/ ­display 0:0

Хорошей идеей (хотя это здесь не показано) является включение масштабируемых шрифтов перед растровыми, поскольку это приводит к лучшему их подбору. Для добавления каталогов в конец списка используйте параметр fp+. Аналогично параметры ­fp и fp­ приводят к удалению каталогов из начала и конца списка соответственно.

Вы можете сделать изменения постоянными, отредактировав XF86Config или xorg.conf. Вы можете добавить столько строк FontPath в раздел Files, сколько необходимо, — как показано в листинге 6.

Листинг 6. Изменение XF86Config или xorg.conf

Section «Files»

# RgbPath is the location of the RGB database.  Note, this is the name of the

# file minus the extension (like «.txt» or «.db»).  There is normally

# no need to change the default.

 

# Multiple FontPath entries are allowed (they are concatenated together)

# By default, Red Hat 6.0 and later now use a font server independent of

# the X server to render fonts.

 

        RgbPath      «/usr/X11R6/lib/X11/rgb»

        FontPath     «unix/:7100»

        FontPath     «/usr/local/share/fonts/bitmap/»

EndSection

[

Информацию о том, что еще вы можете изменить в конфигурационных файлах X, смотрите в интерактивном руководстве по XF86Config или xorg.conf.

Менеджеры шрифтов

Fonty Python

Относительно простой менеджер, позволяющий просматривать, искать в системе, устанавливать и удалять шрифты в форматах TTF, OTF, TTC и Type1. У автора нет личного опыта использования Fonty Python, но, судя по описанию, при установке и удалении шрифтов менеджер оперирует не самими файлами шрифтов, а линками на них.

Окно программы Fonty Python

Окно программы Fonty Python

Fontmatrix

Данный менеджер позволяет просматривать, каталогизировать, подключать, отключать по отдельности, группами или все сразу и собирать всю коллекцию в один файл. Всё это относится к шрифтам в форматах TTF, OTF и Type1.

Надо отметить поиск шрифтов по растровым образцам и метаданным PANOSE. При этом разработчики обещают тесную интеграцию с WhatTheFont для поиска по растровому образцу, потому что своего каталога обычно бывает мало.

Окно программы Fontmatrix

Окно программы Fontmatrix

Знатоки наверняка обратят внимание на функцию извлечения подмножества шрифтов из PDF. Суть ее заключается в том, что встроенные в PDF шрифтовые файлы с сохраненным подмножеством используемых глифов могут быть сохранены программой в файлы формата PFB с сохранением информации об авторском праве, а затем импортированы в каталог.

Доступны версии для Linux, Macintosh и Windows.

Font Manager

Программа для просмотра и установки шрифтов в GNOME. Она умеет просматривать установленные шрифты, сравнивать их, устанавливать и удалять, активировать и деактивировать шрифты, искать по ряду параметров и собирать шрифты в коллекции.

Окно программы Font Manager

Окно программы Font Manager

Конвертирование шрифтов

У технологии TrueType, взятой на вооружение операционными системами серии Windows, нет многих недостатков, присущих работе со шрифтами, стандартными для «Иксов». Кроме того, имеется множество кириллических TrueType­шрифтов. К счастью, эти шрифты можно использовать и в X Window. Существует TrueType­сервер шрифтов XFSFT для X. Поддержка TrueType встроена во все современные дистрибутивы XFree86.

Для того чтобы стандартные шрифты отображались в нужной нам кодировке (в данном случае для примера взята кодировка cp1251), в каталоге, где лежат TrueType­шрифты, необходимо создать два одинаковых файла (fonts.dir и fonts.scale) следующего вида:

timesi.ttf ­monotype­Times New Roman­medium­i­normal—0­0­0­0­p­0­microsoft­cp1251

timesbi.ttf ­monotype­Times New Roman­bold­i­normal—0­0­0­0­p­0­microsoft­cp1251

timesbd.ttf ­monotype­Times New Roman­bold­r­normal—0­0­0­0­p­0­microsoft­cp1251

times.ttf ­monotype­Times New Roman­medium­r­normal—0­0­0­0­p­0­microsoft­cp1251

couri.ttf ­monotype­Courier New­medium­i­normal—0­0­0­0­m­0­microsoft­cp1251

courbi.ttf ­monotype­Courier New­bold­i­normal—0­0­0­0­m­0­microsoft­cp1251

courbd.ttf ­monotype­Courier New­bold­r­normal—0­0­0­0­m­0­microsoft­cp1251

cour.ttf ­monotype­Courier New­medium­r­normal—0­0­0­0­m­0­microsoft­cp1251

ariali.ttf ­monotype­Arial­medium­i­normal—0­0­0­0­p­0­microsoft­cp1251

arialbi.ttf ­monotype­Arial­bold­i­normal—0­0­0­0­p­0­microsoft­cp1251

arialbd.ttf ­monotype­Arial­bold­r­normal—0­0­0­0­p­0­microsoft­cp1251

arial.ttf ­monotype­Arial­medium­r­normal—0­0­0­0­p­0­microsoft­cp1251

Кроме того, сюда же необходимо положить файл encodings.dir, имеющий строку вида:

microsoft­cp1251 /usr/X11R6/lib/X11/fonts/encodings/microsoft­cp1251.enc.gz

Если вам нужны эти шрифты в кодировке KOI8­R, то вместо microsoft­cp1251 следует писать koi8­r.

Отметим, что в случае кириллической настройки  при необходимости следует использовать опцию перекодировки:

xfstt ... —encoding koi8­r,windows­1251,iso8859­1

После этого новые шрифты будут доступны для X Window.

Возможно, найденные вами шрифты окажутся не в той кодировке, которая нужна вам. Для перекодировки BDF­шрифтов можно использовать программу trbdf из пакета trscripts. Она поддерживает кодовые страницы ibm855, ibm866, iso­8859­5, koi8­c, koi8­r, koi8­u, mac­cyrillic, mik, unicode и ecma­cyrillic. Символы, отсутствующие в исходной кодировке, аппроксимируются, так что ее можно использовать, например, для генерации шрифтов KOI8­U из KOI8­R.

Начиная с версии 4.0.3 XFree официально поддерживает кодировку cp1251. Если версия вашей XFree более ранняя, то поддержку cp1251 можно получить тремя способами:

  • использовать дистрибутив, поддерживающий cp1251;
  • патчить XFree. Патч поддержки cp1251 для XFree 3.3.5 и 4.0 сделан Алексеем Новодворским;
  • идеологически неверное решение, но работает везде и легко осуществимо: добавьте в конце файла locale.alias (обычно он находится в каталоге /usr/X11R6/lib/X11/locale) строку вида: be_BY.CP1251     en_US.ISO8859­1.

Конечно, вместо be_BY.CP1251 здесь можно поставить строку для используемой вами локали.

Если для кириллизации клавиатуры применяется утилита xmodmap, то этим всё и закончится. Если же вы захотите использовать Xkb­метод, то в клавиатурной раскладке вместо символических имен нужно указать коды символов согласно cp1251. Например, для белорусской раскладки вместо:

key <AD01> {  [  q   Q  ],

           [ Cyrillic_shorti, Cyrillic_SHORTI  ]  };

нужно применять:

key <AD01> {  [  q,  Q  ],

           [  0xe9,  0xc9  ]  };

Примечание. Только версии XFree после 4.0.0 поддерживают KOI8­U. Если у вас отсутствует поддержка KOI8­U, а вам нужна именно эта кодировка, то вы можете воспользоваться всем вышеописанным, где идет речь о cp1251.

Некоторые из приложений для Linux, такие как Star Office и LaTeX, не поддерживают шрифты TrueType, но поддерживают их в формате Type1. Тут можно выразить только большое сожаление по этому поводу, поскольку Linux с его поддержкой TrueType в ghostscript и наличием фонт­сервера для TrueType имеет всю необходимую инфраструктуру для обеспечения возможности работы с TrueType­фонтами. Итак, одной из утилит по преобразованию шрифтов является ttf2pt1. Суть ее работы состоит в том, чтобы преобразовать шрифты TrueType в формат Type1. Для этого надо лишь запустить утилиту из консоли:

ttf2pt1 ­b file.ttf name

для одного шрифта или:

for X in *.ttf; do ttf2pt1 ­b $X ${X%%.ttf}; done

в виде цикла для массива шрифтов.

Также в X Window для конвертирования шрифтов можно воспользоваться шрифтовыми редакторами FontForge и gbdfed. Но подробнее о них мы расскажем  в следующих номерах журнала.

КомпьюАрт 10'2010

Популярные статьи

Удаление эффекта красных глаз в Adobe Photoshop

При недостаточном освещении в момент съемки очень часто приходится использовать вспышку. Если объектами съемки являются люди или животные, то в темноте их зрачки расширяются и отражают вспышку фотоаппарата. Появившееся отражение называется эффектом красных глаз

Мировая реклама: правила хорошего тона. Вокруг цвета

В первой статье цикла «Мировая реклама: правила хорошего тона» речь шла об основных принципах композиционного построения рекламного сообщения. На сей раз хотелось бы затронуть не менее важный вопрос: использование цвета в рекламном производстве

CorelDRAW: размещение текста вдоль кривой

В этой статье приведены примеры размещения фигурного текста вдоль разомкнутой и замкнутой траектории. Рассмотрены возможные настройки его положения относительно кривой, а также рассказано, как отделить текст от траектории

Нормативные требования к этикеткам

Этикетка — это преимущественно печатная продукция, содержащая текстовую или графическую информацию и выполненная в виде наклейки или бирки на любой продукт производства