Бывают случаи, когда необходимо, чтобы при запуске той или иной программы в системе стояла определённая раскладка клавиатуры. Например это актуально для xfreerdp, где бывает путаница с раскладками (в системе русская, а сессия использует английскую раскладку клавиатуры). Чтобы этого избежать, написал небольшой скрипт без применения сторонних утилит и perl-скриптов. Скрипт был проверен на Ubuntu/Kubuntu 12.04 и 12.10
Код:
|
kbd=`xset -q | grep LED | awk '{print $10}' | cut -c 5`
while [ $kbd -ne 0 ]
do
echo $kbd
setxkbmap -layout 'us' && setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle' >/dev/null 2>&1 &
sleep 2
kbd=`xset -q | grep LED | awk '{print $10}' | cut -c 5`
done
echo "EN" |
Описание
Скрипт возвращает в переменную kbd "0" (если выбрана дефолтная раскладка - у меня EN) или "1" (если выбрана вторая раскладка RU). Затем проверяется условие, у меня проверяется выбрана ли дефолтная раскладка (EN), если раскладка соответствует - скрипт возвращает эхо "EN" и уходит в стоп. Если же условие не выполняется то переменная передаётся в тело цикла и происходит переопределение раскладок клавиатуры и комбинация смены раскладок, в результате чего раскладка становится английской. Цикл создан из- за того, что не всегда успевает отработать переопределение (таймауты). Цикл позволяет дождаться смены раскладки и уйти в стоп. Залипания цикла не произойдёт.
Расписал для того, чтобы новичкам было проще подстроить скрипт под себя и свои нужды (у кого-то дефолтная раскладка RU, у кого-то более двух раскладок, у кого-то раскладка меняется не по Ctrl+Shift и т.д.)