LINUX.ORG.RU

Моя версия руссификации RedHat Linux. Может кому и пригодится ;)


0

0

Привет всем!

Поскольку довольно часто и методично многие интересуются настройкой Великого и Могучего в 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. Я описал все так, как это вижу и понимаю я. Если я где ошибся-поправьте.


  • Naschet LC_ALL ne soglasen, ee lytche voobshe ne ystanavlivat (v konce koncov ona osobo
    ni chego ne delaet). Inache v WindoMakere problemu s messagami. Naprimer poka ia ne
    vukinyl LC_ALL=ru_SU u menia WindowMaker okna daval bez nadpisej i golue knopki.

    babai
    ()
    Ответ на: комментарий от babai

    Переменная LC_ALL устанавливает разом общие значения для следующих переменных:

  • LC_COLLATE
  • LC_NUMERIC
  • LC_CTYPE
  • LC_MONETARY
  • LC_TIME

    (А может даже и больше). За что отвечает каждая, я думаю видно из названия. Конечно в случае с WindowMaker можно убрать LC_ALL и пробовать подстановкой найти ту переменную, которая заставляет WM глючить. Кстати, когда я игрался с WindowMaker'ом 0.61, LC_ALL была установлена, и все было жуда зур. КДЕ/ГНОМ тоже работали нормально. А сейчас OpenWindows (непонятно как скомпилированные) - и, как ни страно, тоже везде русский (по мере моих переводов :) Так что похоже у тебя или WM старый, или Иксы не до конца отстроены. Кстати, по-поводу Иксов: меня всегда убивал (и будет убивать) тот факт, что Иксы имеют свою локализацию. ЗАЧЕМ??? Я еще ни в одном РэдХате не встречал Иксы с нормальной локализацией. Посему всегда сношу все из /usr/X11R6/lib/X11/locale заодно с Xkb (нормально не работает ни то, ни другое). Вот так ;^)

    Druker
    () автор топика
  • У меня RH6.0 - значить и WMaker не старый, кажется 0.50 версия.
    А про LC_ALL - выйгрыша она существенного не дает, значит сносим ее без колебаний :)))

    babai
    ()

    У меня RH6.0 - значить и WMaker не старый, кажется 0.50 версия.
    А про LC_ALL - выйгрыша она существенного не дает, значит сносим ее без колебаний :)))

    babai
    ()

    Чегой-то кривит..

    Я сделал так: LANG=ru_RU.KOI8-R 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 В результате вроде все OK, но неправильно отображается большая русская В. Чего бы покрутить?

    anonymous
    ()
    Ответ на: Чегой-то кривит.. от anonymous

    У меня то же самое. На самом деле это ошибка или в самом шрифте (koi8-8x16.psf) или в маппере koi8-r.sfm Так что если есть желание, то можно залезть в шрифт и поправить (с помощью соотв. редактора, разумеется). Кстати, буква е (ийо) там тоже отсутствует.

    Druker
    () автор топика
    Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.