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