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

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

2008-12-24

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

  • локаль ru_RU.UTF-8, без малейших пережитков ISO'вщины, жалобы на которую мне доводилось слышать от опробователей просто Solaris'а;
  • набор хороших ttf-шрифтов Dejavu с поддержкой символов кириллицы (именно на соответствующие его гарнитуры указывают все alias'ы типа serif, sans и monospace);
  • русская раскладка клавиатуры и возможность переключения на неё (умолчальный переключатель — LControl+LShift);
  • индикатор текущей раскладки на одной из GNOME'вских панелей, служащий также дополнительным переключателем.

Казалось бы чего ещё желать русскоязычному (точнее, кириллопишущему) человеку, вне зависимости от его подданства и пятого пункта анкеты? Согласен, почти нечего, но:

  • раскладка клавиатуры по умолчанию — базовая Иксовая (так называемая basic Russian), совпадающая с DOS-маркировкой старых фабрично-русифицированных клавиатур; ныне изделий с такой маркировкой не найти даже в коллекциях антиквариата;
  • буква ё из этой раскладки почему-то изъята как класс — а какой же русский не любит буквы ё? кроме того, совершенно не задействованным оказался левый backslash;
  • под переключатель латиницы на кириллицу можно задействовать не все клавиши, традиционно используемые для этой цели; в частности, прикручивание этой функции к CapsLock имеет следствием эффект совершенно непредсказуемый;
  • наконец (и это самое главное), умолчальный вариант раскладки — единственно возможный; а ведь по сути своей это самая неудобная из всех раскладок, придуманных творческим гением руссифицирующего народа (все знаки препинания — на верхнем регистре).

Короче говоря, жить с такой раскладкой в пост-советской России категорически не комфортно. И когда я понял, что OpenSolaris для меня — это всерьёз и надолго, то начал искать пути к исправлению положения.

Предварительное Google'ние по теме показало, что путей таких имеется три:

  1. редактирование соответствующей секции файла /etc/X11/xorg.conf,
  2. использование утилиты setxkbmap, и наконец,
  3. детальная разборка с устройством штатного переключателя и его возможностями.

Начать я решил, разумеется, с первого способа, помятуя древний принцип, что Икс — он и в Африке who? — правильно, X, и везде через xorg.conf должен конфигурироваться более или менее одинаково. Однако если на счёт Африки, как показывает пример Ubuntu, это и верно, то за пределы Земли действие этого принципа не распространяется.

Начать с того что в свежеустановленном OpenSolaris файла /etc/X11/xorg.conf нет вообще. Действительно, современный Xorg позволяет, в принципе, запустить сам себя без всякого конфигурационного файла: тип графического чипа и характеристики видеоподсистемы определяются автоматически, управление шрифтами берёт на себя font-сервер, мыши и клавиатуры в базовой "железной" своей части одинаковы. Получается, что только для задания опций xkb он и нужен (а если, как мы увидим ниже, можно обойтись без xkb, то не нужен вообще).

Тем не менее, создать /etc/X11/xorg.conf труда не составляет. Для этого достаточно, подмазав режиссёра командой

$ su -

получить роль root'а, и дать команду

# Xorg -configure

Результатом её будет появление в каталоге /root прототипа Иксового конфига — файла xorg.conf.new с правильно (будем надеяться) определёнными базовыми параметрами — теми же самыми, которые автоматически определяются при запуске X-сервера без конфига. Остаётся только скопировать его куда следует

# cp /root/xorg.conf.new /etc/X11/xorg.conf

и отредактировать желательным образом секцию "InputDevice", которая в первозданном состоянии выглядит так:

        Identifier  "Keyboard0"
        Driver      "kbd"

Например, придать ей следующий вид:

Section "InputDevice"
	Identifier	"Keyboard1"
	Driver		"kbd"
	Option		"XkbRules"	"xorg"
	Option		"XkbModel"	"pc105"
	Option		"XkbLayout"	"us,ru"
	Option		"XkbVariant"	",winkeys"
	Option		"XkbOptions"	"grp:lwin_toggle"
EndSection

Здесь для русской раскладки используется вариант winkeys (при котором расположение клавиш совпадает с фабричной маркировкой на всех современных клавиатурах), а под переключатель латиница/кириллица задействуется левая win-клавиша — именно её я пользовал в этом качестве до начала разборок "Солнечной Клавой", ввиду невозможности задействовать ставший привычным CapsLock.

Перезагружаю X-сервер — то есть просто выхожу из сеанса пользователя, себя, любимого, и регистрируюсь в gdm по новой. На первый взгляд, всё стало почти как у Виктора Вагнера:

— Хорошо-то как, Клава...
— Да не Клава я!
— Всё равно хорошо...

Знаки препинания при русской раскладке стали вводиться в соответствие с их обозначением на клавишах, появилась столь любимая нами буква ё (правда говорят, что скоро введут йотированную б, и потребность в ней резко сократится), а левый backslash перестал генерировать нулевой символ. А после того как я скопировал свой неизменный уже ряд лет символьно-раскладочный файл path2/xkb/symbols/ru вместо оригинального /usr/X11R6/lib/X11/xkb/symbols/ru (в нём, в частности, этот самый левый backslash на нижнем регистре генерирует запятую — и какой альтернативно чудаковатый придумал поместить запятую на верхний регистр?), жизнь показалась прекрасной.

Тем не менее, удивительной она быть не перестала, и "Солнечная Клава" не замедлила показать, что она хоть и Клава, но не совсем та. Во-первых, штатный индикатор текущей раскладки перестал что-либо индицировать. Конечно, это не было полной неожиданностью — но, при отсутствии каких-либо световых индикаторов на самой клавиатуре (а таковые нынче становятся реликтами не только на ноутбуках, но и на десктопных моделях), оказалось вполне неприятным.

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

	Option		"XkbOptions"	"grp:caps_toggle"

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

В результате сочетания этих двух факторов эксперимент с настройкой раскладок через xorg.conf был признан неудачным. Да и в любом случае это было бы лишь временным костылеобразным решением — уж больно оно не укладывалось в стройную системы конфигурирования OpenSolaris. Хотя способ этот годится, если надо на скорую руку подключить привычный вариант кириллической раскладки из числа стандартных для xkb (а это, если исключить base, который есть и так, — winkeys, typewriter, phonetic), не использовать "запрещенные" переключатели (пока в качестве такового я выявил лишь CapsLock) и довольствоваться индикацией текущей раскладки через светодиоды клавиатуры.

Вариант с setxkbmap я оставил на самый крайний случай полной безвыходности. Во-первых, при беглом ознакомлении с его краткой (хотя и вполне восторженной характеристикой, данной Александром Ерёминым) я с лёту не уяснил его сути — то есть требовалось вникать в него путём чтения документации. То есть делать то же самое, что пришлось бы делать и при углублённом знакомстве со штатной переключалкой. А во-вторых, у меня сложилось впечатление, что это такая же подпорка, как и прямое редактирование xorg.conf — так что я решил таки заняться более детальной разборкой третьего варианта. Благо на деле с ним оказалось всё не так страшно, как выглядело поначалу.

вперед