Как мне поменять клавиатуру из командной строки?

Как изменить раскладку клавиатуры из командной строки? Например, я хочу перейти с английского на иврит. Я могу сделать это из lightdm с маленькой иконкой в ​​углу моего экрана.

11 ответов

Решение

От терминала

Английский на иврит и наоборот с Alt + Shift

setxkbmap -option grp:alt_shift_toggle us,il

Вы можете увидеть все псевдонимы локали с этой командой

cat /etc/locale.alias

Больше информации о setxkbmap в руководстве

man setxkbmap

Вы можете найти все различные сочетания клавиш в следующих местах:

/usr/share/keymaps/i386/
/usr/share/kbd/keymaps/i386/
/usr/share/X11/xkb/symbols/

Чтобы изменить раскладку клавиатуры (например, на испанский) в командной строке Linux, введите следующую команду:

loadkeys es

Для X:

setxkbmap es

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

sudo dpkg-reconfigure console-setup

Ubuntu 13.10 или новее

Это работает лучше, чем setxkbmap с индикатором раскладки клавиатуры Gnome/Unity.

gsettings set org.gnome.desktop.input-sources current 0

0 - индекс макета (0 по умолчанию или топ-макет). Макеты индексируются начиная с 0.

Для удобства использования создайте псевдоним.

setxkbmap us,il -option "lv3:ralt_alt,grp:alt_shift_toggle"

Эта команда позволяет вам переключаться между английским и ивритом только с помощью правого alt+shift и спасать вас от левого alt+shift.

Кажется, что нет никакого стандартного инструмента CLI, но xkb-switch - это небольшой инструмент с открытым исходным кодом для выполнения этой работы. Только что протестировал его с Ubuntu 16.04.4 LTS, и он работает безупречно.

$ xkb-switch       # display current group
ua
$ xkb-switch -l    # list groups
us
ua
$ xkb-switch -s us # switch to a named group
$

Это выглядит лучше, чем другие решения, потому что setxkbmap <name> разрушает все варианты, и setxkbmap -layout <name>, хотя он сохраняет параметры, он по-прежнему не может изменить индикатор панели задач или grp_led если установлено.


Предостережение

Если твой ~/.config/kxkbrc использования LayoutLoopCount (например, он установлен меньше общего числа макетов, перечисленных в LayoutList), как это:

LayoutList=us,ua,th,de
LayoutLoopCount=2
Options=grp_led:scroll,grp:rwin_switch,compose:menu,lv3:ralt_switch,
        nbsp:level2,grp:rctrl_toggle,misc:typo

затем xkb-switch только позволит вам переключаться между макетами в текущей группе.


Вызвать при блокировке экрана

Я заметил ваш комментарий:

Непосредственно перед включением заставки я хочу переключиться на английский, чтобы после ввода пароля было легко набрать мой пароль.

Это была именно моя цель, поэтому вот ответ:
Для этого вам нужно всего лишь обернуть его в скрипт dbus-monitor как обсуждалось здесь.

Используя gsettings в 18.04+ с Gnome, вы можете добавлять и добавлять раскладки клавиатуры и переключаться между ними из командной строки или с помощью переключателя раскладки клавиатуры на рабочем столе.

1.Представляем раскладки клавиатуры и опции:

$ gsettings list-recursively org.gnome.desktop.input-sources
org.gnome.desktop.input-sources show-all-sources false
org.gnome.desktop.input-sources xkb-options ['terminate:ctrl_alt_bksp']
org.gnome.desktop.input-sources per-window false
org.gnome.desktop.input-sources current uint32 1
org.gnome.desktop.input-sources mru-sources @a(ss) []
org.gnome.desktop.input-sources sources [('xkb', 'es'), ('xkb', 'no')]

2. Добавление раскладок клавиатуры:

$ gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us'), ('xkb', 'no'),('xkb','gr')]"
$ gsettings get org.gnome.desktop.input-sources sources
[('xkb', 'es'), ('xkb', 'no'), ('xkb', 'gr')]

3. Изменение текущей раскладки клавиатуры из командной строки:

$ gsettings set org.gnome.desktop.input-sources current 1

Поскольку у нас сейчас есть 3 разных языка, у нас есть три варианта от 0 до 2, из которых 1 - испанский, 2 - норвежский и 3 - греческий. Таким образом, установка current в 1 выше делает Norwegian текущей раскладкой клавиатуры.

4. Перечисление всех возможных раскладок клавиатуры:

