Бывают случаи, когда необходимо, чтобы при запуске той или иной программы в системе стояла определённая раскладка клавиатуры. Например это актуально для 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)
на ubuntu 14.04 не работает. LED mask: 00000000 постоянно.
Мне бы пригодился такой скрипт
Отправить комментарий