Русификация консоли Linux RedHat 5.2.

    "Из чего же" сделана русификация в RedHat? Как известно, в Linux существуют два конкурирующих пакета управления шрифтами и клавиатурой : kbd и consoletools. В RedHat 5.x для русификации консоли применялся пакет kbd. Автор этого пакета является также автором Keyboard-and-Console-HOWTO, поэтому естественно, всех склоняет к использованию kbd. Однако в RedHat 6.x применяется уже другой пакет - consoletools. Разницы между ними радикальной нет, но это, увы, делает несовместимым пакет initscripts для версий RedHat 5.x и 6.x .

    Русификация (и вообще включение национальных установок) в Linux RedHat 5.2 осуществляется из пакета initscripts. Не будем вдавться в подробности работы SYSV init, опишем краткий путь. Предполагается, что читатель данного текста умеет пользоваться пакетом RPM, который весьма важен в RedHat.


Клавиатура.

    Клавиатура в RedHat 5.2 на "нижнем" уровне управляется утилитой loadkeys из пакета kbd-096a-8. Пакет стандартный, RedHat лишь добавил туда несколько новых раскладок.

    Запускается loadkeys из /etc/rc.d/init.d/keytable, управляющий файл : /etc/sysconfig/keyboard. Там прописывается единственная переменная KEYTABLE=.

