Mandrake 7.2. Русификация

С точки зрения интернациональной поддержки Mandrake 7.2 весьма впечатляет. Я уже говорил, что при инсталляции можно выбрать один из 54 (! - не поленился пересчитать) языков. Среди которых - почти все государственные языки Европы (за одним странным исключением - видимо, разработчики не знали, что рето-романский - такой же полноправный государственный язык Швейцарии, как немецкий, французский и итальянский). Есть и каталанский язык, и галицийский (это что - язык испанской Галисии или нашей рiдной Червоной Галиции?), и фарерский, и целая серия кельтских (валлийский, ирландский, может быть, и галицийский - это гэльский язык Шотландии?), и даже эсперанто.

При этом для ряда языков учитываются и вариации - так, для норвежского приведены как ландсмол, так и букмол, для сербского - варианты с кириллической и латинской графикой. Да, пардон, забыл - из европейских языков нет еще бретонского и провансальского - видимо, французы за языки их не считают... Хотя, с другой стороны, есть валлонский, который я полагал мертвым со Средневековья; но ведь Бельгия - не Франция.

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

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

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

С русским языком на первый взгляд дело тоже обстоит неплохо. По крайней мере, если был выбран русский язык инсталляции или он был подключен позднее в качестве дополнительного. В обоих случаях русская локаль устанавливается и в качестве системной, и как локаль X Window. Что легко проверить командой locale, выводящей все имеющие к ней отношение переменные в виде

LANG=ru
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_ALL=

Или - командой date: при правильно установленной локали ответом на нее будут текущие дата и время по русски и в том формате, как это принято у нас:

Вск Дек 17 10:58:27 MSK 2000

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

Переключатель для клавиатурных раскладок в консольном режиме по умолчанию также выставлен привычным (по крайней мере, для меня) - клавиша CapsLock, которая крайне редко используется по прямому назначению.

