|
|||||||
Переключение раскладки клавиатуры через консольную команду в Linux
Время создания: 11.11.2020 17:24
Текстовые метки: linux, клавиатура, раскладка, язык, переключение, консоль, команда
Раздел: Компьютер - Linux - Bash - Кодировки и локализация
Запись: xintrea/mytetra_syncro/master/base/1605104646qg2htcz0nq/text.html на raw.github.com
|
|||||||
|
|||||||
Переключение через setxkbmap Вариант команды переключения на язык RU: setxkbmap -layout us,ru Проблемы этой команды:
Есть виртуозы, которые говорят, что работают следующие команды: setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle' setxkbmap -layout 'ru,us' -option 'grp:ctrl_shift_toggle' Якобы, в итоге и переключение остаётся, и текущая раскладка меняется. Но потом они убеждаются, что такой вариант работает правильно лишь тогда, когда текущая раскладка английская, иначе раскладки меняются ролями. Тогда пробуют добавить в эти команды принудительное начальное переключение на английскую раскладку: setxkbmap -layout 'us' && setxkbmap -layout 'ru,us' -option 'grp:ctrl_shift_toggle' setxkbmap -layout 'us' && setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle' Но такой способ тоже не работает: все так же проявляется зависимость от текущей раскладки. И конечно, не оповещается индикатор раскладки клавиатуры. Переключение через setxkbmap + xdotool Единственный рабочий вариант - это настроить переключение раскладок на нужное сочетание клавиш, а потом вызвать нажатие данного сочетания клавиш через xdotool. Например: 1. Вешаем переключение раскладок на какую-то левую клавишу, например правый win: setxkbmap -layout 'us,ua,ru' -option 'grp:rwin_toggle' 2. Переключение срабатывает командами: xdotool key ISO_Next_Group В любом случае, если выяснить на какое сочетание клавиш навешено переключение раскладки клавиатуры, то переключить раскладку можно соответствующей командой. Например, если раскладка переключается сочетанием Ctrl+Shift, то переключить раскладку можно командой: xdotool key Ctrl+Shift Далее, например для переключения на нужную раскладку (например, при трех раскладках в системе), можно написать скрипт, который нужное количество раз виртуально нажмет клавиши переключения раскладки, чтобы выставилась заданная раскладка. Подробности: https://www.linux.org.ru/forum/desktop/4443738?cid=4443819 Переключение через xkb-switch Ранее существовала программа xkb-switch. Она делала ровно то что нужно: просто переключала раскладку клавиатуры. К сожалению, начиная с какого-то момента (примерно с появлением Debian 8) данная программа перестала включаться в дистрибутивы Debian, Ubuntu и им подобные. Опции команды следующие: Usage: xkb-switch -s ARG Sets current layout group to ARG xkb-switch -l|--list Displays all layout groups xkb-switch -h|--help Displays this message xkb-switch -v|--version Shows version number xkb-switch -w|--wait [-p] Waits for group change and exits xkb-switch -W Infinitely waits for group change xkb-switch -n|--next Switch to the next layout group xkb-switch [-p] Displays current layout group Примеры команд: xkb-switch -s us xkb-switch -s de Преимущества:
Возможно, для правильной работы xkb-switch потребуется настроенная переменная DISPLAY. Еще есть информация о том, что xkb-switch примерно с 2017 года перестал работать в Unity и в Gnome 3. В этом случае можно использовать следующую команду: qdbus org.gnome.SettingsDaemon.Keyboard /org/gnome/SettingsDaemon/Keyboard org.gnome.SettingsDaemon.Keyboard.SetInputSource 0 Взять исходники этой программы можно на GitHUb: https://github.com/grwlf/xkb-switch. Программа небольшая и должна легко собираться в любом Linux с X11 и установленнымии средствами разработки. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|