Проблемы русификации в Linux

Начну с того, что ни одна статья про русификацию не помогла мне с первого раза. Пришлось прочитать их несколько, почитать FAQ, HOWTO, MAN. Так, что если вы наткнулись на статью, в частности на мою, то это не значит, что ваши проблемы кончились на этом. На мой взгляд здесь все понятно, и большинству этого за глаза хватит. Все о чем здесь говорится отлично работает в RedHat 9.0. Думаю, в других дистрибутивах работает не хуже. Начнем с локализации вашего пингвина. Многие программы, такие как, gnome, kde, OpenOffice.org и большинство других, с которыми вам придется столкнуться, поддерживают локализацию. Интерфейс таких программ будет меняться, в зависимости от выбора системной локали (например измениться язык интерфейса). Теперь посмотрим, какая у вас стоит локаль. Наберите:

# locale

Появится список переменных локали. Похожий на этот:

LANG=ru_RU.cp1251
LC_CTYPE="ru_RU.cp1251"
LC_NUMERIC="ru_RU.cp1251"
LC_TIME="ru_RU.cp1251"
LC_COLLATE="ru_RU.cp1251"
LC_MONETARY="ru_RU.cp1251" LC_MESSAGES="ru_RU.cp1251"
LC_PAPER="ru_RU.cp1251"
LC_NAME="ru_RU.cp1251"
LC_ADDRESS="ru_RU.cp1251"
LC_TELEPHONE="ru_RU.cp1251"
LC_MEASUREMENT="ru_RU.cp1251"
LC_IDENTIFICATION="ru_RU.cp1251"
LC_ALL=
Как известно, в каждом государстве есть свои национальные стандарты. Кроме языка это формат бумаги, форма записи даты, времени, адреса и т.д. За все это и отвечает локаль. В приведенном выше списке, ru_RU.cp1251, и есть системная локаль. Здесь она "русская" "для России" и с кодировкой "cp1251" (интерфейс по возможности на русском языке, все символы в кодировке cp1251). Поменять локаль можно так:

# export LANG=ru_RU.koi8r

Посмотреть список доступных в системе локалей:

# locale -a (для удобства используйте locale -a / grep RU)

Если вам нужна локаль, например, ru_RU.cp1251, но у вас ее нет в списке, то можно ее добавить:

# localedef -c -i ru_RU -f cp1251 ru_RU.cp1251

Локаль по умолчанию прописывается в файле /etc/sysconfig/i18n. В строчке LANG - локаль по умолчанию.

Следующий этап русификация консоли. Того, кто консоль не любит и использовать ее не хочет, сразу хочу обрадовать: этот этап можете пропустить, с русификацией X-ов консоль никак не связанна. Для русификации будем пользоваться пакетом kbd.
Установка нужного шрифта.
По умолчанию шрифты лежат в каталоге /lib/kbd/consolefonts. Для русских кодировок рекомендую шрифты Cyr_a. Расширение .psfu.gz у шрифта означает, что он годится для разных кодировок. Команда:

# setfont Cyr_a8x16

Установка screen map (aka mapscrn aka acmtable).

Screen map перекодирует символы из вашей кодировки в Unicode, лежат в каталоге /lib/kbd/consoletrans. Выбрать можно так:

# setfont Cyr_a8x16 -m cp1251 Раньше для этого служила отдельная программа mapscrn. Из пакета ее не удаляли, поэтому можно пользоваться и ей: # mapscrn cp1251

Но после mapscrn еще нужно ввести "магическую" ESC-последовательность:

# echo -ne "\033(K"

Setfont этого не требует.

Выбор раскладки клавиатуры.
Раскладки хранятся в /lib/kbd/keymaps/i386/qwerty. Команда:

# loadkeys ru_win

Теперь посмотрим результаты. Если вы еще не сделали то, что я показал выше, то сейчас самое время. Пример опять для cp1251:

#setfont Cyr_a8x16 -m cp1251
#loadkeys ru_win

Переключение раскладки для ru_win делается правым Ctrl. Попробуйте печатать русскими буквами. Если видите караказяблы, то либо вы что-то неправильно сделали, либо у вас нет нужного mapscrn или вы выбрали не тот шрифт. Можете у вас вообще всего этого нет, тогда поищите и скачайте. Рекомендую пакет kbd-rus. Брать тут http://baybox.narod.ru/linux/kbd-rus.tgz. Автор предлагает свои раскладки, mapscrn-ы и шрифты для кодировок alt(cp866), koi(koi8-r) и win(cp1251). Кстати раскладку для ru_win, советую все-таки поменять на раскладку из пакета kbd-rus. Иначе вместо привычной точки с запятой вы будете получать слэш и вопрос. Если вы что-то скачали и положили в нестандартный каталог, то тогда, вам, конечно, придется полностью прописать путь и имя файла. Если вы решили русифицировать консоль под utf-8, тогда вместо sysfont используйте:

