BASH - Переключение раскладки клавиатуры

Изображение пользователя MiraMaX166.

Бывают случаи, когда необходимо, чтобы при запуске той или иной программы в системе стояла определённая раскладка клавиатуры. Например это актуально для xfreerdp, где бывает путаница с раскладками (в системе русская, а сессия использует английскую раскладку клавиатуры). Чтобы этого избежать, написал небольшой скрипт без применения сторонних утилит и perl-скриптов. Скрипт был проверен на Ubuntu/Kubuntu 12.04 и 12.10

kbd=`xset -q | grep LED | awk '{print $10}' | cut -c 5`
echo $kbd
   if [ $kbd = 0 ]; then
    echo "EN"
   else   
    xdotool key ISO_Next_Group
    echo "RU->EN"
   fi

Описание
Скрипт возвращает в переменную kbd "0" (если выбрана дефолтная раскладка - у меня EN) или "1" (если выбрана вторая раскладка RU). Затем проверяется условие, у меня проверяется выбрана ли дефолтная раскладка (EN), если раскладка соответствует - скрипт возвращает эхо "EN" и уходит в стоп. Если же условие не выполняется то происходит смена раскладки клавиатуры, в результате чего раскладка становится английской. Цикл создан из- за того, что не всегда успевает отработать переопределение (таймауты), бывает, что на одних компах всё отрабатывает с первого цикла, а на некотрых нужно 2-3 цикла. Цикл позволяет дождаться смены раскладки и уйти в стоп. Залипания цикла не произойдёт.
Расписал для того, чтобы новичкам было проще подстроить скрипт под себя и свои нужды (у кого-то дефолтная раскладка RU, у кого-то более двух раскладок). Единственный недостаток - работает безотказно с двумя раскладками клавиатуры, для решения с неколькими раскладками нужно поиграться со строкой "xdotool key ISO_Next_Group", меняем ISO_Next_Group на ISO_Prev_Group, ISO_First_Group или ISO_Last_Group в зависимости от необходимого результата...

Оригинал статьи

Комментарии (2)

0
Гость - 31 Июль, 2014 - 21:27

на ubuntu 14.04 не работает. LED mask: 00000000 постоянно.

0
kot040188 - 31 Июль, 2014 - 22:00
Изображение пользователя kot040188.

Мне бы пригодился такой скрипт

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры