Ключевые слова:linux, rus, koi8r, unicode, locale, (найти похожие документы)
From: Артемий Евгеньевич Капитула <[email protected]>
Date: Mon, 27 Mar 2004 14:31:37 +0000 (UTC)
Subject: Локализация Linux (UTF-8 и KOI8-R)
Оригинал: http://www.surw.ru/~dalth/russian.html
Локализация Linux
Большинство дистрибутивов Linux делаются не в России, и, хотя
существенных проблем с локализацией Linux сейчас уже нет, тем не менее
в новых дистрибутивах у новых пользователей часто возникают проблемы с
Unicode.
В принципе, существует две методики "русификации" Linux: идеологически
правильное (и почти работающее) использование UTF-8, и проверенное
временем использование однобайтовых кодировок - например, KOI8-R (или
CP1251). Необходимые действия будут приводиться для дистрибутивов
RedHat Linux 8/9 и Fedora Core 1.
* Установка шрифтов
* Поддержка ввода кириллицы в X11
* Русификация консоли, выбор локали
* Локаль UTF-8
+ RedHat Linux 9, локаль UTF-8
+ Fedora Core 1, локаль UTF-8
* Локаль KOI8-R
+ RedHat Linux 8/9, локаль KOI8-R
+ Fedora Core 1, локаль KOI8-R
+ Микро-патч для справочного руководства
* "Русские" имена файлов
* Известные баги
* Заключение
Установка шрифтов
Прежде всего, надо установить шрифты TrueType, входящие в поставку
Windows. Проще всего сделать это один раз для всех пользователей
системы. Для этого достаточно сделать следующие шаги:
1. Создать каталог /usr/X11R6/lib/X11/fonts/winttf
2. Скопировать в него все файлы с расширение TTF из каталога Fonts в
системном каталоге Windows
3. Войти в созданый каталог и запустить ttmkfdir
4. Исправить файл /etc/X11/fs/config, добавив в него в секцию
catalogue созданый каталог (для того, чтобы эти шрифты стали
доступны тем приложениям, которые не используют XFT)
5. Исправить файл /etc/fonts/fonts.conf, также добавив туда ссылку на
каталог с TTF-шрифтами
6. Перезапустить сервер шрифтов: /etc/init.d/xfs restart
Следующим шагом необходимо убедить приложения, написанные на GTK-1
использовать наши шрифты, для чего нужно исправить файл
/etc/gtk/gtkrc.ru (необходимо делать с правами пользователя root), и
придать ему примерно следующий вид:
style "gtk-default-ru" {
fontset = "-microsoft-verdana-medium-r-normal--11-110-75-75-p-0-koi8-r"
}
class "GtkWidget" style "gtk-default-ru"
Аналогично исправляем /etc/gtk/gtkrc.utf8, только вместо koi8-r в
конце строки с именем шрифта запишем iso10646-1. iso10646-1 и koi8-r -
это наименования кодовых страниц шрифтов, используемых приложениями
GTK при запуске с соответствующим образом настроенной локалью:
style "gtk-default-ru" {
fontset = "-microsoft-verdana-medium-r-normal--11-110-75-75-p-0-iso10646-1"
}
class "GtkWidget" style "gtk-default-ru"
Все, с установкой и активизацией шрифтов вроде бы в первом приближении
закончено. Конечно, нет предела совершенству - но мы же стараемся
добиться не совершенства, а просто корректной работы при минимальных
затратах?! На всякий случай, для верности порекомендую сходить
FTP-сервер компании AltLinux и скачать с их download-сайта
ftp://ftp.altlinux.ru файлы 75 и 100-dpi шрифтов из репозитория
Sysiphus. Эти файлы содержат исправленные шрифты для XFree86 с
нормальными кириллическими глифами в UNICODE-позициях.
Поддержка ввода кириллицы в X11
Ну, это легко и просто - благо используемый в Linux чаще всего
X-сервер XFree86 написан достаточно гибко. Единственное, что нам будет
нужно - слегка поправить некоторые параметры. Вооружаемся редактором
текста и исправляем /etc/X11/XF86Config. Находим секцию, отвечающую за
клавиатуру, и исправляем ее примерно следующим образом, курсивом
выделены те фрагменты, которые наиболее важны:
Section "InputDevice"
Identifier "Keyboard0"
Driver "keyboard"
Option "XkbRules" "xfree86"
Option "XkbModel" "pc105"
Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll"
EndSection
Все, с X11, GTK и прочим разобрались, теперь дело за малым - выберите
наиболее подходящие для вас шрифты в панели управления используемой
вами графической среды (или исправьте конфигурационный файл вашего
Window Manager'а).
Русификация консоли, выбор локали
Прежде чем написать эту часть заметки, я долго терзался выбором: в
какой же кодировке предпочтительней всего было бы работать, в KOI8-R
или UTF-8. Предварительные выводы из этих размышлений примерно такие:
если вы собираетесь использовать Midnight Commander, выбирайте KOI8-R,
если нет - то можете выбрать как KOI8-R, так и UTF-8. Для
RedHat Linux 8 однозначно рекомендую выбрать KOI8-R.
Локаль UTF-8
UTF-8 является многобайтовой кодировкой с переменной длиной символа -
например, символы латиницы кодируются одним байтом, символы кириллицы - уже
двумя. Хотя у UTF-8 есть тот огромный плюс, что она может поддерживать все
языки мира скопом, неотлаженность этого решения приводит ко множеству
"глюков".
RedHat Linux 9, кодировка UTF-8
Скачайте файл ru-utf.map.gz (взять сей файл можно по этой ссылке
http://www.surw.ru/~dalth/themes/ru-utf.map.gz) и
скопируйте его в каталог /lib/kbd/keymaps/i386/qwerty, и после этого
начинаем настраивать конфигурацию (правим файлы настроек):
Файл /etc/sysconfig/i18n
LANG="ru_RU.UTF-8"
SUPPORTED="en_US:en:ru_RU:ru:ru_RU.UTF-8"
SYSFONT="latacyrheb-sun16"
Файл /etc/sysconfig/keyboard
KEYBAORDTYPE="pc"
KEYTABLE="ru-utf"
Все, теперь перезагружаемся - кириллические глифы будут вводиться,
шрифт тоже будет русским. Минусы - медленно работают команды grep,
awk, sed и некоторые другие, в Midnight Commander русский не вводится,
просмотреть и отредактировать файл с русскими буквами не получится.
Переключение в консоли на русские буквы по нажатию правого Control'а,
в X11 - как написали в /etc/X11/XF86Config
Fedora Core 1, кодировка UTF-8
Ничего не трогаем, все и так работает, только переключение
русский-английский производится нажатием правых Ctrl+Shift. Если
хочется использовать правый Control - правим /etc/sysconfig/keyboard
как в предыдущем примере.
Кодировка KOI8-R, все дистрибутивы
Некоторые штатные (входящие в дистрибутив) пакеты разработчики
дистрибутива слегка "подправили" для совместимости с UTF-8, поломав
при этом все остальные кодировки, поэтому скачиваем пакеты
less-358-24.i386.rpm, groff-1.17.2-12.i386.rpm, man-1.5j-6.i386.rpm,
libstdc++-2.96-110.i386.rpm из поставки RedHat Linux 7.3 и
устанавливаем их:
# rpm -i --force libstdc++-2.96-110.i386.rpm
# rpm -U --oldpackage less-358-24.i386.rpm
# rpm -U --oldpackage groff-1.17.2-12.i386.rpm
# rpm -U --oldpackage man-1.5j-6.i386.rpm
Для RedHat Linux 8 необходимо также скачать пакет consoletools из
состава RedHat Linux 7.3 и установить его, предварительно удалив
пакеты kbd и kbdconfig, связано это с несколькими ошибками в скриптах
инициализации:
# rpm -e kbd kbdconfig
# rpm -i consoletools*
Затем во всех трех дистрибутивах правим файл /etc/sysconfig/i18n
LANG="ru_RU.KOI8-R"
SUPPORTED="en_US:en:ru_RU:ru:ru_RU.KOI8-R"
SYSFONT="cyr-sun16"
SYSFONTACM="koi8-u"
Все, подготовка закончена, можно начинать редактирование файлов
конфигурации (действия различаются в зависсимости от дистрибутива).
RedHat Linux 8/9, кодировка KOI8-R
Файл /etc/sysconfig/keyboard
KEYBAORDTYPE="pc"
KEYTABLE="ru"
Fedora Core 1, кодировка KOI8-R
Файл /etc/sysconfig/keyboard
KEYBAORDTYPE="pc"
KEYMAP="ru.map.utf8ru"
Перезагружаемся - кириллические глифы будут вводиться, шрифт тоже
будет русским. Плюсы - нормально работают команды grep, в
Midnight Commander русский вводится, смотрятся и редактируются файлы с
русскими буквами корректно. Переключение в консоли на русские буквы по
нажатию правого Control'а, в X11 - как написали в /etc/X11/XF86Config
Микро-патч для справочного руководства (только для локали KOI8-R)
Прежде, чем приступать к этим действиям, добейтесь работоспособности
русского языка в системе - иначе вы не сможете проверить правильность
своих действий.
В состав любого дистрибутива Linux входят так называемые "маны" (от
английского man, manual). В большинстве своем эти руквовдства
англоязычные, и чтобы облегчить работу не-англоязычным российским
пользователям, добровольцы постепенно производят перевод руководств на
русский язык (за что им огромное спасибо!). Проблема заключается в
том, что в RedHat и Fedora переведенные руководства лежат в кодировке
UTF-8 - а ведь мы "подтачиваем" наши системы в KOI8-R, верно? Значит,
нам нужно перекодировать страницы руководства, и сделаем мы это так:
1. Еще раз бэкап :-)
# cd /usr/share/man/ru
# tar -cvf backup.tar *
2. Создаем скрипт перекодировки
# echo '#!/bin/sh' >rcode
# echo 'zcat "$1" | iconv -f utf8 -t koi8-r | gzip -c >"$1.new" ' >>rcode
# echo 'mv "$1.new" "$1" ' >>rcode
3. Перекодируем
# chmod ugo+rx rcode
# find . | grep gz | gawk '{system("./rcode "$1);}'
# rm -f rcode
Проверяем результат командой man rpm - если вы не увидели ни русского,
ни английского текста, а только кракозяблики - у вас проблемы.
Восстановите предыдущие версии файлов командой tar -xvf backup.tar и
тщательно прверьте, где вы ошиблись.
"Русские" имена файлов
Для начала немного теории: как мы уже знаем, все файловые системы
перед началом их использования должны быть смонтированы. Следовательно
нам необходимо задать опции монтирования файловой системы, "русские"
имена файлов и каталогов на которой мы хотим видеть в приемлемой
форме. Эти опции задаются в файле /etc/fstab и необходимы для файловых
систем FAT (во всех разновидностях) и NTFS.
В файловых системах семейства FAT имена фалов хранятся в однобайтовых
кодировках, причем если на эта файловая система является порождением
локализованной на русский язык версии Windows, то можно смело
утверждать, что русские имена файлов хранятся в кодировке CP866
(кириллица MS-DOS). Соответственно, для записи о монтировании файловых
систем FAT-семейства в файле /etc/fstab должны выглядеть примерно так:
/dev/hda1 /mnt/dos_c vfat defaults,codepage=866,iocharset=koi8-r 0 0
/dev/hda5 /mnt/dos_d vfat defaults,codepage=866,iocharset=koi8-r 0 0
Опция codepage указывает ядру в какой кодировке хранятся имена файлов
на диске, а опция iocharset говорит о том, в какой кодировке эти имена
становятся видны пользовательским программам. В рассмотреный пример
предназначен для локализации системы в KOI8-R.
В случае работы с файловой системой NTFS, имена файлов на диске всегда
хранятся в Unicode, и как следствие, нам становится не нужен параметр
codepage:
/dev/hda7 /mnt/dos_e ntfs defaults,iocharset=koi8-r 0 0
См. также справку: man fstab, man mount
Известные баги
1. Для установленной локали KOI8-R в дситрибутиве Fedora Core 1 не
работает установка картинок на бэкграунд в среде GNOME, если картинка
называется русским именем или лежит в каталоге с русским именем.
Заключение
Ну вот вроде бы и все по этой теме... Конечно, можно было бы и
продолжить, но этой информации должно быть достаточно для приведения
локализации системы в более-менее работоспособное состояние, поскольку
все остальные проблемы обычно вызываются некорректными настройками
конкретных приложений.
Полезные ссылки
* http://mcmcc.bat.ru/ - сайт McMCC, который также дает
рекомендации по адаптации сравнительно новых дистрибутивов RedHat
к "реальной жизни в русских селеньях" (для RedHat Linux 8/9,
Fedora Core 1)
Почему-то все предлагают локализовывать систему. В результате, когода системе совсем плохо, она выдаёт диагностику по русски на терминал без русских букв. И ещё куча приколов с этим.
А ежели на компе три человека, на разных языках говорящих работают?
Имхо, грамотный путь -- локализовывать окружение пользователя. После некоторого секса я это у себя сделал. Теперь у меня машинка с немцем -- по немецки, со мной -- по русски, а все сислоги на английском и в ASCII. Одной доки толковой по этому делу нет :((, пришлось по кусочам инфу выскребать.
Я 2 дня подряд читаю маны, так как толковых статей на эту тему не нашёл. Всё вроде того, что нужно тут написать то, там - то. А как оно работает? Что делать, если вдруг сломается? Хочется настроить по своему, а хрен, столько доков перелопачивать приходится.
А кто нибудь подскажет как заставвить linux дружить с WEB сервером (сайтом) требующим передавть ему русскоязычные сообщения в кодировке cp1251? Таковым является например ssp.rmh.ru