/etc/sysconfig/keyboard :
============
KEYTABLE="ru1"
============

    Есть интерактивная утилита смены раскладки : kbdconfig, которая на самом деле лишь прописывает значение в /etc/sysconfig/keyboard.

    Файлы клавиатурных раскладок лежат в /usr/lib/kbd/keymaps/* .

    Мне нравится раскладка ru_win_ctrl.map.gz от IP Labs. Переключение по правому Ctrl, точка и запятая в русском регистре, как в Windows, т.е. рядом с правой кнопкой Shift. (На моей клавиатуре нарисовано именно так). Надо положить этот файл в /usr/lib/kbd/keymaps/i386/quwerty/, запустить kbdconfig и выбрать ru_win_ctrl. (Хотя и родная раскладка ru1 тоже ничего (точка и запятая на Shift 6, Shift 7 )).

    Включить новую раскладку "на ходу" можно запустив :  /etc/rc.d/init.d/keytable start

    В соответствии с идеологией SYSV init для запуска на RunLevel 3 проставлен symlink :

/etc/rc.d/rc.3/S75keytable --> ../init.d/keytable

    Еще о пакете KBD :
ftp://ftp.win.tue.nl/pub/linux/utils/kbd/
http://linuxdoc.org/HOWTO/Keyboard-and-Console-HOWTO.html


Консоль

    Консоль в RedHat 5.2 на "нижнем" уровне управляется утилитами setfont и mapscrn из того же пакета kbd-096a-8.

    Все, что необходимо сделать, это выполнить следующие команды :

$ setfont Cyr_a8x16
$ mapscrn koi2alt

    Кроме того, необходимо переключить Charset G1 на вновь загруженный фонт. Для этого нужно на все виртуальные консоли /dev/vty* вывести "магическую" последовательность ESC ( K.

$ echo -ne "\033(K"

    К сожалению, с русификацией консоли в RedHat не все так прозрачно, как с клавиатурой. Отдельной "подсистемы" для управления консолью нет. А если делать все по RedHat-овски -- возникают проблемы.

    RedHat рекомендует пользоваться "новый" форматом, с UNICODE таблицей :

$ setfont Cyr_a8x16 -u koi8

    К сожалению, на "новом" формате сползают рамки на mc и в других программах. В RedHat 6 применяется другой пакет : consoletools и другая версия initscripts, там все сделано немного по-другому.

    Но попробуем выкрутится ! ;-)

    Все утилиты запускаются из файла /sbin/setsysfont (на самом деле это shell-скрипт), параметры для которого живут в /etc/sysconfig/i18n. Не очень понятно, каково отношение между i18n и шрифтами, но тем не менее это так.

/etc/sysconfig/i18n
=====
SYSFONT=
UNIMAP=
=====

    Не очень понятно, откуда посылать ESC ( K. Можно посылать его например из ~.profile


Системная locale

    "Включение" системной locale в RedHat 5.2 осуществляется из файла /etc/profile.d/lang.sh.

    Как известно, при старте любого shell-а сначала выполняется /etc/profile. В RedHat в /etc/profile прописаы команды, благодаря которым на исполнение вызываются также все файлы из /etc/profile.d/*.sh

    Значения конфигурации для lang.sh лежат в /etc/sysconfig/i18n.

    В версии initscripts-3.78-2.4 допустимы следующие параметры :

==========
LANG
LC_ALL
LINGUAS
SYSTERM
UNIMAP
==========

    Рекомендуется прописать :

/etc/sysconfig/i18n
==========
LANG="ru_RU.KOI8-R"
LINGUAS="ru:en"
==========

    Как видите, эта версия initscripts RedHat 5.2 не отличается особой гибкостью и набором параметров. В RedHat 6.x initscripts гораздно более продвинутый. (См: sysconfig.txt от RH6).

    К сожалению, в поставке RedHat 5.2 значение значение русской locale имеет нестандартное имя ru_SU вместо  ru_RU.KOI8-R, поэтому "объекты локализации" лучше изготовить заново. Вот стандартные готовые откомпилированные "объекты" : ru-glibc20.tgz :

    Этот файлик нужно скопировать в / (в корень) и развернуть :

[root@on /]#tar zxvf ru-glibc20.tgz
usr/share/locale/ru_RU.KOI8-R/LC_COLLATE
usr/share/locale/ru_RU.KOI8-R/LC_CTYPE
usr/share/locale/ru_RU.KOI8-R/LC_MESSAGES/
usr/share/locale/ru_RU.KOI8-R/LC_MESSAGES/SYS_LC_MESSAGES
usr/share/locale/ru_RU.KOI8-R/LC_MONETARY
usr/share/locale/ru_RU.KOI8-R/LC_NUMERIC
usr/share/locale/ru_RU.KOI8-R/LC_TIME
[root@on /]#

    См. также : Как проверить, что локализация заработала.


Shell (inputrc).

    Хотя для большинства программ вполне достаточно установки LANG=ru_RU.KOI8-R чтобы начать распознавать русские буквы, многие программы основанные на библиотеке readline (например bash) все равно считают символы с кодами больше 128 особыми META-символами (пищит при вводе).

    Чтобы отучить библиотеку readline от этого, необходимо определить переменную INPUTRC=, например, создав файл:

/etc/profile.d/readline.sh
========
#!/bin/bash
INPUTRC="/etc/inputrc"; export INPUTRC
========

    И сделать этот файл исполняемым. Кроме того, прописать :

/etc/inputrc
========
set meta-flag on
set convert-meta off
set output-meta on
========

    После этого библиотека readlinebash) начнет воспринимать русские буквы.

    Еще один вариант : Не задавать INPUTRC=, а прописать те же значения в ~/.inputrc (в home-каталоге). Но тогда придется заводить такой файл в домашнем каталоге каждого пользователя.

    См. man readline .


Samba.

/etc/smb.conf
======
[global]
    character set = koi8-r
    client code page = 866
    preserve case = yes
    short preserve case = yes
======

Диски Win'95 и DOS

    Чтобы подмонтировать диск Windows'95 и DOS с правильной поддержкой русских букв, необходимо воспользоваться командой :

$ mount -t vfat -o umask=002,noexec,gid=500,codepage=866,iocharset=koi8-r /dev/hdb1 /mnt

    Да, все русские имена на диске FAT сохраняются в Codepage 866 ! Для работы этой опции ядро (>2.0.36) должно быть пересобрано с поддержкой NLS, кодовыми страницами CP866, NLS KOI8-R и конечно же с поддержкой VFAT.


См. также:

http://isd.donin.com/~leon/spitfire/cyr.phtml

http://kulichki.rambler.ru/~anykey/05-softnotes/012softnotes.linuxrussian.html

http://www.iplabs.ru:8101/Linux/Article/

http://www.kazan.lug.ru/ve/russ.htm

http://triton.itep.ru/ru/linux/system.html

http://kulichki.rambler.ru/moshkow/CYRILLIC/linuxcyrillic.txt