Подобно консольному режиму, X Window также требует некоторой настройки. Настройка включает в себя настройку ввода и установку шрифтов для X Window. Данные действия обсуждаются ниже.
Прежде всего, вы должны достать шрифты, содержащие изображения кириллических
символов в соответствующих местах. Следует отметить, что все современные
дистрибутивы имеют KOI8-R шрифты, более-менее пригодные для использования,
так что если xlsfonts не показывает их, то они просто не установлены или
не включены в X Font Path
.
X Window включила набор KOI8-R шрифтов, разработанных Cronyx, ещё в конце 1995 года. Эти шрифты являются также частью XFree86.
Некоторые дистрибутивы (как правило, очень старые) могут не включать кириллические шрифты для X Window -- в этом случае их придётся устанавливать самим.
Подробнее о шрифтах для X Window и о том, где их можно найти, смотрите в разделе Шрифты для X Window.
Более современную коллекцию шрифтов для X Window можно взять у Дмитрия Болховитянова по адресу пакет CYR_RFX.
Вам следует проверить, установлены ли эти шрифты в вашей системе. Спросите системного администратора, или, если вы сами являетесь администратором, проверьте вашу систему сами, а именно:
xlsfonts | grep koi8
'. Если в результате выполнения
команды появится список шрифтов, то ваш X сервер уже знает об их существовании.
find / -name crox\*.pcf\*для того, чтобы найти местоположение шрифтов кириллицы в системе. Вы должны будете сделать эти шрифты доступными для X сервера, как -- описано ниже.
Если вы не нашли таких шрифтов в вашей системе, то вы должны установить их сами:
*.bdf
),
то вы должны скомпилировать их. Для каждого шрифта выполните:
bdftopcf -o <font>.pcf <font>.bdfМожете сжать их с помощью программы
gzip
или, если ваш дистрибутив X
Window достаточно современный, с помощью bzip2
, что даст небольшой выигрыш
в степени компрессии:
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 встроена во все современные дистрибутивы XFree86. Существует отдельный TrueType сервер шрифтов XFSFT для X.
Для информации о том, где можно найти TrueType шрифты, следует обратиться к разделу Шрифты TrueType.
Коммерческие X сервера (Accelerated X, Metro X) уже довольно давно включили поддержку TrueType в свои дистрибутивы.
Установочная процедура сервера шрифтов довольно проста: делайте то, что сказано в документации.
Hемног ниже даётся пример того, как можно установить 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 и выше) имеются два "стандартных" способа ввода с клавиатуры: Xkb или X KeyBoard (раздел Xkb) и старый способ, работающий через утилиту xmodmap (см. раздел xmodmap).
Полную и исчерпывающую (даже слишком исчерпывающую) документацию по настройке 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,grp_led:scroll"
означает, что XKB должен в соответствии с правилами, описанными в файле
{XKBROOT}/rules/xfree86
, выбрать настройки для клавиатуры типа
"pc104" (104 кнопки), русского алфавита (английский алфавит будет включён
"по умолчанию").Если у вас "windows" клавиатура (что верно в 99%
случаев), то полезно указать XkbVariant как "winkeys", в противном случае
оставьте эту опцию пустой -- "". В самом конце идут дополнительные опции для
вашей "раскладки клавиатуры" -- "grp:shift_toggle,grp_led:scroll",
которые описывают метод -- переключения: две клавиши "Shift" , при этом
загорается лампочка Scroll Lock на клавиатуре.
Небольшое отступление -- "о клавише-переключателе рус/лат".
Другие варианты смены кодировки:
Когда был написан первый вариант этих рекомендаций, сама раскладка "русской" клавиатуры (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 Ивана Паскаля.
Описанное ниже относится к относительно старым версиям 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.