Как изменить текущую выбранную раскладку клавиатуры из командной строки?

12

У меня есть раскладки клавиатуры (две из них), и переключение между ними настраивается с помощью следующей команды:

setxkbmap -layout us,ru -option -option "grp:lctrl_lshift_toggle,ctrl:nocaps"

Теперь я хочу переключиться на usмакет, используя некоторую команду командной строки. Это возможно?

Рогач
источник

Ответы:

13

Вы можете использовать xkb-switch ( -nпереключается на следующую раскладку):

xkb-switch -n

или xkblayout-state ( set +1в вашем случае - для переноса ):

xkblayout-state set +1

или xteиз xautomation для имитации Control_L+ Shift_Lнажатие / отпускание клавиши:

xte 'keydown Control_L' 'keydown Shift_L' 'keyup Shift_L' 'keyup Control_L'
don_crissti
источник
xkblayout-state отлично, спасибо! Я просто использую xkblayout-state set 1, и я сразу получаю usмакет.
Рогач
2

Поиски Stack Exchange для kbdmap находят эту страницу без упоминания этого слова. Для ясности вот ответ (не совсем соответствующий тегу X11 вопроса, но он должен кому-то помочь)…

Когда ограничено виртуальной консолью

- без X.

kbdmap (1)

kbdmap, vidfont- передний конец для системной консоли и В.Т.

... позволяет легко устанавливать доступные раскладки клавиатуры ...

Действительно, это легко и (для меня, переход на раскладку клавиатуры в Великобритании) эффективно.

При использовании X

- например, с TrueOS Desktop на основе FreeBSD.

Из поста 5 в разделе Изменение раскладки клавиатуры? | Форумы FreeBSD (2015-08-03):

kbdmapдля консоли. setxkbmapэто утилита, которую вы хотите для X11. ...

Там это предупреждение, например , при переходе на U nited Королевство:

$ kbdmap
kbdcontrol: getting keymap: Inappropriate ioctl for device
You are not on a virtual console - expect certain strange side-effects
lang_default = en
dialect = en_...UTF-8
lang_abk = en

…

keymap="uk.kbd"
$ 
Грэм Перрин
источник
1

В зависимости от дистрибутива раскладок клавиатуры, команда

loadkeys <path/to/file>

loadkey /lib/kbd/keymaps/i386/qwerty/pt_PT.map.gz

Если я правильно помню. Также проверьте man-страницу для loadkeys, если вы хотите назначить определенные ключи для определенного поведения.

BitsOfNix
источник
Проблема в том, что после того, как я это сделал (например) loadkeys us, он сбрасывает настройки, которые я создал с помощью setxkbmap (две раскладки и переключение между ними)
Rogach
Насколько я знаю, это команда для изменения макетов, если у вас есть конкретный, то я думаю, что лучший способ будет иметь псевдоним в вашей оболочке, который будет вызывать loadkeys с вашими настройками. Пример: load_us будет загружать используемую клавиатуру и фактически будет вызывать loadkey /lib/kbd/keymaps/i386/qwerty/us.map.gz или аналогичный. И то же самое для другого макета.
BitsOfNix
Но как мне изменить настройки клавиатуры после этого? В настоящее время я меняю раскладки, нажимая Ctrl-Shift, используя винты loadkeys.
Рогач
Давайте сделаем шаг назад из командной строки. Я предполагаю, что вы упоминаете терминал tty. Это означает, что вы не используете xterm / terminology / gnome-терминал или любой другой эмулятор, но на самом деле вы находитесь в среде без X-сервера. Принимая это, вам нужно использовать loadkeys, в соответствии с вашим вопросом, я дал вам командную строку, то, что вы на самом деле хотите, похоже на сочетание клавиш. Если у вас есть определенные ключи для сопоставления, то вам нужно создать свои собственные макеты и затем загрузить их по запросу с ключами загрузки с точки зрения cli. Если вы хотите вместо этого ярлык, обновите свой вопрос.
BitsOfNix
Нет, я действительно использую графическое окружение и, в частности, gnome-терминал. Просто мне нужно программно менять макет X, реагируя на некоторые события - таким образом, tty не будет работать.
Рогач
0

Взгляните на эту статью под названием: « Изменение языка и раскладки клавиатуры на разных дистрибутивах», где вы найдете различные команды для изменения раскладки клавиатуры на разных дистрибутивах.

Большинство из этих команд представлены в виде графических интерфейсов, но, если посмотреть, большинство из них можно запустить и из командной строки. Например, я использую Fedora (дистрибутив на основе Red Hat). Команда system-config-keyboardпри запуске без аргументов показывает мне графический интерфейс.

Но если я запускаю system-config-keyboard --helpего можно запустить из командной строки тоже:

$ system-config-keyboard --help
Usage: system-config-keyboard [--help] [--noui] [--text] [<keyboardtype>]
       --help            Print out this message.
       --noui            Run in command line mode.
       --text            Run in text interface mode.

       <keyboardtype> options are: ar-azerty, ar-azerty-digits, ar-digits, ar-qwerty, ar-qwerty-digits, be-latin1, ben, ben-probhat, bg_bds-utf8, bg_pho-utf8, br-abnt2, cf, croat, cz-lat2, cz-us-qwertz, de, de-latin1, de-latin1-nodeadkeys, dev, dk, dk-latin1, dvorak, es, et, fi, fi-latin1, fr, fr-latin1, fr-latin9, fr-pc, fr_CH, fr_CH-latin1, gr, guj, gur, hu, hu101, ie, is-latin1, it, it-ibm, it2, jp106, ko, la-latin1, mk-utf, nl, no, pl2, pt-latin1, ro, ro-cedilla, ro-std, ro-std-cedilla, ru, sg, sg-latin1, sk-qwerty, slovene, sr-cy, sr-latin, sv-latin1, tj, tml-inscript, tml-uni, trq, ua-utf, uk, us, us-acentos

Поэтому, чтобы изменить раскладку клавиатуры на русскую, я мог запустить следующую команду:

$ system-config-keyboard ru
SLM
источник