Как в убунту правильно сделать переключение языков? Хочу три вещи: переключение языков по капсу, индикатор в трее, и чтобы работали клавиатурные хоткеи в русской раскладке. Ubuntu 13.10.
Есть несколько проблем
1) Такое переключение работает ОК:
setxkbmap -layout "us,ru(winkeys)" -model "microsoft4000" -option "grp:caps_toggle,terminate:ctrl_alt_bksp,grp_led:scroll"
НО его не понимает системная переключалка, висящая в трее. Продолжает показывать на индикаторе ту раскладку, которую выставила сама в прошлый раз. Раскладка уже русская, а в индикаторе все еще светится En.
(зато есть плюс - в таком варианте в русской раскладке работают клавиатурные хоткеи)
2) С другой стороны, из гуевой настраивалки переключения нельзя отключить капслок, чтобы перебросить на него переключение языков. (в 12 можно было отключить через свойства раскладки, в 13.10 гуй другой и такой опции там нет).
А без выключения капса поле ввода хоткея на смену языка нажатия капса не видит.
Если попытаться отключить вручную, то если в ~/.Xmodmap сделать только строчку «remove Lock = Caps_Lock» (без сопутствующей «keysym Caps_Lock = 0xXXXX»), то это вызывает ошибку.
3) Повесил смену языка на хоткей (XF86Launch5), но при этом в русской раскладке перестают работать клавиатурные комбинации. (При ручном использовании setxkbmap этого не происходит!)
4) Попробовал сделать кейсим капслока на XF86Launch5. Казалось бы, отличное решение — не можем напрямую забиндить капслок, забиндим что-нибудь другое, а на капс сделаем кейсим. Но это не проканало. Говорит, XF86Launch5 — неправильный код. Попробовал вместо названия впечатать то, как видит его xev - т.е. 0x1008ff45. Ругается, говорит, неправильный код.
Вспомнив, что evdev умолчательно не видит коды более 255, побежал смотреть evtest /dev/input/event5 и ВНЕЗАПНО увидел, что даже там события программируемых клавиш не прилетают. Попытки записать нечто написанное ниже в рулзы тоже ничего не принесли, почему? (в данном случае активируются уже другие две программируемые кнопки - зум+ и зум-, из удобно вестиь на pgup/pgdown)
ACTION=="remove", GOTO="keyboard_end"
KERNEL!="event*", GOTO="keyboard_end"
ENV{ID_INPUT_KEY}=="", GOTO="keyboard_end"
SUBSYSTEMS!="usb", GOTO="keyboard_end"
SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
ENV{ID_VENDOR}=="Microsoft", ENV{ID_MODEL_ID}=="00db", RUN+="keymap $name 0xc022d pageup 0xc022e pagedown"
GOTO="keyboard_end"
Более простые вариации на тему тех же 0xc022d/0xc022e тоже не канают, оно просто туда не прилетает.
Еще есть вот такая бажная суидная извращенная утилита, которая, говорят, иногда работает:
sudo add-apt-repository ppa:rm-isaev/rawkeybind
sudo apt-get update
sudo apt-get install rawkeybind
но я пока не решился. Ну и почитать исходники надо, хз кто такое этот Исаев и каких троянов он туда понаписал, а так влооом...
5) По идее, xbindkeys ловит капс, и можно вызвать какую-нибудь внешнюю утилиту (кстати, как из командной строки поменять глобальную раскладку?). Но это а) тормозно б) извращение в) индикатор в трее не подхватит (если делать что-то с setxkbmap)
===
Есть подозрение, что у нормальных людей есть какое-то вменяемое ультимативное решение всех этих проблем с раскладками. Т.к. в /desktop не наблюдаются тысячи тем, посвященных этой псевдопроблеме, последнее нагугленное по ЛОРу относится к 2010 году с хардкорными решениями типа разных раскладок на keyup и keydown.
А говорят, арч для школьников, а в убунту все из коробки и не нужно красноглазить...