вторник, 4 марта 2008 г.

xkb, узелок на память.

Вот здесь: http://linuxforum.ru/index.php?showtopic=49203 можно найти интересную серию заметок о настройке "правильного" переключения раскладок клавиатуры. Суть примерно в том что обычная "циклическая" схема переключения не так уж и удобна, ибо результат нажатия хоткея напрямую зависит от текущей раскладки, и в голове надо иметь не только желание: хочу английский, но и понимание того что "сейчас у меня украинский, и мне надо два раза нажать Ctrl+Shift чтобы получить русский". Вообще страшный вариант, поэтому мну украинской раскладки традиционно не имел, да и сейчас не имею - желание писать на украинском возникает чрезвычайно редко. Так вот. Гораздо проще оказывается когда нажатие какого-то определенного сочетания клавиш, включает какой-то четко определенный язык, не зависимо от текущей раскладки. У меня, например, нажал Caps Lock - включился английский, нажал Shift+Caps Lock - включился русский.Схема достаточно удобна, привыкнуть к ней гораздо проще чем кажется, правда, нужно чтобы такое было настроено на всех Десктопах, за которыми вы работаете :)

Настройка достаточно проста:
1. берем файлик http://muaddeep.googlepages.com/mysym (или одноименный файлик у sash-kan'а - они одинаковые), и ложим в /usr/share/X11/xkb/symbols.

2. открываем /usr/share/X11/xkb/rules/xorg , находим в нем секцию
 ! option        =       symbols 

и дописываем в нее:
mycaps                =       +mysym(caps_1)


3. открываем /etc/X11/xorg.conf и прописываем в XkbOptions, как-то так:
  Option          "XkbOptions"    "mycaps,grp_led:caps" 


Этого достаточно если вы пользуетесь каким-нить WM'ом, или KDE. Пользователи Gnome могут заметить что эти настройки сбрасываются и не работают в Гноме. Чтобы заставить эти настройки работать,
а так же добавить возможность выбора этой схемы через обычный Гномовский конфигуратор переключалки раскладок, я сделал следующее:

4. В Debian(и скорее всего в Ubuntu) открываем файл: /etc/X11/xkb/base.xml , в OpenSuSE 10.3 он же у меня нашелся в /usr/share/X11/xkb/rules/base.xml . Находим в этом xml'е секцию: Layout switching, и добавляем туда еще одну опцию:

<configitem>
<name>mycaps </name>
<description>My CapsLock switch </description>
</configitem>



После этого My CapsLock switch появитсяв диалоге Keyboard Preferences в layout options/Layout switching - что нам и нужно было. Возможно прийдется поиграться layout options/Caps Lock key behaviour - в Debian у мну там стоит что-то кастомное, в SuSE работает с дефолтом.

Ну и напоследок, там на форуме в обсуждении заметок, разгорелся спор, по поводу того нужна ли запоминалка раскладки для текущего окна, при не-циклическом переключении. Могу сказать: с запоминалкой удобнее, хотя без нее, при не-циклическом переключении не так смертельно опасно (:.

2 комментария:

sash-kan комментирует...

1. дополнение:
/etc/X11/xkb — там лежали настройки xkb в debian для xfree86. для xorg структура каталогов (в соответствии то ли с lsb, то ли fhs) немножко изменилась и теперь настройки лежат в /usr/share/X11/xkb. а /etc/X11/xkb в Вашей системе скорее всего — symlink на указанный каталог и остался, видимо, как результат апгрейда с xfree86 до xorg.
2. про base.xml:
к сожалению, за отсутствием какого-нибудь de, не могу проверить — может быть, можно рецепт чуть сократить и указывать в base.xml непосредственно mysym(caps_1). вместо mycaps и добавления связывающей строчки в $XKBROOT/rules/xorg
3. про запоминалки.
субъективно сие, субъективно.
уж скоро как три года пользуюсь нециклическим переключением и отчетливо понимаю, что переключение раскладки «в обход» моего выбора только сбивало бы (лично меня) с толку.

diesel комментирует...

> /etc/X11/xkb — там лежали настройки xkb в debian для xfree86.

ага. вот оно что, сегодня у себя на рабочем компе настраивал - тут система еще с времен саржа стоит, - в /etc/X11/xkb действительно бардак дублирующий /usr/share/X11/xkb (даже не симлинки). И помогло редактирование /usr/share/X11/xkb/rules/base.xml , надо дома посмотреть на etc/X11/xkb более пристально будет.