Руководство по русской локализации Gentoo Linux

Алексей Федорчук
[email protected]

Это руководство по настройке Gentoo Linux для работы в кириллическом окружении, включающее установку экранных шрифтов и раскладок клавиатуры в консоли, русской locale и часового пояса для России, а также русификацию оконной системы X.

1.0.0
Feb 18 2003

Введение

Что такое русская локализация

В понятие локализации входит обеспечение вывода и ввода символов национальных языков (в случае использования набора символов, отличных от чистого латинского) и определение переменных окружения, зависящих от страны, языка и набора символов (то есть собственно установка locale). В число таких переменных, кроме страны, языка и набора символов, входят также представление даты и времени, разделителей десятичных дробей, денежных единиц и так далее.

Вследствие различия подходов в этом документе будут отдельно рассмотрены локализация текстового (то есть Linux-консоли) и графического (оконной системы X) режимов.

О кириллических кодировках

В условиях России и некоторых других стран бывшего СССР локализация осложняется множественностью наборов символов (charsets), используемых для представления алфавитов, основанных на кириллице. Причем для Unix-систем получили распространение минимум три таких набора, в просторечии именуемых кодировками: традиционная для свободных Unix-клонов (в том числе и Linux) кодировка KOI8-R, кодировка ISO-8859-5 (именуемая кодировкой ГОСТ), используемая в проприетарных Unix-системах, и кодировка CP1251 (или кодировка Windows). Кроме того, для обеспечения экранного вывода используется кодировка CP866 (или кодировка DOS). Наконец, в последнее время все большую популярность получает кодировка UTF-8.

В Gentoo Linux штатно (как говорится, из коробки) поддерживается кодировка KOI8-R, и все сказанное ниже относится именно к ней. Локализацию для кодировок ISO-8859-5 или CP1251 пользователь может выполнить самостоятельно, получив из независимых источников некоторые дополнительные компоненты. О локализации для кодировки UTF-8, призванной унифицировать подход к интернационализации, будет говориться в следующих версиях этого документа, когда использование ее станет общепринятым.

Базовая кириллизация консоли

Введение

Итак, базовая локализация консоли включает обеспечение вывода национальных символов на экран и ввода их с клавиатуры. Однако в случае кириллической локализации вследствие особенностей наборов символов и аппаратных особенностей PC для ввода и для вывода используются, как правило, разные кодировки. И это требует еще двух дополнительных шагов - установки карты соответствия между наборами символов ввода и вывода, и активизация ее на каждой из виртуальных консолей.

Установка экранного шрифта

Экранный шрифт, загружаемый по умолчанию при старте системы, определяется в файле /etc/rc.conf строкой

	CONSOLEFONT="default8x16"
		

Для вывода русских букв "умолчальное" значение следует заменить на имя какого-либо файла шрифта с поддержкой кириллицы, например, cp866-8x16 для представления кодировки DOS или koi8r-8x16 - для кодировки KOI8-R. Например,

	CONSOLEFONT="cp866-8x16"
		

Или -

	CONSOLEFONT="koi8r-8x16"
		

Файлы шрифтов (и не только кириллических) находятся в каталоге /usr/share/consolefonts/ и имеют вид *.gz, *.psf.gz или *.psfu.gz. При стандартном их размещении и форме ни полного пути, ни "расширения" имени указывать не обязательно.

В кириллическом Linux'е для экранного вывода, как правило, используется кодировка cp866 (вне зависимости от того, какой набор символов принят для клавиатурного ввода). О причинах этого говорить можно было бы долго - достаточно указать, что в любом ином случае программы, использующие псевдографику (например, Midnight Commander) приобретут весьма уродливый вид.

Экранные кириллические шрифты, поставляемые с Gentoo Linux, далеки от эстетического совершенства (справедливости ради заметим, что это относится почти ко всем Unix-клонам). И потому в качестве источника дополнительных шрифтов можно рекомендовать пакет console-tools-cyrillic Виктора Вагнера. В результате приведенная выше в качестве примера строка может принять вид вроде

	CONSOLEFONT="UniCyr-sans"
		