# unicode_start ваш шрифт

Естественно, в этом случае не нужно никакого mapscrn.
Какие раскладки клавиатуры использовать для конкретных кодировок смотри ниже.
Если у вас до сих пор ничего не работает, тогда я думаю, что и консоль вам не нужна, либо идите читать другие статьи HOWTOхи и MANы.

Если все работает, тогда доводим до ума. Редактируем уже знакомый нам файл /etc/sysconfig/i18n. Первая строчка - локаль. Выбирайте какая нравится. Как я уже говорил локаль влияет только на интерфейс, на вводe букв и просмотре файлов это не скажется. Хотя будет неприятно видеть сообщения в cp1251, когда у вас шрифты koi8-r. Поэтому по дефолту выбираем локаль и шрифты с одной кодировкой. Если вам вообще не нужен русский интерфейс выберете en_US и никаких проблем не будет. SYSFONT - дефолтовый шрифт, ACMTABLE - дефолтовый mapscrn. Строчку SUPPORTED можно не менять, но если хотите, для порядка, добавьте туда все используемые вами локали. Теперь в этом же каталоге ищем файл keyboard. В строчке KEYTABLE ваша дефолтовая раскладка. Опять же если вы скачали другие шрифты раскладки и mapscrnы, то вводите полный путь и имя файла. Если у вас стандартное тогда используйте следующие комбинации (для sysfont и loadkeys используйте их же). Вместо Cyr_a8x16 можно использовать любой кириллический шрифт, поддерживающий множество кодировок (расширение .psfu.gz)

Для koi8-r

LANG=ru_RU.koi8r
SYSFONT=Cyr_a8x16
ACMTABLE=koi8-r (или koi2alt)
KEYTABLE=ru4 (переключение клавишей CapsLock)

Для cp866

LANG=ru_RU.cp866
SYSFONT=Cyr_a8x16
ACMTABLE=cp866
KETABLE=ru2

Для iso8859-5

LANG=ru_RU.iso88595
SYSFONT=Cyr_a8x16
ACMTABLE=8859-5
KETABLE=у себя не нашел, если вам позарез нужна эта кодировка в консоли, то найдете.

Для windows(cp1251).

LANG=ru_RU.cp1251
SYSFONT=Cyr_a8x16
ACMTABLE=cp1251
KETABLE=ru_win

Для utf-8

LANG=ru_RU.utf8
SYSFONT=Cyr_a8x16
ACMTABLE можно удалить
KEYTABLE=В 9 RedHat есть только украинская ua-utf, в Cyrillic Edition добивили ru-utf(.

Теперь при перезагрузке вы увидите сообщения на русском до тех пор, пока не появится ввод логина и пароля (если у вас текстовый вход разумеется). После этого возникает небольшая проблема. Дело в том, что перед появлением логина и пароля дается команда reset. От чего очищается экран и сбрасывается mapscrn. Для восстановления текущего mapscrn нужно ввести "магическую" последовательность. Это не очень-то удобно, поэтому рекомендую в файле /etc/inittab исправить строки:

1:2345:respawn:/sbin/mingetty tty1
На
1:2345:respawn:/sbin/mingetty -noclear tty1

Для удобства создайте скрипты для включения каждой кодировки. Например для koi8-r

#/bin/sh
setfont Cyr_a8x16 -m koi8-r
loadkeys ru4

Сохраняем в /sbin/koi. Теперь в любое время вводим команду koi и получаем возможность просматривать и редактировать текст в этой кодировке.

Ну и напоследок, расскажу про монтирование виндузовских разделов.

#mount -t vfat -o iocharset=cp1251,codepage=866 /dev/hda5 /mnt/hda5

Текущие кодировки локали и консоли должны совпадать с iocharset тогда русские имена файлов будут отображаться без проблем.

Теперь русификация иксов. Ну здесь, вообще говоря, особо ничего делать не нужно. Чаще всего проблемы возникают из-за отсутствия шрифтов с используемой кодировкой. Выход один - скачайте и установите русские шрифты для ваших кодировок (я использую шрифты из Cyrillic Edition ftp://www.linux-ink.ru/pub/Russian/9/RPMS/ ). Потом проставьте их в настройках программ. Еще один совет, опять про ту же клавишу точка с запятой. Чтобы она у вас работала как в винде, т.е вводила эти самые точку и запятую, нужно подредактировать файл /etc/X11/XF86Config. В секции InputDevice ищем строку

option "XkbLayout" "us,ru"

Заменяем на

option "XkbLayout" "us,ru(winkeys)"

Ну вот, теперь вы знаете и умеете достаточно, для того чтобы успешно вести войну с многочисленными русскими кодировками. Можете изучать эту проблему дальше, создайте свою кодировку, дайте ей широкое распространение. Тогда проблема русификации никогда не исчезнет и в конечном итоге мы все перейдем на латиницу:))

 


Страница сайта http://silicontaiga.ru
Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=6504