我使用多种键盘布局 - en、cs、no、zh,我想在每个键盘布局之间切换使用不同的快捷键,例如
- Ctrl-Shift-1 - 英语
- Ctrl-Shift-2 - 捷克语
- Ctrl-Shift-3 - 挪威语
- Ctrl-Shift-4 - 中文
这样,我就可以非常快速地在布局之间切换,而不必像使用 Opt-Space 循环开关那样跟踪我实际使用的布局。
在 20.04 中我使用了以下脚本,但它似乎在 22.04 中不起作用
gdbus call --session --dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval \
"imports.ui.status.keyboard.getInputSourceManager().inputSources[$1]"
知道如何在最新版本中实现同样的目标吗?
答案1
我设法从其他答案中获得了灵感,从而使这项工作得以完成。遗憾的是,它们缺少一些细节,因此我将在此总结为键盘布局分配键盘快捷键的步骤:
确保你已经安装了所有需要的键盘布局。单击语言按钮时,它们应该显示在顶部栏中。
下载GNOME 扩展 Eval-GJs:此扩展不在官方 Gnome Shell 扩展网站“extensions.gnome.org”上,因此您必须从 github 下载/克隆 repo。
按照 README.md 中的说明以普通用户身份安装扩展:
cd eval-gjs-main
make install
这会将其复制到你的主目录内的文件夹中:~/.local/share/gnome-shell/extensions
- 通过执行以下命令确定你的 gnome 版本:
gnome-shell --version
- 编辑 metadata.json
~/.local/share/gnome-shell/extensions/[email protected]/
在行后的数组中插入您的确切 gnome 版本"shell-version"
。
注销,然后重新登录。
- 启动扩展管理器(gnome-extensions-app)如果你没有,请安装它,使用以下命令:
sudo apt install gnome-shell-extension-prefs
启用扩展。注意:如果您的确切 gnome 版本不在 metadata.json 中(如上所述),则扩展不会显示。
创建以下 bash 脚本
change-layout.sh
并授予其执行权限:
#!/bin/bash
gsettings set org.gnome.desktop.input-sources current "$1"
gdbus call --session --dest org.gnome.Shell \
--object-path /dev/ramottamado/EvalGjs \
--method dev.ramottamado.EvalGjs.Eval \
"imports.ui.status.keyboard.getInputSourceManager().inputSources[$1].activate()"
- 测试脚本。运行
change-layout.sh 0
对于第一个键盘布局,在 OP 的情况下是英语,
change-layout.sh 1
对于第二个布局等等
- 转到
Gnome settings -> Keyboard -> View and Customize shortcuts -> Custom Shortucts
,然后分配所需的键盘快捷键并使用上述命令之一来获得所需的键盘布局。
答案2
您可能缺少activate()
命令的一部分:
gdbus call --session --dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval \
"imports.ui.status.keyboard.getInputSourceManager().inputSources[$1].activate()"
答案3
首先问题是,从 GNOME 41 开始,dbus 方法 Eval() 现在受到MetaContext:unsafe-mode
属性的限制(请参阅此犯罪)。
对我有用的解决方案:
- 安装GNOME 扩展 Eval-GJs- 此扩展提供了不受限制的 Eval() dbus 方法,用于在合成器中运行任意代码。
- 重写布局切换脚本以使用上述扩展
gdbus call --session --dest org.gnome.Shell \
--object-path /dev/ramottamado/EvalGjs \
--method dev.ramottamado.EvalGjs.Eval \
"imports.ui.status.keyboard.getInputSourceManager().inputSources[$1].activate()"
答案4
我创建了 GNOME 扩展来直接在 4 种输入法之间切换。由于相关的 javascript 代码是在没有 shell 命令的情况下执行的gdbus
,因此不需要使用不安全模式。
- https://github.com/osamuaoki/inputmethod-shortcuts
- https://extensions.gnome.org/extension/6066/shortcuts-to-activate-input-methods/
现在,快捷方式可以配置。