cat //usr/share/X11/xkb/rules/base.lst

5. Изменение раскладки клавиатуры с помощью сочетания клавиш:

Сочетание клавиш предварительно настроено для изменения раскладки клавиатуры. Настоящий ярлык:

$ gsettings get org.gnome.desktop.wm.keybindings switch-input-source
['<Super>space']

Новый ярлык может быть установлен с помощью gsetting set, но будьте осторожны, чтобы не использовать ярлык, который уже используется. Чтобы перечислить все используемые ярлыки:

$ gsettings list-recursively org.gnome.desktop.wm.keybindings
org.gnome.desktop.wm.keybindings cycle-windows-backward ['<Shift><Alt>Escape']
org.gnome.desktop.wm.keybindings minimize ['<Super>h']
org.gnome.desktop.wm.keybindings move-to-workspace-7 @as []
org.gnome.desktop.wm.keybindings move-to-workspace-8 @as []
org.gnome.desktop.wm.keybindings move-to-workspace-9 @as []
org.gnome.desktop.wm.keybindings move-to-monitor-left ['<Super><Shift>Left']
...

Для Ubuntu 18.04 + Gnome другие ответы у меня не сработали, но это сработало:

gdbus call --session --dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval \
 "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"

Аргумент в "inputSources[0]" - это индекс раскладки клавиатуры, такой же, как для решения gsettings.

Нашел это на Linux StackExchange.

Мне удалось найти наилучшую и наиболее стабильную комбинацию , и ibus. IBus позволяет вводить пиньинь и работает стабильно, в то время как setxkbmapвозвращает предыдущий набор раскладок клавиатуры.

Это важно при непосредственном переключении на язык, например Shift+Alt+1...4. Почему бы не использовать только IBus? Он постоянно зависает, потому что требуется перезагрузка, чтобы вернуть раскладки клавиатуры к жизни после переключения на нелатинскую раскладку клавиатуры. По крайней мере, в FireFox, см. Мне нужно выйти и перезапустить ibus-daemon, чтобы заставить ibus-пережевывать работу. #2319.

Отказ от ответственности: протестировано на OpenSuse Leap 15.3 xfce4 иxkb-switchкомпилируется из исходников

Чтобы это работало, вы должны создать файлы сценариев с этими командами и назначить сочетания клавиш для их запуска. Также вы можете отключить сочетание клавиш Alt + Shift в настройках переключения клавиатуры, чтобы устранить неожиданное поведение.

Итак, вот мой набор команд:

Shift+Alt+ 1- переключиться на английский язык:

      killall ibus-daemon
setxkbmap us,ru,pt
xkb-switch -s us

Shift+Alt+ 2- переключить на русский язык:

      killall ibus-daemon
setxkbmap us,ru,pt
xkb-switch -s ru

Shift+Alt+ 3- переключиться на китайский пиньинь:

      ibus-daemon -d
ibus reset-config
gsettings set org.freedesktop.ibus.general preload-engines "['libpinyin']"
setxkbmap us,ru,pt
xkb-switch -s us
ibus engine libpinyin

Shift+Alt+ 4- переключиться на португальский:

      killall ibus-daemon
setxkbmap us,ru,pt
xkb-switch -s pt

Также назначьте следующий сценарий для запуска при автозапуске системы.

      killall ibus-daemon

Все еще действует с Ubuntu 22.04 в виртуальном боксе 7.0:

Даже если вы выберете правильную клавиатуру при установке, вы по умолчанию получите на консоли qwerty-клавиатуру. Чтобы избавиться от него, введите, например, бельгийский:

      loadkeys be

Затем сохраните значение, чтобы оно оставалось постоянным.

      vi /etc/default/keyboard
/XKBLAYOUT
/us
cwbe<ESC>
ZZ

как показано в этом посте: Как навсегда настроить клавиатуру

Это может выглядеть хакерским, но работает как шарм:

      setxkbmap -layout ru && setxkbmap -layout ru,us
setxkbmap -layout us && setxkbmap -layout us,ru

Для принудительного переключения:

      setxkbmap -layout ru && setxkbmap -layout us && setxkbmap -layout us,ru

Просто из любопытства, зачем ты это делаешь? Зачем вам открывать терминал, и они вводят команду для переключения раскладки клавиатуры, когда вы можете сделать это простым сочетанием клавиш! Предполагая, что вы используете Ubuntu, это выглядит как Windows + Space

Другие вопросы по тегам