Самое же главное, даже полное потрошение интерактивного Редактора настроек способа ввода ни на шаг не приблизило нас к главной цели: нахождению возможности смены варианта раскладки кириллической клавиатуры. Однако оно дало нам направление дальнейших поисков: как можно видеть на примере США, Турции и других цивилизованных стран, различные варианты раскладок в 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. Хотя, конечно, при этом и приходится поступаться всё тем же основополагающим принципом:
Икс - он и в Африке Ху
Надеюсь, присноблаженная Нина Андреева простит меня за столь прихлёбный плюрализм...