Next Previous Contents

4. X Window

Подобно консольному режиму, X Window также требует некоторой настройки. Настройка включает в себя настройку ввода и установку шрифтов для X Window. Данные действия обсуждаются ниже.

Для специфической информации касающейся вашего дистрибутива вам следует обратиться в раздел Кириллизация дистрибутивов.

4.1 Установка шрифтов для X Window

Прежде всего, вы должны достать шрифты, содержащие изображения кириллических символов в соответствующих местах. Следует отметить, что все современные дистрибутивы имеют KOI8-R шрифты, более-менее пригодные для использования, так что если xlsfonts не показывает их, то они просто не инсталлированы или не включены в X Font Path.

X Window включила набор KOI8-R шрифтов разработанных KOI8-R Cronyx, еще в конце 1995 года. Эти шрифты являются также частью XFree86.

Некоторые дистрибутивы (как правило очень старые) могут не включать кириллические шрифты для X Window - в этом случае их придется устанавливать самим.

Подробнее о шрифтах для X-window и о том где их можно найти смотрите в разделе Шрифты для X-window.

Более современную коллекцию шрифтов для X windows можно взять у Дмитрия Болховитянова по адресу пакет CYR_RFX.

Поэтому, вам следует проверить, установлены ли эти шрифты в вашей системе. Спросите системного администратора или, если вы- это он и есть, проверьте вашу систему сами, а именно:

  1. Выполните 'xlsfonts | grep koi8'. Если в результате выполнения команды появится список шрифтов, то ваш X сервер уже знает об их существовании.
  2. Или, наберите
    find / -name crox\*.pcf\*
    
    для того, чтобы найти местоположение шрифтов кириллицы в системе. Вы должны будете сделать эти шрифты доступными для X сервера, как - я объясню ниже.

Если вы не нашли таких шрифтов в вашей системе, то вы должны установить их сами:

  1. Вытащите по ftp соответствующий набор шрифтов. Подробнее о шрифтах для X-window и о том где их можно найти можно посмотреть в разделе Шрифты для X-window.
  2. Теперь, когда у вас есть шрифты, создайте директорию для них. Поместить новые шрифты в уже существующий каталог шрифтов, мягко говоря, не очень хорошая идея. Поместите их, например, в /usr/lib/X11/fonts/cyrillic для настройки всей системы или просто создайте каталог у себя только для персонального пользования.
  3. Если новые шрифты поставляются в формате BDF (*.bdf файлы), то вы должны скомпилировать их. Для каждого шрифта выполните:
    bdftopcf -o <font>.pcf <font>.bdf
    
    Можете сжать их с помощью программы gzip (очень старые X сервера не поддерживает сжатые шрифты):
    gzip *.pcf 
    
    Если же вы все-таки хотите поместить новые шрифты в уже существующий каталог шрифтов, то вы должны "срастить" старый и новые файлы с именем fonts.alias в том случае, естественно, если они оба существуют.
  4. В каждом каталоге шрифтов для X должен быть список шрифтов, находящихся в нем. Этот список хранится в файле fonts.dir. Вы не должны создавать этот список вручную. Вместо этого выполните:
    cd "директория где лежат шрифты"
    mkfontdir .
    
  5. Теперь надо сделать этот каталог шрифтов известным для X сервера. Здесь у вас есть ряд возможностей:
    xset +fp <новый каталог шрифтов>
    xset fp rehash
    
    Обратите внимание на опцию '+fp' - это означает, что новые шрифты будут добавлены в начале списка директорий со шрифтами. То есть, если прикладная программа запрашивает, скажем, шрифт fixed, то будет подставлен fixed font с кириллическими символами, чего мы и добивались. Если нужно установить шрифты в нескольких кодировках, то команда xset +fp с предпочтительной кодировкой должна быть после других.
  6. Теперь перезапустите X Window. Если вы все сделали правильно, то тесты, описанные в начале раздела, будут пройдены успешно. Также поиграйтесь с xfontsel (1x), чтобы удостовериться в вашей способны выбирать шрифты кириллицы.

Чтобы заставить X клиента использовать шрифты кириллицы, вы должны установить соответствующие X ресурс. Например, я делаю кириллический шрифт заданным по умолчанию в моем ~/.Xdefaults:

*font:         6x13

Так как мои шрифты кириллицы первые в списке поиска шрифтов (смотри вывод программы 'xset q'), то они и подставляются, если программа требует какой-либо шрифт с именем, совпадающем с каким-либо из шрифтов, лежащих в кириллической директории.

