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


15

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

在此之前(我不记得确切的版本),我能够使用xkb-witch切换键盘布局,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

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

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

setxkbmap us,ru
setxkbmap ru,us

但是gnome Shell无法识别该更改,并且在布局指示器中显示了错误的语言。

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

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

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

Answers:


9

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

感谢您的回答-它为我节省了很多搜索时间!这就是如何切换到最后使用的输入法: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命令查看所有可用的布局。

必须注意,这种方法虽然可以可靠地起作用,但它不会更改语言指示符。


这与setxkbmap us-之后无法使用标准快捷方式更改布局相同。
sanmai

@sanmai不太一样-使用不可能切换到需要IME的语言(日语,中文等)setxkbmap。此外,setxkbmap可以在现代WM环境中充当普通的越野车,有关详细信息,请参阅问题。
弱者为莫妮卡(Monica)

无法评论默认快捷方式无效的问题-我在使用的每个布局中都使用了自定义快捷方式。
Undercat为莫妮卡(Monica)

好的,不一样,但是仍然不能使用默认开关。如您所知,日语键盘上只有尽可能多的额外按键,对于其他布局,我仍然必须使用默认开关。
sanmai

3

使用gsettings

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

$ gsettings set org.gnome.desktop.input-sources sources '[]'

当我尝试此操作时,无论setxkbmap后来输入了多少命令,我的Gnome终端都卡在QWERTY上,直到我通过“设置”对话框将输入源放回去。
西拉斯·布朗


0

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

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

对于Dvorak,请使用us+dvorak(或者gb+dvorak如果您在英国,则可以使用)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.