Данное действо затевалось с одной целью - переключать раскладки в emacs так же, как и в иксах, но чтобы при этом работали хоткеи. Несмотря на, казалось бы, готовые рецепты (большое спасибо @Juev ) - мне пришлось около часа ковыряться в системных скриптах, разбираясь "кто на ком стоял". Написание данного поста происходило уже в настроенном емаксе :)
* Ставим необходимые пакеты:
sudo aptitude install ibus ibus-gtk ibus-qt4 ibus-m17n im-switch m17n-contrib
остальное, судя по всему, затянется по зависимостям
* Включаем нужный режим ввода:
im-switch -z all_ALL -s ibus
Данное действие создаст в ~/.xinput.d/ симлинк all_ALL на файл с нужным методом ввода /etc/X11/xinit/xinput.d/ibus. При запуске иксовой сессии скрипт /etc/X11/Xsession.d/80im-switch запускает нужный метод ввода.
На этом предварительная настройка для пользователей KDE/GNOME/etc закончена, после перезапуска иксовой сессии iBus должен активироваться и заработать (появится иконка в трее).
* Xsession.d
Для любителей автозапуска приложений из ~/.xsessionrc ещё придётся поколдовать:
Дело в том, что запуск скрипта ~/.xsessionrc (а точнее "родительского" /etc/X11/Xsession.d/40x11-common_xsessionrc) происходит раньше чем запуск /etc/X11/Xsession.d/80im-switch, в связи с чем ibus не будет работать для приложений запущеных из ~/.xsessionrc (а у меня там xbindkeys, который, грубо говоря, запускает всё).
Остаётся либо использовать DE/WM-зависимый автозапуск (это не наш метод), либо править системные скрипты (что я не люблю делать без особой необходимости), либо сделать так, чтобы нужные переменные окружения выставлялись в скрипте /etc/X11/Xsession.d/40x11-common_xsessionrc.
Смотрим Shebang скрипта - "#!/bin/sh", sh у меня является ссылкой на dash, смотрим man dash, и видим, что dash (как и sh) при запуске выполняет скрипт ~/.profile. Вот в него-то мы и засунем нужные переменные:
export GTK_IM_MODULE=ibusexport XMODIFIERS=@im=ibusexport QT_IM_MODULE=ibus
* Теперь ...
нужно отрубить иксовую переключалку, у меня этим занимается setxkbmap (опять же, из принципа - не лезть лишний раз в системные настройки).
было:
setxkbmap us,ru -option "grp:toggle,compose:rwin,ctrl:nocaps"
стало:
setxkbmap us,ru -option "compose:rwin,ctrl:nocaps"
перезапускаем иксовую сессию (ну или свой лаунчер в нужном окружении)
* Настраиваем iBus
ibus-setup
Мне в данный момент достаточно одного метода ввода: "русский - kbd", выставляем, перезапускаем демона - вуаля, по ctrl-space (и правому Alt, кстати) переключается (у меня :) раскладка.
* Emacs
И вроде все счастливы, вроде все пляшут, но только хоткеи в Емаксе (из-за чего всё и затевалось) не пашут.
отрубаем для emacs использование ibus (правильнее сказать - xim)
echo 'Emacs*useXIM:false' >> ~/.Xdefaults && xrdb -load ~/.Xdefaults
прописываем нужный метод ввода в файл инициализации:
(setq default-input-method "russian-computer" )
и пользуемся внутренней переключалкой emacs
только неудобно это - переключать раскладку двумя клавишами (C-\). Хочется чего-то более простого и привычного. Для того, чтобы Xorg считать Alt_R не модификатором, а самостоятельной клавишей, добавим в автозапуск такую строчку:
xmodmap -e "keysym Alt_R = F13"
После чего в ibus-setup выставляем переключалкой клавиатуры наш новоявленный F13.
Для emacs:
(global-set-key (kbd "<f13>") 'toggle-input-method)