Вот простые примеры. Если вы хотите научить соответствующий X клиент пользоваться кириллическим шрифтом, то вы должны узнать тип ресурса, который вам надо изменить (это можно сделать, используя editres (1x)) и определить его или в базе данных ресурсов, или в командной строке. Например можно сделать так:

$ xterm -font '-cronyx-*-bold-*-*-*-19-*-*-*-*-*-*-*'

...запустит xterm с несколько уродливым шрифтом;

$ xfontsel -xrm '*quitButton.font: -*-times-*-*-*-*-13-*-*-*-*-*-koi8-*'

...установит Cyrillic Times шрифт для кнопки Quit программы xfontsel.

4.2 Использование шрифтов TrueType

У технологии TrueType, взятой на вооружение операционными системами серии Windows, нет многих недостатков, которые присутствуют при работе со шрифтами стандартным образом у X. Кроме того, существует множество кириллических TrueType шрифтов.

Подробнее о том где их можно найти можно посмотреть в разделе Шрифты TrueType.

К счастью, эти шрифты можно использовать и в X Window. Существует TrueType сервер шрифтов XFSFT для X. Поддержка TrueType встроена во все современные дистрибутивы XFree86.

Коммерческие X сервера уже довольно давно включили поддержку TrueType в свои дистрибутивы (Acelerated X, Metro X).

Установочная процедура сервер шрифтов довольно проста: делайте то, что сказано в документации.

Далее приводится пример того, как можно установить TrueType шрифты - о том как подсунуть их X Window - смотрите раздел Установка шрифтов для X Window

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


12 
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, имеющий всего две строки:


1 
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 - этот факт вы можете проверить, запустив xfontsel и поиграв с ttf семейством шрифтов.

4.3 Ввод с клавиатуры

В последних выпусках X (X11R61 и выше) имеются два "стандартных" способа ввода с клавиатуры: родной способ, работающий через утилиту xmodmap (см. раздел xmodmap) (сейчас это способ стремительно устаревает, хотя является надежным и хорошо изученным), и новый - Xkb или X KeyBoard (раздел Xkb).

Настройка Xkb

Полную и исчерпывающую (даже слишком исчерпывающую) документацию по настройке Xkb можно найти у Ивана Паскаля

Немного теории

При старте X-сервера, модуль XKB зачитывает все необходимые данные из текстовых файлов, которые образуют "базу данных"  настроек XKB.

Строго говоря, большинство из этих файлов сам модуль XKB не читает. Он вызывает программу xkbcomp, которая переводит содержимое этих файлов в двоичный формат, понятный непосредственно модулю XKB.

Но для настройки это не так уж важно, поскольку вызов xkbcomp происходит автоматически, незаметно для пользователя.

База данных, необходимых XKB, состоит из 5 компонентов

Все эти компоненты разложены по одноименным директориям в директории {XROOT}/lib/X11/xkb (в дальнейшем, я буду обозначать ее {XKBROOT}).

Весь набор компонентов, необходимых для настройки XKB, описывается в файле конфигурации X-сервера в секции Keyboard.

Настройка

Чтобы настроить XKB, в файле конфигурации X-сервера, надо задать параметры XkbRules, XkbModel, XkbLayout и, если вам нужно что-то не совсем стандартное - XkbVariant и XkbOptions.

Например,

XkbRules        "xfree86"
XkbModel        "pc104"
XkbLayout       "ru"
XkbVariant      "winkeys"
XkbOptions      "grp:shift_toggle"

означает, что XKB должен в соответствии с правилами, описанными в файле {XKBROOT}/rules/xfree86, выбрать настройки для клавиатуры типа "pc104" (104 кнопки), русского алфавита (английский алфавит будет включен "по умолчанию"), вариант - "стандартный" (то есть, этот параметр можно было не писать). Если у вас "windows"  клавиатура, то полезно указать XkbVariant как "winkeys", в противном случае оставьте эту опцию пустой - "". В самом конце идут дополнительные опции для вашей "раскладки клавиатуры" - "grp:shift_toggle".

Несколько практических рекомендаций.

Небольшое отступление - "о клавише - переключателе рус/лат".

Другие варианты смены кодировки:

  1. grp:toggle - переключение правым Alt,
  2. grp:shift_toggle - двумя клавишами shift,
  3. grp:ctrl_shift_toggle - ctrl+shift,
  4. grp:ctrl_alt_toggle - ctrl+alt.
  5. grp:switch - переключение по правому Alt только на момент нажатия
  6. ctrl:ctrl_ac - CapsLock

