Проблемы русификации в 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)"
Ну вот, теперь вы знаете и умеете достаточно, для того чтобы успешно вести войну с многочисленными русскими кодировками. Можете изучать эту проблему дальше, создайте свою кодировку, дайте ей широкое распространение. Тогда проблема русификации никогда не исчезнет и в конечном итоге мы все перейдем на латиницу:))
|