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

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

我使用的是 gnome 3.22.1,但从 3.18 开始就存在问题。

在此之前(不记得确切的版本)我可以使用切换键盘布局xkb女巫,在底层使用 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

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

我发现了一种“hacky”方法来更改布局:

setxkbmap us,ru
setxkbmap ru,us

但 gnome shell 不知道该更改,并在布局指示器中显示错误的语言。

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

此时我陷入困境。我的技术不够熟练,无法识别 gnome shell 代码中的问题。我什至不确定这是(gnome shell)的问题。

我想要的是一个侏儒感知从终端切换键盘布局的方法。有人能指出我正确的方向吗?我应该将其归档为错误(尤其是键盘布局无法通过 gsettings 更改的事实)吗?

答案1

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

这将激活第 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()"

答案2

如果您使用 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

必须注意的是,这种方法确实不是更改语言指示器,尽管它在其他方面工作可靠。

答案3

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

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

对于德沃夏克,请使用us+dvorak(或者gb+dvorak如果您在英国,或其他地方)。

答案4

我认为你应该尝试sudo dpkg-reconfigure keyboard-configuration

相关内容