Привет всем!
Поскольку довольно часто и методично многие интересуются настройкой
Великого и Могучего в Linux (будь то консоль, Иксы, или приложения для них),
мне пришла в голову мысль описать все это хозяйство и выложить сюда :). Еще
одной причиной послужил мой недавний апгрейд Шапки 5.2 до Шапки 6.02 со всеми
вытекающими оттуда последствиями. Итак:
Во-первых, существует несколько кодировок Великого и Могучего, а это:koi8-r,
iso8859-5, Глюк's CP-1251 и DOS' CP-866 (может даже больше ;) Linux можно
отстроить для работы с каждой из них, это дело вкуса. Я остановлюсь на koi8-r.
Немного теории: любое locale-aware приложение (а Иксы - тоже приложение)
в Linux использует локаль, на которую настроена Ваша система. Система (точнее libc)
использует переменную LANG (и прочие, типа LC_NUMERIC) для определения локали.
Значение переменной описывает, как система должна обрабатывать числа, даты и общий
ввод/вывод. Все это описывается в каталоге /usr/share/locale/нужная_ЛОКАЛЬ в файлах
LC_*. Сообщения libc на языке этой локали находятся там же в подпапке LC_MESSAGES.
Среди прочих в /usr/share/locale есть ru, ru_SU и ru_RU. ru_RU в RedHat описывает
iso8859-5, а ru_SU - koi8-r. Исходя из этого нам надо подставить в переменную
LANG (и прочие) значение ru_SU, и мы получим таким образом возможность наблюдать
вывод stdout/stderr системы и программ на Русском, а также вводить Русский текст.
Небольшой отступ: ru в названии означает Русский язык, а SU - страну расположения.
Еще одно: все установки желательно запускать при загрузке, используя initscripts.
Ну ладно, хватит воду лить :) Итак, в последних системах на основе RedHat
редактируем файл /etc/sysconfig/keytable и пишем в нем следующую строку:
KEYTABLE=ru
Сие заставит систему загружать таблицу ru командой loadkeys при старте. Для
этого используется скрипт /etc/rc.d/init.d/keytable. Чтобы он запускался на всех
runlevel'ах (ну, может, кроме 0 и 6) в папках /etc/rc.d/rc#.d/ ссылка на этот
скрипт должна выглядеть так: S75keytable. # в имени папки значит runlevel, буква
S в начале имени ссылки - service start на этом runlevel. (Не спрашивайте о цифрах
- сам еще не знаю :). Далее нам надо подгружать соответствующий шрифт и
трансляторы символов для консоли. Для этого в файле /etc/sysconfig/i18n пишем
следующее:
LANG=ru_SU
LC_ALL=ru_SU
SYSFONT=/usr/lib/kbd/consolefonts/koi8-8x16.psf.gz
UNIMAP=/usr/lib/kbd/consoletrans/koi8-r.sfm.gz
SYSFONTACM=/usr/lib/kbd/consoletrans/straight-to-font.acm.gz
Эти переменные используются скриптом /sbin/setsysfont из пакета console-tools,
который запускается из скрипта /etc/rc.d/rc.sysinit каждый раз при загрузке. И,
наконец, при входе пользователя в систему срабатывает скрипт /etc/profile.d/lang.sh
и устанавливает переменные в Шелл (Примечание: этот скрипт написан только для
bash или sh). Если Вы сделали все, как описано выше, то после перезагрузки или
явно запустив скрипт командой /sbin/setsysfont и пере-логинившись (слово-то какое!)
после нажатия правого Control Вы сможете вводить Кириллицу. Пользователям
(t)csh необходимо создать файл /etc/profile.d/lang.csh со следующим содержанием
(ну не написал РэдХат скрипт для csh, забыли наверное):
#!/bin/csh
setenv LANG ru_SU
setenv LAC_ALL ru_SU
Вот собственно и все касательно локализации системы. Приложения, почуяв русский
дух в системе, исправятся и заговорят по-русски (если есть соотв. переведенные
файлы *.mo), а команды date и ls -al выдадут даты по-русски. Несколько слов
по-поводу Икс-Окон: важно указать русские шрифты первыми в /etc/X11/XF86Config,
а также не путать кодировки и использовать koi8-r по умолчанию в Иксовых
приложениях.
P.S. Забивать мозги командами типа echo blahblah, loadkeys, mapscrn ни к чему -
это все уже стоит в нужных местах в /etc/rc.d/rc.sysinit и /etc/profile.d/lang.sh
в последних дистрибутивах RedHat.
P.P.S. Я описал все так, как это вижу и понимаю я. Если я где ошибся-поправьте.