В системе X Window при первом ее запуске вместо кириллических букв (если русский язык был выбран в качестве системного) появляется знакомая пользователям Windows абракадабра. И, поскольку в Mandrake, как и в его прародителе Red Hat, для управления шрифтами используется не X-сервер, а специальный сервер шрифтов (xfs, то есть X Font Server), правка файла XF86Config-4 (или XF86Config, смотря по тому, какая версия X'ов была установлена) в данном случае ничего не дает.

Однако дело это поправимое. Для этого следует только отыскать файл /usr/X11R6/lib/X11/fs/config и внести в него минимальные исправления. А именно, в секции catalogue переместить каталог с кириллическими шрифтами на первую позицию списка, после чего он приобретает вид вроде этого:

catalogue = /usr/X11R6/lib/X11/fonts/cyrillic:unscaled,
  /usr/X11R6/lib/X11/fonts/misc:unscaled,
  /usr/X11R6/lib/X11/fonts/75dpi:unscaled,
  /usr/X11R6/lib/X11/fonts/100dpi:unscaled,
  /usr/X11R6/lib/X11/fonts/Type1,
  /usr/X11R6/lib/X11/fonts/Speedo,
  /usr/X11R6/lib/X11/fonts/mdk,
  /usr/X11R6/lib/X11/fonts/drakfont,
  /usr/X11R6/lib/X11/fonts/pcf_drakfont:unscaled,
  /usr/share/fonts/default/Type1,
  /usr/share/fonts/ISO8859-2/75dpi:unscaled,
  /usr/share/fonts/ISO8859-2/75dpi:unscaled,
  /usr/share/fonts/ttf/decoratives

И в подавляющем большинстве приложений кириллические шрифты начинают воспроизводиться нормально. Правда, в штатном наборе имеет место быть только пресловутая растровая продукция фирмы Cronyx, весьма далекая от эстетических идеалов старого шрифтовика. Но доустановка хороших кириллических гарнитур - это не та проблема, о которой сегодня стоит говорить. Подборки их (производства Сергея Шарашкина, Леонида Кантера, Дмитрия Сорокина) можно найти на многих серверах и в составе ряда дистрибутивов отечественного изготовления.

Несколько хуже обстоит дело со вводом русских букв с клавиатуры. во-первых, переключатель раскладок по умолчанию, на мой взгляд, выбран самый неудачный из всех возможных - правая клавиша Control. Во-вторых, кириллическая раскладка не соответствует точно ни DOS'овской, ни Windows'овой. Различия - мелкие (дублирование точки, смещение двоеточия и вопросительного знака на верхнем регистре цифрового ряда), но, в силу непривычности и, так сказать, оригинальности, достаточно неприятные.

Казалось бы, первая проблема легко решается правкой секции "InputDevice" файла XF86Config-4 (или, соответсвенно "Keyboard" файла XF86Config, если был устанавлен XFree версии 3.3.6): достаточно явным образом задать желаемый переключатель в строке

Option "XkbOptions" "grp:caps_toggle"

или (опять-таки, в зависимости от версии XFree)

XkbOptions "grp:caps_toggle"

- и все придет в норму. Не тут-то было. Повозившись с этой секцией изрядное время и несколько раз полностью ее перекроив, я неожиданно понял, что русификация X Window в Mandrake основана вовсе не на использовании расширения Xkb: не случайно по умолчанию была раскомментирована строка с XkbDisable.

Поскольку заподозрить французов в использовании чего-нибудь типа Xruskb было бы наивно, оставалось предположить, что имеет место прямая подмена Xmodmap.

Так и оказалось. Обратившись по адресу /etc/X11/xinit/ к соответствующему файлу, я обнаружил в нем полное описание клавиатурных раскладок, замещающее таковые стандартной таблицы /usr/X11R6/lib/X11/etc/xmodmap.std. Способ это мало того, что идеологически неправилен - нам, бывшим советским людям, любая идеология до лампочки (кроме марксистско-ленинской, разумеется - та так просто по...). Однако он создает ряд практических неудобств. В частности, во многих программах (типа редактора NEdit, в котором я набираю эти строки) при кириллической раскладке перестают работать комбинации горячих клавиш.

С этим еще можно смириться - а меню и всякие кнопки на что? Однако режте меня на куски, делайте со мной, что хотите, но вы не заставите меня переключаться с латиницы на кириллицу правой клавишей Control - это позорно и преступно, как говаривал Веня Ерофеев. Да и получать еще одну точку вместо двоеточия я категорически несогласен. К тому же нажатие правого Cntrol'а почему-то вызывало индикацию CapsLock (сама эта клавиша никакого воздействия на свой индикатор не оказывала).

Правда, мое честолюбие не простиралось до тотальной русификации Mandrake 7.2 (надеюсь, недалеко время. когда эту проблему решит IPLabs Linux Team). Однако заметку о нем хотелось бы написать его же средствами, не перезагружаясь в мою прежнюю систему. А для этого требовалось создать хоть минимальный комфорт для набора.

И в первом приближении я его создал. Для этого я обратился к концу файла /etc/X11/xinit/Xmodmap, имевшему вид:

add Mod1 = Alt_L
add Mod2 = Mode_switch Control_R
add Lock = Control_R
add Control = Control_L

где в строках add Mod2 и add Lock заменил Control_R (то есть ту самую правую клавишу Control) на милый моему сердцу CapsLock. Почему-то оказалось, что переключение раскладок и загорание огонька на CapsLock парагенетически связаны: если закомментировать строку add Lock = Control_R или оставить ее без изменений - никакого переключения раскладок не происходит вообще, вне зависимости от того, какое значение стоит в строке add Mod2 = Mode_switch *. Почему - так и осталось покрыто мраком неизвестности (по крайней мере для меня). "Не знаем же мы до сих пор, убил Борис Годунов царевича Дмитрия, или наоборот" (согласно тому же Венечке).

Сначала зелененький огонек CapsLock меня раздражал, но потом - даже понравилось: сразу видно, в какой раскладке нынче находишься. Потому что штатный индикатор-переключатель, выводимый на панель задач KDE, ничего не индицирует и, тем более, не переключает.

Попутно решилась и проблема с беспутными знаками препинания. Для этого следовало всего-то заменить строку

keycode  12 = 3 numbersign 3 question

на

keycode  12 = 3 numbersign 3 numbersign

строку

keycode  14 = 5 percent 5 colon

на

keycode  14 = 5 percent 5 percent

а строку

keycode  16 = 7 ampersand 7 period

на

keycode  16 = 7 ampersand 7 question

чтобы получить нормальную русскую раскладку в стиле Windows (не идеальную, но уже привычную). Переключаемую на латиницу и обратно, напомню, клавишей CapsLock. Правда, нажатие ее в комбинации с Shift не возвращало, вопреки обыкновению, первозданное ее значение. Но это я счел мелочью, не заслуживающей внимания.

Однако явление это оказалось временных. Выяснилось, что запуск любой части DrakConf, имеющей отношение к настройке X Window (например, изменение разрешения или цветности экрана), напрочь сносит всю русификацию, переписывая файл XF86Config (-4). Причем в версии 4 последствия бывали еще более неприятными - вплоть до разрушения X-сервера.

Это, а также нестабильная работа моей видеокарты и со штатным X-сервером, и с X-сервером производства NVIDIA, вынудило меня вернуться к версии 3.3.6. И начать русификацию клавиатуры сначала. Не употребляя на этот раз никаких автоматизированных средств (типа DrakConf или XF86Config), исключительно мануально.

К этому времени я убедился на собственном опыте, что конфигурирование через "правила" (rules), "модель" (model), "схему" (layont) и т.д., то есть метод, названный Иваном Паскалем в его известном мемуаре третьим, далеко не всегда позволяет получить русские буквы при вводе. Хотя причины этого явления остаются для меня загадкой.

А ведь именно по третьему методу генерируются описывающие клавиатуру строки при использовании всех известных мне автоматических конфигураторов XFree. И потому я решил вернуться к истокам - то есть описанию отдельных компонентов настройки (первый метод, по Ивану). Для чего в секции "Keyboard" истребил все автоматически сгенерированные строки, за исключением

    Protocol    "Standard"

AutoRepeat  250 30

LeftAlt        Meta
RightAlt       Meta
ScrollLock     Compose
RightCtl       Control

уделив особое внимание искоренению XkbDisable, что, впрочем можно сделать и просто знаком комментария (#). И вписал руками следующие строки:

    XkbKeycodes     "xfree86"
XkbTypes        "complete"
XkbCompat       "complete"
XkbSymbols      "en_US(pc104)+ru(winkeys)+group(caps_toggle)"
XkbGeometry     "pc(pc104)"

После этого русские буквы вводились нормально, в Windows-раскладке, переключаясь с латиницы на кириллицу клавишей CapsLock. Каковая, будучи нажатой в комбинации с Shift, обретала свою первозданную функцию.

Правда, благодать эта продолжается только до первой переустановки разрешения X'ов через DrakConf. После чего клавиатурная секция возвращается к прежнему безобразию вида примерно такого:

    XkbRules    "xfree86"
XkbModel    "pc105"
XkbLayout   "us"
XkbVariant  ""
XkbOptions  ""

Однако путь исправления был известен. И, что характерно, если менять разрешение экрана через клавиши Control+Alt+(серый+), никакой такой порнографии не наблюдается. Правда, тогда нельзя и выставить разрешение выше максимального, определенного через DrakConf.

Чтобы избавиться от этой докуки раз и навсегда, я установил в DrakConf максимально возможное разрешение (1280x1024), выправил последний раз XF86Config и отныне переключаю разрешение только через клавиатуру. Чего советую всем пользователям Mandrake версии 7.2. По крайней мере до тех пор, пока Алексей Новодворский и его коллеги не доведут русификацию этого дистрибутива до ума.

Все сказанное выше относилось к русификации X Window версии 3.3.6. Которой я некоторое время пользовался, поскольку версия 4.01 по так и оставшимся для меня непонятным причинам работала с моей видеокартой плохо. Однако ничто не вечно под луной: и моя чехарда с винчестерами закончилась.

До этого на протяжении более чем полутора месяцев каждую неделю у меня появлялся новый винт. Каковой я несколько дней мучал (посредством установки какой-либо новой системы - лучшая тренировка в работе, не так ли?), а потом ставил на него гриф "Для служебного пользования" и относил по месту принадлежности - на службу. Однако наконец ситуация устаканилась (к счастью или к сожалению - вопрос спорный), и в моей машине поселилось то, что и было изначально - 15-гигабайтник IBM и 8-гигабайтник Fujitsu. Правда, девственно чистые, вернее, с ошметками Виндов.

И в очередной раз встал вопрос об основной операционной системе для работы. Возвращаться к Mandrake 7.0/RE не хотелось по ряду причин. Первой из которых было то, что я успел подарить установочный ее диск. И поставил я на главный винчестер Mandrake 7.2 в оригинальном исполнении (поскольку русская его версия тогда не была еще заявлена даже в качестве беты). И в очередной раз решил попробовать поставить X'ы 4-й версии.

Которые неожиданно заработали стабильно и без сбоев. Естественно, встал вопрос о их русификации. Каковой также решился неожиданно просто. Для этого методами мануальной терапии в файле XF86Config следовало вписать:

Section "InputDevice"

Identifier "Keyboard1"
Driver      "Keyboard"
Option "AutoRepeat"  "250 30"
#    Option "XkbDisable"

Option "XkbRules" "xfree86"
Option "XkbModel" "pc105"
Option "XkbLayout" "ru"
Option "XkbVariant" "winkeys"
Option "XkbOptions" "grp:caps_toggle"
EndSection

- и дело в шляпе. Разумеется, строка #Option "XkbDisable" не обязательна - она осталась как наследие изначальной русификации создателей.

Должен заметить, что попытки автоматического конфигурирования X'ов 4-й версии я даже не предпринимал. Хотя, как показала практика (правда, на другом дистрибутиве), программа XConfigurator дает удовлетворительный результат (хотя и требует ручной доводки). XF86Setup и пробовать не стоит - в существующем виде она в 4-й версии просто не работает. Ну а про DrakConf я уже говорил - любые манипуляции с ним в отношении X Window приводят к сбою всех клавиатурных настроек в отношении русского языка.

Так что все оказалось просто. И на свои потуги по редактированию Xmodmap я нынче смотрю с легкой усмешкой. Хотя ряд полезных уроков из них и извлек. Однако наступать на мои грабли никому не советую - лучше просто воспользоваться рекомендациями из заключительной части заметки. Они проверены практикой и работают в 4-й версии X'ов не только в Mandrake, но и в ASPLinux, о котором надеюсь написать в ближайшее время.


Mandrake и Mandriva

. .