Взято отсюда: http://sensi.org/~alec/unix/redhat/ru-rh52.html
Русификация консоли 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 допустимы следующие параметры :
==========LANGLC_ALLLINGUASSYSTERMUNIMAP==========
Рекомендуется прописать :
/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.tgzusr/share/locale/ru_RU.KOI8-R/LC_COLLATEusr/share/locale/ru_RU.KOI8-R/LC_CTYPEusr/share/locale/ru_RU.KOI8-R/LC_MESSAGES/usr/share/locale/ru_RU.KOI8-R/LC_MESSAGES/SYS_LC_MESSAGESusr/share/locale/ru_RU.KOI8-R/LC_MONETARYusr/share/locale/ru_RU.KOI8-R/LC_NUMERICusr/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/bashINPUTRC="/etc/inputrc"; export INPUTRC========
И сделать этот файл исполняемым. Кроме того, прописать :
/etc/inputrc========set meta-flag onset convert-meta offset output-meta on========
После этого библиотека readline (и bash) начнет воспринимать русские буквы.
Еще один вариант : Не задавать 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