"Из чего же" сделана русификация
в 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
в 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 /]#
См. также : Как проверить, что локализация заработала.
Хотя для большинства программ вполне достаточно установки 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 ========
После этого библиотека readline (и bash) начнет воспринимать русские буквы.
Еще один вариант : Не задавать INPUTRC=,
а прописать те же значения в ~/.inputrc
(в
home-каталоге). Но тогда придется заводить такой
файл в домашнем каталоге каждого
пользователя.
См. man readline .
/etc/smb.conf ====== [global] character set = koi8-r client code page = 866 preserve case = yes short preserve case = yes ======
Чтобы подмонтировать диск 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