.
i-Type.ru
.
размышления о дизайне и типографике    
.
.
• Начало
• Статьи
• Календарь
• Энциклопедия
• Реклама на сайте

.

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

Управление шрифтами в 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)
freetypeTrueType (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

i-type.ru
end --›
  Copyright©1998-2010
Nikolay Dubina | Николай Дубина
реклама

Проект специализированного кафе на 100 мест | strzyzenie i wyczesywanie psow- Ursynow | Способы медитации смотрите на терапия-сознания.рф.