Установка раскладки клавиатуры

Загружаемая по умолчанию раскладка клавиатуры также определяется в файле /etc/rc.conf строкой

	KEYMAP="us"
		

По аналогии с предыдущим случаем легко догадаться, что значение us следует заменить на имя файла какой-либо кириллической (на этот раз уже в кодировке KOI8-R) раскладки. Место этих файлов (имеющих вид *.map.gz) - в каталоге /usr/share/keymaps/i386/qwerty, где для русской кодировки KOI8-R имеется несколько раскладок, например, ru1-ru4. Различия между ними - в соответствии различной маркировке клавиш (DOS или Windows - не путать с одноименными кодировками) и положении переключателя латиница/кириллица. Рискну взять на себя смелость рекомендовать раскладку ru4 - для Windows-маркированных клавиатур, в которой переключателем служит CapsLock (при этом фиксация верхнего регистра обеспечивается одновременным нажатием клавиш Shift+CapsLock). То есть строка примет вид:

	KEYMAP="ru4"
		

Как и в случае с экранными шрифтами, при стандартном расположении файлов раскладок указывать полный путь к ним и "расширение" имени нет необходимости.

При желании вы можете выбрать и раскладку клавиатуры для кодировки cp1251 (например, ru_win). Однако в этом случае придется отыскать или самостоятельно изготовить таблицу перекодировки (mapscreen) cp1251->cp866. Июо нет ничего более уродливого, чем программы, использующие псевдографику, при экранном представлении в кодировке cp1251.

Установка карты соответствия (mapscreen)

Теперь остается только обеспечить соответствие между кодировками ввода (KOI8-R) и вывода (cp866), то есть загрузить соответствующую таблицу перекодировки (mapscreen). Для этого снова обращаемся к файлу /etc/rc.conf. Строка в нем, отвечающая за эту операцию, имеет по умолчанию такой вид:

	#CONSOLETRANSLATION="cp437_to_iso01"
		

Необходимо, сняв с нее символ комментария (#), заменить "умолчальное" значение на необходимое нам, и подсмотреть его можно в каталоге /usr/share/consoletrans - это koi2alt:

	CONSOLETRANSLATION="koi2alt"
		

Пожалуйста, не забудьте снять символ комментария со строки CONSOLETRANSLATION - кто только на моей памяти не наступал на эти грабли:-)

Если вы по каким-либо причинам остановились на представлении экранных шрифтов в кодировке KOI8-R, загрузка и активизация карты соответствия, разумеется, не нужна.

Активизация карты соответствия

