Удобная смена раскладки в Ubuntu 10.10 (Maverick) Linux 15.12.2010

В Maverick что-то 'починили' и описанный тут способ переключения раскладки клавиатуры перестал нормально работать. setxkbmap после переключения раскладки выносил остальные раскладки и гномовский индикатор языка отказывался нормально работать.

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

Решения нашлось, хотя не сразу. На ЛОРе описана похожая проблема, основная идея заключается в назначении хоткея на процесс программного перебора раскладки до нужной. До Maverick все решалось проще, но, как написано в первом абзаце - не все коту масленица :).

Для начала нам понадобится маленькая утилита skb, которая возвращает текущую раскладку. Эту утилиту придется собрать из исходников, но перед этим нужны сорцы X11:

sudo apt-get install libx11-dev
wget http://plhk.ru/static/skb/skb-0.3.tar.gz
tar xfvz skb-0.3.tar.gz
cd skb-0.3
make
sudo make install

Следующий этап - выбор клавиши для циклической смены языка, можно сделать либо в стандартной gui'шной утилите, либо вот такой командой (которую придется добавить в автозагрузку)

setxkbmap -layout 'us,ua,ru' -option 'grp:rwin_toggle'

Для смены раскладки я выбрал правую клавишу win - у меня редко используется.

Установим утилиту xdotool, которая умеет генерить событие нажатия определенной клавиши

sudo apt-get install xdotool

На вход xdotool принимает код клавиши. Что бы узнать код нужной клавиши запускаем xev нажимаем нужную клавишу и смотрим ее код.

Список клавиш клавиатуры и назначенных на них действий в системе

xmodmap -pke

А теперь гвоздь программы - скрипт который умеет перебирать раскладки и включать нужную

#! /bin/sh

while [ `skb -1` != $1 ]
    do
        xdotool key ISO_Next_Group
    done

Делаем скрипт исполняем и создаем симлинк в /usr/local/bin/

chmod +x switch /home/proft/scripts/switchlayout.sh
sudo ln -s /home/proft/scripts/switchlayout.sh /usr/local/bin/

Пользоваться скриптом так

switchlayout.sh USA
switchlayout.sh Ukr
switchlayout.sh Rus

Теперь остается назначить в Keyboard Shortcuts удобные клавиши на вызов switchlayout.sh.

Получилось много действий для такого простого процесса, но оно того стоит.

Дополнительное чтиво

Цитата
Если ты дважды подумаешь, прежде чем один раз сказать, ты скажешь вдвое лучше.
Томас Пейн
Категории
Архив