OpenSolaris: Как подружиться с тётей Клавой

Алексей Федорчук

2008-12-24

назад | к началу

Самое же главное, даже полное потрошение интерактивного Редактора настроек способа ввода ни на шаг не приблизило нас к главной цели: нахождению возможности смены варианта раскладки кириллической клавиатуры. Однако оно дало нам направление дальнейших поисков: как можно видеть на примере США, Турции и других цивилизованных стран, различные варианты раскладок в IIIM реализуются как отдельные "языки" универсального языкового инджина (unitle). И если для русского таких "языков", кроме умолчального, не предусмотрено — так что же, спасение утопающих — дело рук самих утопающих. То есть их надо создать собственноручно — говоря по-простому, изготовить подходящую раскладку клавиатуры. Остаётся только определить, как это сделать и куда её потом прикрутить.

Элементарное логическое рассуждение, доступное не только мистеру Холмсу, но и доктору Ватсону, показывает, что IIIM должен иметь некие конфигурационные файлы. И действительно, таковые находятся — как ни странно, в каталоге /etc/iiim/. Содержание его следующее:

$ ls -l /etc/iiim/
-rw-r--r-- 1 root sys    4303 2008-11-20 03:31 client.xml
-rw-r--r-- 1 root sys    1931 2008-11-20 03:31 iiimd.xml.conf
-rw-r--r-- 1 root sys  187781 2008-12-19 21:13 layoutdata.xml
-rwxr-xr-x 1 root sys     602 2008-11-20 03:31 xsession

Как нетрудно догадаться, первые три из приведенных файлов — конфиги в формате XML, последний же, имеющий бит исполнения — сценарий, обеспечивающий запуск IIIM при старте сеанса Иксов. Рассмотрение содержимого конфигов приводит к выводу, что iiimd.xml.conf нас не интересует: он отвечает за работу серверной части IIIM. Знакомство с файлом client.xml, в котором имеют место быть общие настройки клиентской части IIIM по умолчанию, также отложим до лучших времён. А вот layoutdata.xml — это как раз то что нам сейчас нужно: именно в нём находятся раскладки клавиатуры для разных "языков".

Правда, просмотреть его содержимое через обычный пейджер, например, через

$ less /etc/iiim/layoutdata.xml

будет несколько затруднительно: перед нашими глазами предстанет нечто, подобное изображённому на рис. 12.


Рис. 12. Содержимое файла /etc/iiim/layoutdata.xml при просмотре в программе less

Однако вспоминаем что перед нами — обычный xml-файл, который, несмотря на отсутствие привязанной к нему таблицы стилей, можно как-то просмотреть в обычном же браузере (рис. 13).


Рис. 13. Содержимое файла /etc/iiim/layoutdata.xml при просмотре в браузере

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


Рис. 14. Файл /etc/iiim/layoutdata.xml: секция Russian

Формат записи для каждой секции файла интуитивно понятен. Сначала идёт определение "языка" в том виде, в каком оно появится во вкладке Клавиатура Редактора настроек способов ввода (см. рис. 8):

<lo alg="true" type="Russian">

Далее следует описание каждой физической клавиши, начиная с её raw скан-кода (как это именуется в терминологии xkb):

<key sym="AB01">

и генерируемых ею скан-кодов "обработанных", просто при нажатии и в сочетании с клавишами-модификаторами Shift и переключателем групп:

<c1>7a</c1> код клавиши AB01
<c2>5a</c2> код клавиши AB01+Shift
<c3>44f</c3> Mod+код клавиши AB01
<c4>42f</c4> Mod+код клавиши AB01+Shift

Дальше всё легко и просто: надо банально открыть файл layoutdata.xml в любом (или любимом) текстовом редакторе, отыскать в секции Russian key sym клавиши, коды, генерируемые которой, мы хотим изменить, и, руководствуясь Final Unicode 5.1 names list, проделать это.

Правда, на этой "просторной, дороге торной", нас будут поджидать кое-какие колдо...бины и вы...бины. Первая из них: файл /etc/iiim/layoutdata.xml записан в виде одной (и очень длинной) строки, и по нормальному отредактировать его в каком-либо штатном редакторе OpenSolaris очень затруднительно. Я, если честно, эту колдо...бину преодолел, поступившись принципами, как прихлёбный плюралист. А именно, перезагрузился во FreeBSD и спокойно отредатировал этот файл в редакторе Geany. Но, как будет видно чуть позже, то же самое можно проделать, не покидая OpenSolaris.

Вторая вы...бина — определение того, а какой же клавише на физической клавиатуре соответствует raw-код, которому мы хотим приписать новые значения скан-кодов?

Некоторое время я размышлял над этим машинально перебирая страницы вывода на поисковые запросы в Google. И в результате наткнулся на статью Хавьера Акосты (Javier Acosta) Customizing Input Methods in Solaris and OpenSolaris, который ещё до меня решал подобную проблему: преобразование одного варианта раскладки словацкой клавиатуры в другой. Правда, его задача была существенно проще — всего и требовалось, что поменять местами клавиши Y и Z. Но зато он привёл следующую картинку (рис. 15):


Рис. 15. Соответствие кейкодов клавишам на клавиатуре

Заодно он предложил и способ конвертации файла layoutdata.xml в вид, пригодный для "человеческого" редактирования, с последующим возвращением его взад.

И вот теперь действительно — всё остальное дело техники и толики терпения. Можно отредактировать умолчальную (то есть базовую) раскладку, как душе угодно — изготовив из неё один из стандартных вариантов (winkeys, typewriter, phonetic). А можно, пользуясь полной свободой и легкостью процедуры, сделать раскладку своей мечты. Чем я, собственно и занялся — раньше как-то всё руки не доходили: взяв за основу базовую раскладку, перенес все знаки препинания на нижний регистр.

Я, конечно, понимаю, что голубая мечта о розовой раскладке — у каждого своя. Почему и не предлагаю результаты своих упражнений ко всеобщему использованию. Тем более, что всё равно это своего рода... ну если не костыль, а нечто вроде подпорки. И общим решением проблемы служить не может. Хотя мои личные проблемы этот способ решил полностью.

А общее решение проблемы вариантов кириллических раскладок видится мне примерно в таком ракурсе: в файле /etc/iiim/client.xml следует определит дополнительные "языки" для Великого и Могучего, и на каждый такой язык сочинить подходящую раскладку по описанному выше способу: Russian/Win, Russian/TW, Russian/Ph (названия, разумеется, чисто условные). Не очень понятно, почему этого не сделала команда русификации Solaris/OpenSolaris — видимо, русский язык они рассматривают менее значимым, нежели, скажем, турецкий. Думаю заняться этим в дни катастрофически приближающегося всенародного рождественского запоя.

А подводя итог, резюмирю базар: несмотря на непривычность и некоторую нелогичность, метод способов ввода (IIIM) с практической стороны вполне удобен. В частности, "заказные" раскладки в нём делать гораздо проще, нежели редактировать языковые файлы из каталога symbols при использовании xkd. Хотя, конечно, при этом и приходится поступаться всё тем же основополагающим принципом:

Икс - он и в Африке Ху

Надеюсь, присноблаженная Нина Андреева простит меня за столь прихлёбный плюрализм...

назад | к началу