Ответ
 
LinkBack Опции темы
Старый 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 вне форума   Ответить с цитированием
Старый 12.11.2012, 13:44      #2 (ссылка на пост)
Airvikar
Ламер
 
Аватар для Airvikar
 
Регистрация: 12.11.2012
Сообщений: 4
Airvikar на пути к лучшему
Информация

По умолчанию

То что было нужно, но не работает При русской раскладке уходит в бесконечный цикл (если запустить скриптом в терминале - сыпятся 1), при английской - работает
Ubuntu 12.04 (64-bit).
Airvikar вне форума   Ответить с цитированием
Старый 12.11.2012, 18:02    Топик Стартер ТС   #3 (ссылка на пост)
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™
Стрелка

Сообщение от Airvikar Посмотреть сообщение
То что было нужно, но не работает При русской раскладке уходит в бесконечный цикл (если запустить скриптом в терминале - сыпятся 1), при английской - работает
Ubuntu 12.04 (64-bit).
Хм, у меня такое было (скрипт отрабатывал только в en-раскладке), когда я пытался реализовать вот так:
Код:
kbd=`xset -q | grep LED | awk '{print $10}' | cut -c 5`
echo $kbd
   if [ $kbd = 0 ]; then
    setxkbmap -layout 'us' && setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle' >/dev/null 2>&1 &
    echo "EN"
   else
    setxkbmap -layout 'us' && setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle' >/dev/null 2>&1 &
    sleep 5
    xdotool key 'ctrl+shift'
    echo "RU->EN"
   fi
Попробуй так, может тебе поможет... Тут тупо происходит переопределение лэйоутов и эмуляция нажатия контр+шифт.
__________________
Хакер - это не профессия, а стиль жизни, в которой всё время идёшь вперёд, в которой испытываешь постоянный информационный голод и бросаешь вызов технологиям. Это путь бесконечной вереницы вопросов и ответов...


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 вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо MiraMaX166 за это полезное сообщение:
Airvikar (12.11.2012)
Старый 12.11.2012, 19:09      #4 (ссылка на пост)
Airvikar
Ламер
 
Аватар для Airvikar
 
Регистрация: 12.11.2012
Сообщений: 4
Airvikar на пути к лучшему
Информация

По умолчанию

Сообщение от MiraMaX166 Посмотреть сообщение
Попробуй так, может тебе поможет... Тут тупо происходит переопределение лэйоутов и эмуляция нажатия контр+шифт.
Да, скрипт сработал, только застопорился на 10 строке (xdotool key 'ctrl+shift'), ну это у меня xdotool не установлен.
Спасибо!
Airvikar вне форума   Ответить с цитированием
Старый 12.11.2012, 20:13    Топик Стартер ТС   #5 (ссылка на пост)
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™
По умолчанию

Рад был помочь
__________________
Хакер - это не профессия, а стиль жизни, в которой всё время идёшь вперёд, в которой испытываешь постоянный информационный голод и бросаешь вызов технологиям. Это путь бесконечной вереницы вопросов и ответов...


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 вне форума   Ответить с цитированием
Старый 03.12.2012, 19:37    Топик Стартер ТС   #6 (ссылка на пост)
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™
Лампочка

Последняя версия скрипта:
Код:
kbd=`xset -q | grep LED | awk '{print $10}' | cut -c 5`
echo $kbd
   if [ $kbd = 0 ]; then
    echo "EN"
   else
    sleep 5
    xdotool key 'ctrl+shift'
    echo "RU->EN"
   fi
Если раскладка меняется не по нажатию Ctrl+Shift - замените 'ctrl+shift' в строке "xdotool key '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 вне форума   Ответить с цитированием
Старый 13.12.2012, 20:15    Топик Стартер ТС   #7 (ссылка на пост)
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™
По умолчанию

Привожу последний пример переключения раскладки клавиатуры. Работа с лэйоутами отсутствует, пожалуй, это самый функциональный и безгеморный способ...
Код:
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
Единственный недостаток - работает безотказно с двумя раскладками клавиатуры, для решения с неколькими раскладками нужно поиграться со строкой "xdotool key ISO_Next_Group", меняем ISO_Next_Group на ISO_Prev_Group, ISO_First_Group или ISO_Last_Group в зависимости от необходимого результата...

Тему закрывать не буду - вдруг понадобится помощь, а по сабжу всё разжёвано и в нескольких вариантах...
__________________
Хакер - это не профессия, а стиль жизни, в которой всё время идёшь вперёд, в которой испытываешь постоянный информационный голод и бросаешь вызов технологиям. Это путь бесконечной вереницы вопросов и ответов...


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 вне форума   Ответить с цитированием
Ответ

Социальные закладки

Метки
bash, linux, автопереключение раскладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks Вкл.
Pingbacks Вкл.
Refbacks Вкл.

Быстрый переход


Реламный блок
 

Текущее время: 07:22. Часовой пояс GMT +6.


Rambler's Top100 Счётчик тиц

vBulletin Skin by MiraMaX166
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Время генерации страницы 0.11955 секунды с 23 запросами