如何从命令行更改 gnome 3 中的键盘布局

RGB*_*GBD 20 gnome3 keyboard-layout

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

您将获得 3 到 20 次“成功”的布局切换,具体取决于您的幸运程度。

在谷歌搜索这个问题后,我提出以下建议

gsettings set org.gnome.desktop.input-sources current 0
Run Code Online (Sandbox Code Playgroud)

设置正在更改,但布局保持不变。

我找到了一种“hacky”方法来更改布局:

setxkbmap us,ru
setxkbmap ru,us
Run Code Online (Sandbox Code Playgroud)

但是 gnome shell 不知道这种变化,并且在布局指示器中显示了错误的语言。

我已经发布了关于这个问题(抱歉,没有足够的声誉,https://bbs.archlinux.org/viewtopic.php?pid=1657582 https://github.com/ierton/xkb-switch/issues/15),但没有得到任何好的答案。

在这一点上,我被卡住了。我不够熟练,无法识别 gnome shell 代码中的问题。我什至不确定这是(gnome shell 的)问题。

我想要的是一种gnome-aware方式来从终端切换键盘布局。有人可以指出我正确的方向吗?我是否应该将此作为错误提交(尤其是无法通过 gsettings 更改键盘布局这一事实)?

san*_*mai 15

由于 gnome-shell 在 DBus 上公开了一个可以访问所有变量的 JS eval 接口,因此可以使用以下命令实现这一壮举:

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()"
Run Code Online (Sandbox Code Playgroud)

这将激活第 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()"
Run Code Online (Sandbox Code Playgroud)

  • 从 gnome-shell 40 升级到 41 后,这些命令不再起作用,因为出于安全原因,Gnome 限制使用 eval。可能的解决方法是将它们包装到自定义扩展中。我将切换器包装到最后使用的布局:https://gist.github.com/Envek/85f40478d1c8b9658621190569046447 (4认同)
  • 感谢您的回答 - 它为我节省了很多谷歌搜索!这是如何切换到上次使用的输入法:`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()"` (2认同)

und*_*cat 8

如果您使用 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
Run Code Online (Sandbox Code Playgroud)

您可以使用该ibus list-engine命令查看所有可用的布局。

必须指出这种方法并没有改变语言的指标,但它工作可靠,否则。


小智 5

即使您之前没有使用鼠标设置过该输入法,您也可以在命令行上设置并切换到该输入法:

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

对于 Dvorak,请使用us+dvorak(或者gb+dvorak如果您在英国,或者其他任何地方)。


xae*_*xae 4

使用gsettings

设置org.gnome.desktop.input-sources.sources列表“[]”,允许您使用X 服务器键盘配置,而无需gnome-shell尝试配置它,因此您可以像以前一样进行操作。

$ gsettings set org.gnome.desktop.input-sources sources '[]'
Run Code Online (Sandbox Code Playgroud)