Введение.
Если бы уровень поддержки кириллицы в SuSE Linux был немного
лучше, то дистрибутив неизбежно нашёл бы большее число поклонников
среди обычных пользователей на территории стран Содружества. Одной из
причин, способствующих популярности SuSE Linux, можно назвать
YaST, утилиту для централизованного управления и настройки
Linux-системы. Если провести аналогию, то по спектру функциональных
возможностей и удобству YaST является аналогом "Панели управления" в
Windows. Не исключено, что не последнюю роль в создании такого
продукта сыграл немецкий педантизм. Но даже у лучших бывают недостатки
-- в качестве компенсации их достоинств.
К сожалению, YaST не предоставляет возможностей тонкой настройки
кириллицы в консоли. Если взглянуть, например, на дистрибутивы ALT
Linux, то в них вы имеете возможность выбрать не только кодировку для
системы (koi8-r или cp1251)[1], но и "горячие" клавиши для
переключения между раскладками клавиатуры. Конечно, если вы запустили
терминальную программу (konsole, xterm, aterm и т.п.), то "иксы" сами
отвечают за переключение раскладок, но бывают случаи, когда X Window
System не нужна, а работать с кириллицей необходимо. Но даже это не
главная причина необходимости настроить правильно переменные языковой
среды. Дело в том, что вывод информации на экран напрямую зависит от
правильно настроенной локали[2] и оставлять её в том виде, как
предлагает SuSE Linux, нельзя.
Консоль.
Настройка KOI8-R.
Для корректного отображения шрифтов в консоли необходимо правильно
настроить:
* локаль
* раскладки клавиатуры и клавиши (или комбинации клавиш) для
переключения между ними
* шрифты и параметры их вывода на экран
От автора:
Предполагаю некоторые из читателей заметят: "опять пугаем
пользователей рассказами о непосредственном редактировании
конфигурационных файлов". Угу. Пугаем. Но к сожалению пока через YaST
невозможно настроить всё что необходимо, поэтому приходится прибегать
к таким методам.
Настройка локали (/etc/sysconfig/language).
За настройку локали в SuSE Linux отвечает файл /etc/sysconfig/language. В
нём, как минимум, необходимо изменить значение переменной RC_LANG ([3]):
RC_LANG="ru_RU.KOI8R"
Если возникает необходимость в настройке отображения чисел и другой
информации, зависящей от типа локали, вы можете указать необходимое. В
качестве примера рассмотрим случай, когда вам требуется, чтобы все
сообщения в системе шли на английском, но при этом оставалась
возможность работать с кириллицей (своего рода пан-европейская версия
Linux). В этом случае вам необходимо изменить значение переменной
RC_LC_MESSAGES:
RC_LC_MESSAGES="POSIX"
Изначально она (как и другие переменные) использует значение по
умолчанию (указанное в RC_LC_LANG).
Чтобы закрепить внесённые изменения, вам необходимо (под правами
суперпользователя) запустить утилиту SuSEconfig:
SuSEconfig --module profiles
Эта операция требуется для сохранения изменений в файле
/etc/SuSEconfig/profile, который собственно и занимается настройкой
переменных окружения, отвечающих за локаль.[4]
И последнее -- для пользователя root переменные локали имеют значение
POSIX (исключение составляет переменная LC_CTYPE, отвечающая за
корректную обработку данных, зависящих от языка -- сортировка и т.п.).
Если вам необходимо, чтобы суперпользователь работал в таком же
языковом окружении, что и непривелигерованные пользователи, то
измените значение параметра ROOT_USES_LANG с ctype на yes:
ROOT_USES_LANG="yes"
Настройка раскладки клавиатуры (/etc/sysconfig/keyboard).
Для кирилизации консоли в мире Linux используется два конкурирующих пакета:
consoletools и kbd. Последний используется в SuSE Linux. Исходя из специфики
описываемой ситуации (установка совместно с Windows) приведём описание
настройки клавиатуры для так называемой Microsoft раскладки. Данный тип
раскладки встречается наиболее часто. Для этого вам необходимо
отредактировать файл /etc/sysconfig/keyboard. Укажите для параметра KEYTABLE
следующее значение:
KEYTABLE="ru-ms_ct_sh.map.gz"
ru-ms_ct_sh.map.gz -- это слегка исправленная автором версия
Microsoft-раскладки[5]. В качестве переключателя используется
комбинация клавиш Ctrl+Shift. К сожалению, чтобы добиться корректной
работы раскладки ru-ms.map.gz пришлось внести в неё ряд изменений.
Первое касалось правильной работы клавиши Backspace, второе
заключалось в смене переключателя раскладки клавиатуры с правого Ctrl
на комбинацию клавиш Ctrl+Shift[6]. Так и появился видоизменённый
вариант раскладки ru-ms.map.gz, ru-ms_ct_sh.map.gz.
Скопируйте файл ru-ms_ct_sh.map.gz (http://www.linuxcenter.ru/imagelib/suse_cyr/ru-ms_ct_sh.map.gz)
в подкаталог /usr/share/kbd/keymaps/i386/qwerty.
Если вам необходимо, чтобы NumLock при загрузке был включён, укажите
для KBD_NUMLOCK значение yes:
KBD_NUMLOCK="yes"
Кроме этого, вы можете указать для параметра COMPOSETABLE следующие
значения:
COMPOSETABLE="clear winkeys"
Первый параметр очищает compose таблицу, второй позволяет
переключаться между соседними консолями при помощи клавиш Windows.
Настройка шрифтов (/etc/sysconfig/console).
В составе пакета kbd присутствует несколько кириллических шрифтов. Нас
интересует koi8r-8x16.gz:
CONSOLE_FONT="koi8r-8x16.gz"
Кроме этого, для корректного отображения псевдографики на экране, вам
необходимо выбрать правильную карту соответствий (unicode map) между
символами в кодировке koi8-r и юникодом:
CONSOLE_UNICODEMAP="koi8r.uni"
Укажите какую кодировку использовать при выводе на экран для не-ascii
символов:
CONSOLE_ENCODING="KOI8-R"
Для того, чтобы консоль переключить на отображение кириллицы,
используются специальные (так называемые "магические", magic) коды.
Укажите следующее ([7]):
CONSOLE_MAGIC="(K"
И последнее -- вам необходимо изменить символическую ссылку,
/usr/share/kbd/consolefonts/default8x16.gz, указывающую на шрифт,
используемый по умолчанию, так, чтобы она указывала на шрифт
koi8r-8x16.gz:
cd /usr/share/kbd/consolefonts
ln -sf koi8r-8x16.gz default8x16.gz
Это необходимо для того, чтобы исключить возможность переключения
шрифта некоторыми программами (например, консольной версией YaST).
(Архив примера конфигурационных файлов для настройки локали
ru_RU.KOI8R - http://www.linuxcenter.ru/imagelib/suse_cyr/cyr_koi8-r.tar.gz)
Настройка UTF-8.
Настройка локали (/etc/sysconfig/language).
Вам необходимо изменить параметр RC_LANG:
RC_LANG="ru_RU.UTF-8"
В остальном [78]см.п.2.1.2.
Настройка раскладки клавиатуры (/etc/sysconfig/keyboard).
Без изменений, см. аналогичный раздел в блоке про KOI8-R
2.2.3. Настройка шрифтов (/etc/sysconfig/console).
Всё тоже самое, что описано в пункте про KOI8-R, за исключением
значений двух параметров, CONSOLE_SCREENMAP и CONSOLE_ENCODING:
CONSOLE_SCREENMAP="koi8-r_to_uni.trans"
CONSOLE_ENCODING="UTF-8"
(Архив примера конфигурационных файлов для настройки локали
ru_RU.UTF-8 - http://www.linuxcenter.ru/imagelib/suse_cyr/cyr_utf-8.tar.gz)
X Window System.
Вот, что нам необходимо сделать для комфортной работы в графической
среде:
* настроить раскладку клавиатуры
* установить пакеты с локализацией
* установить ttf-шрифты
Настройка раскладки клавиатуры.
Проблема, которую необходимо решить в "иксах", это правильно
настроить раскладку клавиатуры. К сожалению модуль SaX2 (см.
Input-Devices->Keyboard), ответственный за настройку клавиатуры, не
делает всё необходимое. "Кандидатский" минимум -- выбор раскладки
(см.рисунок http://www.linuxcenter.ru/imagelib/suse_cyr/suse-cyr-001.jpg)
и выбор комбинации "горячих" клавиш для её переключения (кнопка "Options...",
см.рисунок http://www.linuxcenter.ru/imagelib/suse_cyr/suse-cyr-002.jpg)
он выполняет. Но если попытаться настроить раскладку таким образом,
чтобы Scroll Lock использовался в качестве индикатора альтернативной
раскладки клавиатуры, то нас ждёт неприятный сюрприз -- SaX2 не
сохраняет этот параметр (см.рисунок
http://www.linuxcenter.ru/imagelib/suse_cyr/suse-cyr-003.jpg).
Поэтому, если у вас нет необходимости настраивать раскладку так тонко,
оставьте всё как есть. Иначе отредактируйте в файле /etc/X11/XF86Config
секцию InputDevice для драйвера Keyboard. Ниже приведён пример настроек для
en-ru раскладки, использующую в качестве переключателя Ctrl+Shift и Scroll
Lock в качестве индикатора:
Section "InputDevice"
Driver "Keyboard"
Identifier "Keyboard[0]"
Option "Protocol" "Standard"
Option "XkbLayout" "en,ru"
Option "XkbModel" "pc104"
Option "XkbRules" "xfree86"
Option "XkbVariant" "basic,winkeys"
Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll"
EndSection
Варианты смены кодировки:
* grp:toggle -- переключение правым Alt,
* grp:shift_toggle -- двумя клавишами shift,
* grp:ctrl_shift_toggle -- ctrl+shift,
* grp:ctrl_alt_toggle -- ctrl+alt,
* grp:switch -- переключение по правому Alt только на момент нажатия,
* ctrl:ctrl_ac -- CapsLock
Внимание! Не рекомендуется использовать в KDE графический индикатор
клавиатуры, предлагаемый в "Центре настройки KDE" (см.рисунок
http://www.linuxcenter.ru/imagelib/suse_cyr/suse-cyr-004.jpg).
Проблем больше, чем преимуществ. Если же вам хочется красивую
индикацию раскладки, то попробуйте установить пакет xxkb.
Преимущество этой программы в том, что она может работать с любым
оконным менеджером [8]. Здесь вы найдёте пример
конфигурационного файла xxkb для работы с en-ru раскладкой. Чтобы
воспользоваться им, скопируйте его в домашний каталог и запустите
xxkb (http://www.linuxcenter.ru/imagelib/suse_cyr/.xxkbrc).
Установка пакетов с локализацией.
Установим локализованные пакеты программ и пакеты с кириллическими
шрифтами. Как это сделать?
Посмотрим, что есть на дисках SuSE Linux. Запустите YaST, см. пункт
меню System (система). Выберите пункт меню Software->Install and
Remove Software (установка/удаление программного обеспечения). Нас
интересует для фильтра (filter) режим Search (поиск). Кроме этого, вы
должны выбрать для поиска режим Use Regular Expression (использовать
регулярные выражения) и указать, что поиск необходимо производить в
имени пакета (Name), кратком описании (Summary) и описании
(Description).
Отберите те пакеты, которые содержат в имени или описании слова
cyrillic или russian. Для этого укажите в строке поиска следующее:
(cyrillic|russian)
В результате будет обнаружено 10 пакетов (см.рисунок
http://www.linuxcenter.ru/imagelib/suse_cyr/suse-cyr-005.jpg). Пакет
XFree86-fonts-cyrillic обязателен к установке. Остальные по мере
необходимости.
Перезапустите "иксы".
Установка шрифтов.
В составе KDE есть удобный инструмент для установки шрифтов -- Font
Installer. Чтобы воспользоваться им (увы!) требуется KDE. Есть два
варианта установки шрифтов -- в режиме администратора или нет. В
первом случае шрифты становятся доступными для всех пользователей
системы. Во втором, только тому пользователю, который их установил.
Источником ttf-шрифтов может служить подкаталог Fonts в каталоге, где
располагается система Windows. Если вы этим не нарушаете лицензионных
соглашений, воспользуйтесь ими. Для этого выберите режим
администратора (см.рисунок http://www.linuxcenter.ru/imagelib/suse_cyr/suse-cyr-006.jpg),
укажите пароль для root. Font Installer создаст общий список шрифтов,
установленных в системе (см.рисунок
http://www.linuxcenter.ru/imagelib/suse_cyr/suse-cyr-007.jpg).
Выберите закладку "Настройки" и укажите в настройках AFM возможность
генерировать afm-файлы для TrueType и Type1 шрифтов. В качестве
кодировки укажите ту, которая используется в системе (см.рисунок
http://www.linuxcenter.ru/imagelib/suse_cyr/suse-cyr-008.jpg).
После этого вернитесь на закладку "Шрифты" и добавьте новые ttf-шрифты
(кнопка "Добавить") (см.рисунок
http://www.linuxcenter.ru/imagelib/suse_cyr/suse-cyr-009.jpg).
Сохраните изменения, перезагрузите "иксы". Последнее необходимо,
т.к. в SuSE Linux по умолчанию X Window System настроена так,
что не использует сервер шрифтов XFS, а работает непосредственно
со шрифтами.
Готово! Видите разницу?
Если для соблюдения лицензионной чистоты, вам нельзя использовать
шрифты, поставляемые непосредственно с Windows, то воспользуйтесь
ttf-шрифтами, предлагаемыми проектом Microsoft`s TrueType core
fonts на SourceForge (http://corefonts.sf.net/). Там вы найдёте
самораспаковывающиеся архивы[9], из которых сможете извлечь ttf-шрифты
либо в среде Windows (просто запустив их), либо воспользовавшись утилитой
cabextract из одноимённого пакета. Для этого скопируйте архивы во
временный каталог и выполните следующую команду:
cabextarct *
Затем выполните операции, описанные выше.
Использование кириллицы в именах файлов разделов Windows.
Если на жёстком диске вашего компьютера есть Windows-разделы, вам
необходимо настроить процесс монтирования таким образом, чтобы имена
файлов и каталогов, содержащие в себе кириллицу, отображались
корректно. Вот пример файла /etc/fstab, сформированного в процессе
установки SuSE Linux:
...
/dev/hda1 /windows/C vfat users,gid=users,umask=0002,iocharset=iso8859-1,code=437 0 0
/dev/hda2 /windows/D ntfs ro,users,gid=users,umask=0002,nls=iso8859-1 0 0
/dev/hda3 /windows/E vfat users,gid=users,umask=0002,iocharset=iso8859-1,code=437 0 0
...
Для правильного отображения имён файлов, вам необходимо изменить
значения ключей iocharset и code [10]. Первый, iocharset,
описывает кодировку, используемую в системе (имеется ввиду Linux).
Второй -- кодировку, в которой хранятся имена файлов на диске. В
случае с fat-разделами, это кодировка, используемая в среде DOS -- для
кириллицы это cp866. Обратите внимание, что для ntfs-раздела кодировка
не указывается. В том случае, если в системе используется кодировка
koi8-r, /etc/fstab приобретает следующий вид:
...
/dev/hda1 /windows/C vfat users,gid=users,umask=0002,iocharset=koi8-r,code=866 0 0
/dev/hda2 /windows/D ntfs ro,users,gid=users,umask=0002,nls=koi8-r 0 0
/dev/hda3 /windows/E vfat users,gid=users,umask=0002,iocharset=koi8-r,code=866 0 0
...
В случае использования в системе локали UTF-8, koi8-r заменяется на
utf8.
Чтобы изменения вступили в силу без перезагрузки системы (и в том
случае, если у вас уже настроена правильно локаль), размонтируйте и
смонтируйте Windows-разделы (например):
umount /windows/C
mount /windows/C
Заключение.
Одно замечание. Если вы в ладах с английским языком и не теряетесь
перед англоязычным интерфейсом программ, то воспользуйтесь советом
предложенным в "Настройка локали" - настройте параметр RC_LC_MESSAGES в
конфигурационном файле /etc/sysconfig/console соответствующим образом.
Дело в том, что некоторые из программ в SuSE Linux собраны некорректно
(или требуют дополнительной настройки), из-за чего неверно отображают
кириллицу на экране. Типичным примером здесь выступает GIMP версии
1.2.x (в SuSE Linux представлено две версии GIMP: 1.2.x и 1.3.x).
Удачи.
Ссылки.
1. The Linux Cyrillic HOWTO. (рус.)
http://linux.yaroslavl.ru/docs/howto/Cyrillic-HOWTO-Russian/Cyrillic-HOWTO-russian.html
2. Документация по настройке Xkb, автор Иван Паскаль. (рус.)
http://www.tsu.ru/~pascal/other/xkb/
3. Статья "Шрифты в дистрибутивах ALT Linux", автор Алексей Новодворский. (рус.)
http://www.altlinux.ru/index.php?module=articles&action=show&artid=15
4. Сайт проекта Vedi (http://www.prodtp.ru/). Здесь располагается огромный
архив шрифтов. Представленные в нём шрифты в большинстве своем бесплатны.
http://www.prodtp.ru/modules.php?op=modload&name=Downloads&file=index
Пояснения.
[1] К сведению -- в SuSE Linux локаль ru_RU.CP1251 отсутствует.
Представлены только ru_RU.KOI8-R и ru_RU.UTF-8 и по умолчанию
устанавливается кодировка UTF-8.
[2] Локаль -- от англ. locale. Под локалью понимается набор
переменных окружения операционной системы, отвечающих за корректное
отображение и ввод символов того языка, который вы указали. Кроме
этого, они (переменные) отвечают за массу других вещей: формат
отображения чисел, даты, времени, порядок сортировки и т.п. Если
локаль указана неверно, то вы получаете на экране нечитаемый набор
символов. Типичным примером такого набора является слово Вопрос,
набранное в кодировке cp1251 и отображаемое в кодировке koi8-r.
Получается бНОПНЯ. Как ни странно, но это слово стало часть сетевой
субкультуры.
[3] Не совсем понятно чем вызвана чехарда с именованием
кириллических кодировок. В какой-то момент в RedHat KOI8-R
превратилась в KOI8R. Тоже самое наблюдается и в SuSE Linux.
[4] Процесс настройки переменных окружения происходит в момент
авторизации пользователя в системе. Если вы хотите проверить какая
именно локаль у вас сейчас активна в системе, воспользуйтесь командой
locale.
[5] Почему исправленная? Дело в том, что попытка воспользоваться
файлом ru_ct_sh-KOI8-R.kmap.gz (Microsoft раскладка клавиатуры,
"горячие" клавиши для переключения раскладок -- Ctrl+Shift) из пакета
consoletools (дистрибутив ALT Linux Master 2.2) не удалась -- часть
клавиш "оказалась" не на своих местах. Поэтому, пойдя по пути
наименьшего сопротивления, автор изменил клавиши для переключения
раскладок в ru-ms.map.gz.
[6] Для любознательных -- те, кто хочет настроить свой
собственный переключатель раскладки, обратите внимание на AltGr_Lock и
AltGr.
[7] Полный формат такой спецпоследовательности -- \033(K. Её
можно использовать в том случае, если в консоли "сбилась" настройка
кирилизации:
echo -en "\033(K"
[8] Пакет взят из ALT Linux Master 2.2 и полностью совместим с
SuSE Linux 9.0. Установку пакета можно произвести из консоли
(необходимы права администратора):
rpm -ivh xxkb-1.9-alt1.i586.rpm
Исполняемый файл -- /usr/bin/xxkb
Для самых ленивых, ссылки непосредственно на одно из зеркал
сайта SourceForge, где расположены архивы шрифтов:
http://switch.dl.sourceforge.net/sourceforge/corefonts/andale32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/arial32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/arialb32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/comic32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/courie32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/georgi32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/impact32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/times32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/trebuc32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/verdan32.exe
http://switch.dl.sourceforge.net/sourceforge/corefonts/webdin32.exe
[10] code это краткое имя опции codepage.