Подобно консольному режиму, X Window также требует некоторой настройки. Настройка включает в себя настройку ввода и установку шрифтов для X Window. Данные действия обсуждаются ниже.
Для специфической информации, касающейся вашего дистрибутива, вам следует обратиться в раздел Кириллизация дистрибутивов.
Прежде всего, вы должны достать шрифты, содержащие изображения
кириллических символов в соответствующих местах. Следует отметить,
что все современные дистрибутивы имеют KOI8-R шрифты, более-менее
пригодные для использования, так что
если xlsfonts не показывает их, то они просто не установлены или не
включены в X Font Path
.
X Window включила набор KOI8-R шрифтов, разработанных Cronyx, ещё в конце 1995 года. Эти шрифты являются также частью XFree86.
Некоторые дистрибутивы (как правило, очень старые) могут не включать кириллические шрифты для X Window -- в этом случае их придётся устанавливать самим.
Подробнее о шрифтах для X-window и о том, где их можно найти, смотрите в разделе Шрифты для X-window.
Более современную коллекцию шрифтов для X windows можно взять у Дмитрия Болховитянова по адресу пакет CYR_RFX.
Поэтому вам следует проверить, установлены ли эти шрифты в вашей системе. Спросите системного администратора, или, если вы сами являетесь администратором, проверьте вашу систему сами, а именно:
xlsfonts | grep koi8
'. Если в результате
выполнения команды появится список шрифтов, то ваш X сервер уже знает
об их существовании.find / -name crox\*.pcf\*для того, чтобы найти местоположение шрифтов кириллицы в системе. Вы должны будете сделать эти шрифты доступными для X сервера, как -- я объясню ниже.
Если вы не нашли таких шрифтов в вашей системе, то вы должны установить их сами:
*.bdf
),
то вы должны скомпилировать их. Для каждого шрифта выполните:
bdftopcf -o <font>.pcf <font>.bdfМожете сжать их с помощью программы
gzip
(очень старые X сервера не поддерживает сжатые шрифты):
gzip *.pcfЕсли же вы все-таки хотите поместить новые шрифты в уже существующий каталог шрифтов, то вы должны "срастить" старый и новый файлы с именем
fonts.alias
в том случае, естественно,
если они оба существуют.
fonts.dir
.
Вы не должны создавать этот список вручную. Вместо этого выполните:
cd "директория где лежат шрифты" mkfontdir .
XF86Config
. Чтобы найти его расположение, просмотрите,
что скажет startx
при запуске (в RedHat этот файл обычно находится
в /etc/X11). Более подробно смотрите man XF86Config (4/5)
.xinit
. Добавьте новый каталог к
файлу запуска xinit
. Более подробно смотрите xinit(1x)
.~/.xinitrc
(им также может быть ~/.Xclients
или
~/.xsession
xset +fp <новый каталог шрифтов> xset fp rehashОбратите внимание на ключ '
+fp
' -- это означает, что новые
шрифты будут добавлены в начале списка каталогов со шрифтами. То
есть, если прикладная программа запрашивает, скажем, шрифт fixed
, то
будет подставлен fixed font с кириллическими символами, чего мы
и добивались. Если нужно установить шрифты в нескольких кодировках,
то команда xset +fp
с предпочтительной кодировкой должна быть
после других.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
.
У технологии TrueType, взятой на вооружение операционными системами серии Windows, нет многих недостатков, которые присутствуют при работе со шрифтами стандартным образом у X. Кроме того, существует множество кириллических TrueType шрифтов.
Подробнее о том, где их можно найти, можно посмотреть в разделе Шрифты TrueType.
К счастью, эти шрифты можно использовать и в X Window. Существует TrueType сервер шрифтов XFSFT для X. Поддержка TrueType встроена во все современные дистрибутивы XFree86, в частности сервер xfsft встроен в сервере шрифтов XFree86.
Коммерческие X сервера уже довольно давно включили поддержку TrueType в свои дистрибутивы (Accelerated 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
вместо xfsft
, то вам следует использовать опцию перекодировки:
xfstt ... --encoding koi8-r,windows-1251,iso8859-1
После этого новые шрифты будут доступны для X Window -- этот факт вы
можете проверить, запустив xfontsel
и поиграв с семейством
шрифтов ttf.
В последних выпусках X (X11R61 и выше) имеются два "стандартных" способа ввода с клавиатуры: родной способ, работающий через утилиту xmodmap (см. раздел xmodmap) (сейчас это способ стремительно устаревает, хотя является надёжным и хорошо изученным), и новый -- Xkb или X KeyBoard (раздел Xkb).
Полную и исчерпывающую (даже слишком исчерпывающую) документацию по настройке Xkb можно найти у Ивана Паскаля.
При старте X-сервера, модуль XKB зачитывает все необходимые данные из текстовых файлов, которые образуют "базу данных" настроек XKB.
Строго говоря, большинство из этих файлов сам модуль XKB не читает. Он вызывает программу xkbcomp, которая переводит содержимое этих файлов в двоичный формат, понятный непосредственно модулю XKB.
Но для настройки это не так уж важно, поскольку вызов xkbcomp происходит автоматически, незаметно для пользователя.
База данных, необходимых XKB, состоит из 5 компонентов:
<TLDE>= 49; <AE01> = 10;
Все эти компоненты разложены по одноименным директориям в
директории {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".
Небольшое отступление -- "о клавише-переключателе рус/лат".
Другие варианты смены кодировки:
Когда был написан первый вариант этих рекомендаций, сама раскладка "русской" клавиатуры (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
на клавиатуре.
Описанное ниже относится к относительно старым версиям X-Window (кто бы сказал, к каким? Заведомо к версиям, меньшим 3.3.3), в которых способ Xkb (раздел Xkb) не работает.
В случае русификации через xmodmap первое, что вы должны сделать, -- это отключить Xkb!
Чтобы отключить поддержку Xkb, в
файле XF86Config
изучите раздел Keyboard
и закомментируйте все строки,
начинающиеся с Xkb (регистр не имеет значения).
Взамен добавьте следующую строку:
XkbDisable
Программа xmodmap
позволяет настроить коды, соответствующие
различными символам и их комбинациям. Эта настройка основана на
файле, содержащем таблицу перекодировки.
Я настоятельно советую вам самостоятельно не разбираться с xmodmap
,
по крайней мере
для начала. Вы не получите ничего, кроме головной боли и
разочарования. Вместо этого я рекомендую вам установить пакет
xruskb,
который позволяет вам сконфигурировать большинство
входных параметров перекодировки без необходимости сталкиваться с
xmodmap
.
Все описанное приложимо не только для русского языка. Надо изменить только клавиатурные раскладки, ну и шрифты, естественно, будут иметь другую кодировку.
Возможно, найденные вами шрифты окажутся в отличной от нужной вам кодировки. Для перекодировки BDF-шрифтов можно использовать программу trbdf из пакета trscripts.
Эта программа поддерживает кодовые страницы ibm855, ibm866, iso-8859-5, koi8-c, koi8-r, koi8-u, mac-cyrillic, mik, unicode и ecma-cyrillic. Символы, отсутствующие в исходной кодировке, аппроксимируются, так что её можно использовать, например, для генерации KOI8-U шрифтов из KOI8-R.
Hачиная с версии 4.0.3 XFree официально поддерживает кодировку cp1251. Если версия вашей XFree меньше 4.0.3, то поддержку cp1251 можно получить тремя способами:
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.