Показать сообщение отдельно
Старый 05.11.2012, 13:44      #1 (ссылка на пост)
MiraMaX166
Инквизитор
 
Аватар для MiraMaX166
 
Регистрация: 29.01.2008
Адрес: Омск
Сообщений: 2,304
MiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспоримаMiraMaX166 репутация неоспорима
Информация

Отправить сообщение для MiraMaX166 с помощью ICQ Отправить сообщение для MiraMaX166 с помощью AIM Отправить сообщение для MiraMaX166 с помощью MSN Отправить сообщение для MiraMaX166 с помощью Skype™
Стрелка BASH - Переключение раскладки клавиатуры

Бывают случаи, когда необходимо, чтобы при запуске той или иной программы в системе стояла определённая раскладка клавиатуры. Например это актуально для 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 и т.д.)
__________________
Хакер - это не профессия, а стиль жизни, в которой всё время идёшь вперёд, в которой испытываешь постоянный информационный голод и бросаешь вызов технологиям. Это путь бесконечной вереницы вопросов и ответов...


My PC: Fractal Design Define R6/ i9-9900K@5.00GHz/ ASUS MAXIMUS XI HERO (Wi-Fi)/ 64Gb RAM Dual DDR4 3000/ SSD Samsung EVO 860 250Gb + HDD WD Purple 4Tb/ nVidia GeForce RTX 2080 Ti FE 11Gb/ ASUS VG245Q 24" Full HD/ Sound Microlab Pro One
My Notebook: HP ENVY x360 15 (Ryzen 5 2500U@3,6GHz/ 16Gb RAM Dual DDR4 2400/ SSD M.2 Samsung CM871a 128Gb +HDD Seagate BarraCuda Pro 1Tb/ AMD Radeon Vega 8 1Gb/ FP 15.6" FHD / HP Pen)
My Server: HPE ProLiant MicroServer Gen8 (XEON E3-1265LV2@2.5~3.5GHz 8 threads/ 16Gb ECC RAM 1600/ HP P222 2Gb Cache FBWC 4x4TB Toshiba 4xRAID10/ ESXi 6.5U3/ iLO 4 v2.73)
My Phone: Samsung Galaxy Note 23 Ultra/ Android 13/ 256Gb + DeX Station + Galaxy Watch 46mm + Galaxy Buds Pro
My Tab: Samsung Galaxy Note 10.1 2014/ Android 5.1.1/ 32Gb/ Flash mSD 64Gb


Почему "Винда-отстой" кричат громче всех те, кто и в Линукс ничего не понимают...
Говорим спасибо и жмём на возле аватара или кнопочку
MiraMaX166 вне форума   Ответить с цитированием
 
Время генерации страницы 0.08660 секунды с 15 запросами