time

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

В 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.

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

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

blog comments powered by Disqus