Как изменить раскладку клавиатуры в GNOME 3 из командной строки

15

Я использую GNOME 3.22.1, но проблема существует с 3.18.

До этого (не помню точную версию) я мог переключать раскладку клавиатуры, используя xkb-witch , простое приложение, которое использует привязки X.org под капотом.

После 3.18, если вы запустите xkb-switch, раскладка клавиатуры не будет переключаться в gnome. Дальнейшие исследования показали, что переключение раскладки работает, но в течение очень короткого промежутка времени.

Если вы запустите этот скрипт:

for i in $(seq 1000); do
  lang=$(xkb-switch -s ru; xkb-switch);
  if [[ "$lang" == "ru" ]]; then
    echo $lang;
  fi;
done

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

После поиска этой проблемы я получил следующий совет :

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

Настройка изменяется, но макет остается прежним.

Я нашел один «хакерский» метод для изменения макета:

setxkbmap us,ru
setxkbmap ru,us

но оболочка gnome не знает об этом изменении и показывает неверный язык в индикаторе макета.

Я написал об этой проблеме (извините, недостаточно репутации, https: //bbs.archlinux.org/viewtopic.php? Pid = 1657582 https: //github.com/ierton/xkb-switch/issues/15), но не повезло получить хорошие ответы.

И в этот момент я застрял. Я не достаточно опытен, чтобы определить проблему в коде оболочки gnome. Я даже не уверен, что это проблема гномов.

То , что я хочу , это гном-Aware способ переключения раскладки клавиатуры от терминала. Может ли кто-нибудь указать мне правильное направление? Должен ли я регистрировать это как ошибку (особенно тот факт, что раскладка клавиатуры не может быть изменена с помощью gsettings)?

RGBD
источник

Ответы:

9

Поскольку gnome-shell предоставляет интерфейс JS eval в DBus, который имеет доступ ко всем переменным, это возможно с помощью следующей команды:

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()"

Который активирует 0-й макет и пр.

Кредит.


И вот как переключиться на последний использованный метод ввода (из комментариев):

gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager()._mruSources[1].activate()"
sanmai
источник
Спасибо за ваш ответ - это спасло меня от многих поисков! И вот как переключиться на последний использованный метод ввода:gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager()._mruSources[1].activate()"
Envek
4

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

# Set the layout to US English
ibus engine xkb:us::eng
# Set the input method to Japanese Mozc IME
ibus engine mozc-jp
# Set the layout to Russian
ibus engine xkb:ru::rus

Вы можете увидеть все доступные макеты с помощью ibus list-engineкоманды.

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

Undercat аплодирует Моника
источник
Это то же самое, что setxkbmap us- без способа изменить макет с помощью стандартных ярлыков после этого.
sanmai
@sanmai Не совсем то же самое - невозможно использовать языки, требующие IME (японский, китайский и т. д.) setxkbmap. Кроме того, setxkbmapв современных средах WM могут работать ошибки, см. Вопрос для подробностей.
Undercat аплодирует Моника
Хотя я не могу комментировать ярлыки по умолчанию, которые не работают - я использую пользовательские ярлыки для каждого макета, который я использую.
Undercat аплодирует Моника
Хорошо, не то же самое, но я все еще не могу использовать переключатель по умолчанию. Как вы, наверное, знаете, на японской клавиатуре столько же дополнительных клавиш, что и для других раскладок мне все еще нужно использовать переключатель по умолчанию.
sanmai
3

Используя gsettings.

Установка org.gnome.desktop.input-sources.sourcesв нулевой список «[]» позволяет вам использовать конфигурацию клавиатуры X-сервера, не пытаясь настроить ее с помощью gnome-shell , чтобы вы могли делать это, как и раньше.

$ gsettings set org.gnome.desktop.input-sources sources '[]'
XAE
источник
Когда я попробовал это, мой терминал Gnome застрял на QWERTY, независимо от того, сколько setxkbmapкоманд я набрал после этого, пока я не вернул источники входного сигнала обратно через диалог настроек.
Сайлас С. Браун
0

Я думаю тебе стоит попробовать sudo dpkg-reconfigure keyboard-configuration

Ромен Л.
источник
0

Вы можете настроить и переключиться на метод ввода в командной строке, даже если вы ранее не настраивали этот метод ввода с помощью мыши:

gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'ru')]"

Для Dvorak, используйте us+dvorak(или gb+dvorakесли вы находитесь в Великобритании, или что-то еще).

Сайлас С. Браун
источник