Когда был написан первый вариант этих рекомендаций, сама раскладка "русской"  клавиатуры (symbols/ru) включала в себя и "переключатель групп" - рус/лат, "подвешенный"  на клавишу CapsLock. С одной стороны это было удобно - в простейшем случае достаточно было выбрать "русскую раскладку"  и вы автоматически получали и клавишу для переключения "на русский". Но, с другой стороны, это было неудобно для тех, кто предпочитает в качестве переключателя рус/лат другую клавишу (или комбинацию клавиш). Конечно, выбрать другой переключатель не составляло труда, но при этом оставался и переключатель на CapsLock, что многим не нравилось. Для того, чтобы убрать его, надо было "залезть" в соответствующий файл и вручную подправлять соответствующую раскладку.

В конце концов (начиная с версии 3.3.4) сами разработчики XFree убрали этот "переключатель" из "русской раскладки". Но, в связи с этим появились и некоторые проблемы - теперь клавишу-переключатель надо явно "заказывать" при конфигурировании XKB.

Самый простой способ настройки - использовать программу для автоматической настройки X-window.

В XFree86 такая программа называется XF86Setup.

При этом "по умолчанию" используются "правила" (XkbRules) - xfree86. Вам нужно будет только выбрать "модель" (XkbModel), "схему" (XkbLayout) и "способ переключения групп" (переключатель "РУС/ЛАТ").

Кроме того, при желании вы можете изменить "положение клавиши Ctrl". Естественно, в конфигурации это будет выглядеть как соответствующие строчки XkbOptions.

Итак. Запустите программу XF86Setup, выберите раздел Keyboard. В этом разделе выберите из меню Model (тип клавиатуры) и Layout (язык). Не забудьте отметить в отдельных списках (в правой части) подходящий "переключатель групп" и, если хотите - "расположение Ctrl".

При выходе из программы она запишет соответствующие строчки в файл конфигурации XFree в секции Keyboard.

Для смены кодировки можно воспользоваться любой из многочисленных программ переключения кодовых страниц через xkb - например я пользуюсь программой xxkb Ивана Паскаля.

Offtopic: Если в файле /usr/X11R6/lib/X11/xkb/compat/iso9995 поменять

   indicator "Group2" {

на

   indicator "Scroll Lock" {

то в ответ на переключение регистра будет загораться лампочка Scroll Lock на клавиатуре.

xmodmap

Описанное ниже относится к относительно старым версиям X-Window (кто бы сказал к каким - заведомо к версиям меньшим 3.3.3) в которых способ Xkb (раздел Xkb) не работает.

В случае русификации через xmodmap первое, что вы должны сделать, это отключить Xkb!.

Чтобы отключить поддержку Xkb, в файле XF86Config изучите раздел Keyboard и закомментируйте все строки, начинающиеся с Xkb (регистр не имеет значения). Взамен добавьте следующую строку:

XkbDisable

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

Я настоятельно советую вам самостоятельно не разбираться с xmodmap, по крайней мере, для начала. Вы не получите ничего, кроме головной боли и разочарования. Вместо этого я рекомендую вам установить пакет xruskb, который позволяет вам сконфигурировать большинство входных параметров перекодировки без необходимости сталкиваться с xmodmap.

4.4 Нерусская кириллица для 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.

Если вам нужна поддержка cp1251, то вы столкнетесь с тем, что пока официальны XFree не поддерживает эту кодировку. Имеются три решения:

  1. Использовать дистрибутив поддерживающий cp1251 (напр. Mandrake Linux).
  2. Патчить XFree. Патч поддержки cp1251 для XFree 3.3.5 и 4.0 сделан Алексеем Новодворским.
  3. Идеологически неверное решение, но работает везде и легко осуществимо: Добавьте в конце файла locale.alias (обычно он находится в каталоге /usr/X11R6/lib/X11/locale) строку вида
    be_BY.CP1251            en_US.ISO8859-1
    
    Конечно вместо be_BY.CP1251 Вы можете поставить здесь строку для используемой Вами локали. (Однако имейте ввиду, что имеющаяся уже в этом файле строка о Болгарской локали bg_BG неверна и ее нужно удалить.)

Если для кириллизации клавиатуры используете метод через утилиту 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.


Next Previous Contents