Результатом выполненной операции будет то, что после перезагрузки машины мы получили бы нормальный вывод кириллического текста (записанного в кодировке KOI8-R), но только - на первой (т.н. системной) консоли. Чтобы иметь то же самое на остальных виртуальных консолях (а в Gentoo Linux их по умолчанию еще 5), та же карта соответствия должна быть активизирована на каждой из них с помощью направления Escape-последовательности (K (символ в данном случае показывает, что следующие за ним символы рассматриваются как специальные). Достигнуть этого можно разными способами. Например, создать в каталоге /etc/init.d/ файл consoletrans и в любом текстовом редакторе внести в него следующие строки:

	for i in 1 2 3 4 5 6
		do
		echo -ne '(K' > /dev/vc/$i
	done
		

Это - для случая 6-ти консолей по умолчанию. Если количество их изменялось пользователем, значения in, очевидно, должны быть приведены в соответствие с реальностью.

Теперь командой chmod a+x /etc/init.d/consoletrans созданному скрипту следует присвоить бит исполнения, после чего он добавляется к уровню исполнения по умолчанию (default runlevel):

		$ rc-update add consoletrans default
		

Механизм автоматического обновления стартовых скриптов подробно описан в соответствующем разделе документации (доступен и русский перевод).

Вот теперь после перезагрузки машины мы получим полноценно локализованную консоль.

Все действия, описанные в данной главе, могут быть выполнены как на заключительных шагах (final steps) установки Gentoo Linux, так и в произвольный момент времени в дальнейшем.

Установка русской locale

Установка locale ru_RU.KOI8-R

Установить локально-зависимые переменные можно различными способами, в том числе и просто в профильных файлах отдельных пользователей. Однако в Gentoo Linux предусмотрен автоматический механизм установки любых переменных окружения ы качестве общесистемных - env-update, подробно описанный в соответствующих разделах документации, в том числе и русском переводе ее.

Для использования этого механизма следует в файл /etc/env.d/00basic добавить строку

		LANG="ru_RU.KOI8-R"
		

которая определяет не только язык locale, но и все остальные локально-зависимые переменные. Далее выполняем команду

	$ env-update
	

дополняющую глобальный профильный файл /etc/profile, после чего остается только перечитать последний командой

	$ source /etc/profile
	

Теперь в ответ на команду

	$ locale
	

последует вывод

	LANG=ru_RU.KOI8-R
	LC_CTYPE="ru_RU.KOI8-R"
	LC_NUMERIC="ru_RU.KOI8-R"
	LC_TIME="ru_RU.KOI8-R"
	LC_COLLATE="ru_RU.KOI8-R"
	LC_MONETARY="ru_RU.KOI8-R"
	LC_MESSAGES="ru_RU.KOI8-R"
	LC_PAPER="ru_RU.KOI8-R"
	LC_NAME="ru_RU.KOI8-R"
	LC_ADDRESS="ru_RU.KOI8-R"
	LC_TELEPHONE="ru_RU.KOI8-R"
	LC_MEASUREMENT="ru_RU.KOI8-R"
	LC_IDENTIFICATION="ru_RU.KOI8-R"
	LC_ALL=
		

свидетельствующий, что все локально зависимые переменные приняли значения для страны России (ru), русского языка (_RU) и набора символов KOI8-R. Те же значения этих переменных будут устанавливаться и в сеансах всех пользователей, вошедших в систему после выполнения команды env-update.

Механизм env-update однозначно работает в том случае, если пользовательской оболочкой (login shell) является /bin/bash. При использовании иных командных оболочек могут потребоваться некоторые дополнительные действия. Например, если в качестве login shell выступает оболочка zsh, следует отказаться от создания файла ~/.zshenv в домашнем каталоге пользователя.

Переменная LANG=ru_RU.KOI8-R должна быть установлена в любом случае, даже если вы не любите сообщений на русском языке: в противном случае во многих программах (в том числе для XFree86) окажется просто невозможным, например, ввод символов кириллицы.

Как уже сказано, установка переменной LANG автоматически определяет и все прочие локально-зависимые переменные. Что в ряде случаев может быть нежелательным. Например, некоторые программы расчетного характера требуют, чтобы в качестве десятичного разделителя использовался символ точки, как в locale POSIX, а не запятой, как это принято в locale ru_*. Чтобы добиться этого, достаточно в конец файла /etc/env.d/00basic, после определения LANG, добавить строку вида:

	LC_NUMERIC="POSIX"
		

Аналогичным образом могут поступить пользователи, испытывающие стойкую неприязнь к русскоязычным меню и сообщениям программ:

	LC_MESSAGES="POSIX"
		

Установка часового пояса

Системные часы по Гринвичу

Если системные часы машины в BIOS Setup установлены на время по Гринвичу (UTC, для настройки часового пояса достаточно создать символическую ссылку /etc/localtime на файл, описывающий данный часовой пояс. Например, для установки московского времени это будет выглядеть так:

	$ ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
		

Точное обозначение часовых поясов для России можно посмотреть в каталогах /usr/share/zoneinfo/Europe (имеет силу также для Украины и Белоруссии) и /usr/share/zoneinfo/Asia (для азиатской части России). Например, пользователям из Петропавловска-Камчатского указанная команда потребуется в следующем виде:

	$ ln -sf /usr/share/zoneinfo/Asia/Kamchatka /etc/localtime
		

Системные часы по местному времени

Если системные часы данной машины установлены по местному времени, кроме создания указанной ссылки потребуется внести еще и изменения в файл /etc/rc.conf, а именно: строку CLOCK="UTC" заменить на CLOCK="local".

Локализация оконной системы X

Введение

Локализация оконной системы X (конкретно - ее свободной реализации XFree86) может быть выполнена двумя путями: с помощью специальных утилит конфигурирования (обычно - xf86config, используемой для настройки графического режима вообще) или прямым редактированием конфигурационного файла /etc/X11/XF86Config.

Локализация с использованием утилиты xf86config

Утилита xf86config в большинстве случаев позволяет корректно выполнить кириллизацию системы XFree86 уже на стадии начальной ее настройки. Для этого необходимо дать (в консольном режиме) одноименную команду и правильно ответить на вопросы, относящиеся к определению языково-зависимых параметров, и следующие после указания выбора типа клавиатуры.

Первый из таких вопросов - выбор страны (Enter a number to choose the country), ответ на который, на самом деле, определяет базовую раскладку клавиатуры. Очевидными ответами являются 8 Belarusian для Белоруссии и 70 Ukrainian для Украины, тогда как для России предлагается два варианта: 53 Russian и 54 Russian (cyrillic phonetic). Первый - это традиционная раскладка qwerty, второй же - фонетическая раскладка ywerti, в которой символы кириллицы расположены на месте созвучных латинских. Она использовалась на старых терминалах и ныне практически не встречается. Так что на самом деле и тут выбор 53 Russian практически однозначен.

Далее следует предложение указать вариант русской раскладки (Please enter a variant name for 'ru' layout). Если, просто нажав Enter, отказаться от этого, будет установлен так называемый DOS-вариант раскладки (вернее, маркировки клавиш); маркированные таким образом клавиатуры практически вышли из употребления, поэтому следует, введя winkeys, выбрать Windows-вариант (не следует путать его с Windows-кодировкой, иначе говоря - cp1251).

Затем, введя y, следует положительно ответить на вопрос об указании дополнительных опций расширения XKB (Do you want to select additional XKB options (group switcher, group indicator, etc.)?): это позволит определить переключатель латиница/кириллица (в силу исторических причин русская раскладка клавиатуры в XFree86 по умолчанию такового не имеет вообще).

В результате следующим шагом будет предложение выбрать клавишу или клавишную комбинацию для такого переключателя. Возможные варианты включают:

  1  R-Alt switches group while pressed
  2  Left Win-key switches group while pressed
  3  Right Win-key switches group while pressed
  4  Both Win-keys switch group while pressed
  5  Right Alt key changes group
  6  Caps Lock key changes group
  7  Menu key changes group
  8  Left Win-key changes group
  9  Right Win-key changes group
 10  Both Shift keys together change group
 11  Control+Shift changes group
 12  Alt+Control changes group
 13  Alt+Shift changes group
		

Из них следует выбирать, руководствуясь своими предпочтениями. Однако по вполне понятным причинам можно рекомендовать, чтобы переключатель раскладок был идентичен для текстового (консольного) и графического режимов. ИМХО, лучше всего на эту роль подходит клавиша CapsLock (для этого в консоли должна быть установлена раскладка ru4). При этом первичная функция этой клавиши (фиксация верхнего регистра), как и в консоли, будет выполняться одновременным нажатием Shift+CapsLock

Не менее удобным представляется и использование в качестве переключателя какой-либо из т.н. Windows-клавиш, имеющихся на всех современных клавиатурах. Однако при этом для достижения идентичности переключения в консоли и в XFree86 потребуются расширенные раскладки клавиатуры из упомянутого выше пакета console-tools-cyrillic.

Следующие несколько вопросов позволяют указать переключатель для третьей клавиатурной раскладки, дополнительные позиции управляющей клавиши Control, индикацию текущей раскладки (например, индикаторами CapsLock или ScrollLock) и еще некоторые опции. Если в них нет необходимости - ответы на эти вопросы можно просто пропустить, нажимая клавишу Enter.

Покончив с настройкой клавиатуры, следует завершить конфигурирование XFree86 (включая настройку видеорежимов) и выйти из программы xf86config с сохранением результатов в файле /etc/X11/XF86Config.

Установка кириллических шрифтов

Программа xf86config обеспечивает настройку клавиатурного ввода, но не подключает по умолчанию шрифтов с символами кириллицы - это достигается редактированием файла /etc/X11/XF86Config. Его следует открыть в любом текстовом редакторе и отыскать в Section "Files" описание путей к шрифтовым файлам.

При вызове файла /etc/X11/XF86Config необходимо отключить режим переноса строк в используемом редакторе.

Пути к файлам шрифтов описываются следующим образом:

	FontPath   "/usr/X11R6/lib/X11/fonts/local/"
	FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
	FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
	FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
	FontPath   "/usr/X11R6/lib/X11/fonts/Type1/"
	FontPath   "/usr/X11R6/lib/X11/fonts/Speedo/"
	FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/"
	FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/"
		

В этот список следует внести путь к файлам шрифтов с поддержкой кириллицы. По умолчанию в любой современной версии XFree86 имеется один набор кириллических шрифтов - Cronyx, расположенный в каталоге /usr/X11R6/lib/X11/fonts/cyrillic/. И потому первая строка указанной секции должна принять вид

	FontPath   "/usr/X11R6/lib/X11/fonts/cyrillic/"
		

Строка с кириллическими шрифтами должна быть первой в списке путей, дабы именно они обнаруживались бы любыми программами в первую очередь при совпадении их имен или псевдонимов с таковыми шрифтов, не имеющих символов кириллицы.

Шрифты производства Cronyx содержат ограниченное число гарнитур. Кроме того, они являются растровыми и вообще далеки от эстетического совершенства. Поэтому их по возможности лучше дополнить (или заменить) шрифтами от независимых производителей. В качестве таковых можно рекомендовать коллекцию масштабируемых (TTF и ATM) лицензионно чистых шрифтов Валентина Филиппова, входящих в российскую сборку OpenOffice и в последние версии дистрибутивов Altlinux.

Шрифты эти можно взять и с первого диска Gentoo-RV. После чего остается только скопировать их:

	$ cp -R /mnt/cdrom/gentoo/russian/rusttf /usr/X11R6/lib/X11/fonts

создать символическую ссылку

	$ln -s /usr/X11R6/lib/X11/fonts/rusttf/fonts.dir /usr/X11R6/lib/X11/fonts/rusttf/fonts.scale

и внести в файла в секцию Section "Files" файла /etc/X11/XF86Config строку

	FontPath   "/usr/X11R6/lib/X11/fonts/rusttf"
		

желательно перед всеми остальными путями к шрифтовым файлам.

Ручная настройка клавиатуры для ввода кириллицы

К кириллизации XFree86 посредством программы xf86config целесообразно прибегать только при начальной настройке этой системы. Если же в ходе использования Gentoo Linux возникнет необходимость дополнительного конфигурирования (например, изменения положения переключателя раскладок), проще обратиться к прямому редактированию файла /etc/X11/XF86Config.

За настройку клавиатуры в нем отвечает Section "InputDevice". В ней, после указания идентификатора клавиатуры (а оконная система X в состоянии поддерживать, даже на локальной машине, более одной физической клавиатуры) и ее драйвера, следует описание т.н. правил (rules), определяющих раскладку клавиатуры. Оно имеет вид вроде следующего:

	Option "XkbRules"   "xfree86"
	Option "XkbModel"   "pc105"
	Option "XkbLayout"  "ru"
	Option "XkbVariant" "winkeys"
	Option "XkbOptions" "grp:caps_toggle,grp_led:caps"
		

Здесь, разумеется, можно изменить все, что угодно. Однако практически имеет смысл рассмотреть только возможные варианты значений для строки Option "XkbOptions". Значение, приведенное в примере, соответствует переключателю раскладок CapsLock (grp:caps_toggle) и индикатору Capslock как показателю включения русской раскладки (grp_led:caps). И то, и другое можно изменить, если не устраивает. Доступные значения содержатся (вместе с их краткими описаниями) в секции ! option файла /usr/X11R6/lib/X11/xkb/rules/xfree86.lst.

Описание раскладок клавиатуры через набор правил - лишь одно из возможных. О других способах сделать это можно прочитать на http://www.tsu.ru/~pascal/other/xkb.