这个问题已经被问过无数次了,所以我会尽量简短地回答。
我有两种输入布局、乌克兰语和英语,并且想要:
- 使用Caps Lock用于快速切换;
- 没有任何延误强加,我是一个快速打字的人;
- 没有模式错误:
- (任意数量的)CapsLock集合英语,
- (任意数量的)ShiftCapsLock集合乌克兰语;
- 查看标准小部件中的当前布局。
我已经尝试了三个 (!) GUI 来配置它,Gnome 设置、、gnome-tweak-tool
/ dconf-editor
。gsettings
都不起作用。Tweaks
随机崩溃。
做足功课
我也问过这个问题4年前14.04 LTS。从那时起,UI 弹出窗口就出现了,一切都崩溃了。现在我可以轻松配置有状态的 CapsLock切换,但即便如此,它还是会延迟,这让人很恼火。当我需要每句话切换 4-5 次语言时,它基本上无法使用。
此主题建议caps:none
使用 XKB 选项作为错误解决方法。我尝试过,无论是使用gsettings
CLI 和dconf-editor
,还是与 的组合grp:shift_caps_switch
XKB 选项。没戏。似乎有些东西胜过了那些核心 XKB 功能。
此主题提供caps:menu
XKB 选项,以便能够绑定CapsLock到Gnome Settings
→ 设备 → 键盘。它有点用,但 A) 它提供循环/状态切换;B) 每次切换时我都必须等待相当长的超时时间。
此主题询问我到底需要什么,但却没有得到答复,甚至更糟:因为与另外两个问题重复而被关闭(???)这两个问题都不相同,也没有给我一个可行的解决方案。你们怎么了?
有另一个完全匹配— 唉呀,也没有答案!
需求:清洁解决方案
答案1
在 Ubuntu 18.04 中,默认情况下有一个选项可以选择Caps_Lock和Shift+Caps_Lock来实现我们正在寻找的行为,即gnome-tweaks
。但这不起作用,也无法找到原因。
我可以通过以下解决方法来实现此行为。
请参阅此链接观看 20 秒视频。https://i.stack.imgur.com/bFSTt.jpg
首先在终端中检查以下命令是否正在改变输入语言。
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()"
和
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()"
嗯,他们正在工作。
Caps_Lock我们需要将这些命令绑定到和Shift+按键上Caps_Lock
xbindkeys
如果 xbindkeys 尚未安装,则可以通过以下方式安装sudo apt install xbindkeys
.xbindkeysrc
在 $HOME 文件夹中创建文件
touch ~/.xbindkeysrc
- 要知道键码/ID,不管它叫什么,
运行xbindkeys --key
后出现白框按下Caps_Lock按钮,对按钮也执行此操作Shift,然后复制键码/ID,如下所示
- 此步骤是可选的。禁用 Caps Lock。参见下面的 gif。如果未禁用 Caps Lock,当您多次按下该键时,它会在您尝试更改语言时切换。我已将其禁用。但这取决于您的兴趣。
- 打开文件
.xbindkeysrc
gedit ~/.xbindkeysrc
并根据上述步骤的结果编辑如下文件
根据上面第2步得到的结果,更改以下内容中的值。内容:
"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()""
m:0x10 + c:66
"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()""
Shift+Mod2 + Shift_L+m:0x10 + c:66
- 保存文件,关闭并重新启动..
答案2
您可以订阅一个错误报告:
错误报告内容如下:
键盘面板有输入切换选项,但不允许使用大写字母作为语言切换。
重现步骤:
- gnome-control-center 键盘
- 向下滚动到“输入”部分
- 点击切换到下一个输入源
- 新闻标题
预期结果:Caps Lock 键被接受为切换键 实际结果:Caps 键在选择窗口中被忽略。
PS '切换到上一个输入源'和 Shift-Caps 组合键也是如此。
漏洞解决方法
该错误目前已列入“愿望清单”。建议的解决方法如下:
解决方法 1
找到了解决此错误的方法:
- 安装 dconf-editor(sudo apt-get install dconf-editor)
- 转到 /org/gnome/desktop/wm/keybindings/
- 选择键 switch-input-source,关闭“使用默认值”,并将“自定义值”设置为['Caps_Lock']
- (可选)您还可以将 switch-input-source-backward 的值更改为 ['Caps_Lock'] 之类的值(再次关闭“使用默认值”)
解决方法 2
另一种方法是:1. 安装 GNOME Tweaks (gnome-tweak-tool) 2. 打开 Tweaks 应用程序 3. 切换到键盘和鼠标面板 4. 单击其他布局选项 5. 使用“切换到其他布局”部分
订阅错误报告
我建议订阅错误报告并添加您自己的经验。订阅错误报告的人越多,解决方案就会越快出现(通常)。
答案3
见面清洁解决方案满足您的需求:
什里伍克(也可以从 GitHub 获取:madhead/shyriiwook)。这是一个 GNOME Shell 扩展,我是它的作者。
这是一个非常简单、简约的扩展。它没有任何 GUI。安装后,一个新的 D-Bus 接口将出现在您的 GNOME Shell 会话中。您可以查询当前配置或调用方法来激活所需的布局,就是这样:
$ gdbus introspect \
--session \
--dest org.gnome.Shell \
--object-path /me/madhead/Shyriiwook \
--only-properties
node /me/madhead/Shyriiwook {
interface me.madhead.Shyriiwook {
properties:
readonly as availableLayouts = ['us', 'de', 'jp'];
readonly s currentLayout = 'us';
};
};
$ gdbus call \
--session \
--dest org.gnome.Shell \
--object-path /me/madhead/Shyriiwook \
--method me.madhead.Shyriiwook.activate "de"
这很容易编写脚本,您可以将此命令原始放入“设置”→“键盘”→“键盘快捷键”→“查看和自定义快捷键”→“自定义快捷键”下的自定义快捷键中。
它没有任何延迟,甚至连烦人的语言切换弹出窗口都不会显示。
它是完全无状态且幂等。当您为 分配 D-Bus 调用(如上例中的最后一个调用)时,CapsLock任意次数的按下都会将语言设置为确定性值(示例中为德语)。
它只是适用于最近的 GNOME 版本(我使用的是 42,但我也测试过 45)。与互联网上提供的其他解决方案不同:
- 它
setxkbmap
与 GNOME Shell 配合不佳(它不会更新状态区域中的语言,并且只是中断进一步的布局切换,直到下次重启)。 - 已
gsettings set org.gnome.desktop.input-sources current
弃用,不再起作用 gdbus call … org.gnome.Shell.Eval …
由于安全问题,也被弃用。
书呆子信息:什里伍克基于 D-Bus,但它不使用不安全和弃用的版本,Eval
也不使用任何替代方案。它使用重新实现类似的解决方案格杰斯通过直接访问相同内容getInputSourceManager
。
答案4
为了使用 [CapsLock] 切换语言,打开 Gnome Tweaks 工具(如果尚未安装,请安装)并检查“键盘和鼠标”\“其他布局选项”|“切换到其他布局”|“大写锁定”。
为了根除弹出窗口延迟,安装快速语言切换Gnome-shell 扩展可避免切换器弹出窗口并即时切换语言。此扩展未定义自定义快捷方式,因此X11 中所有带有gnome-tweak-tool
/ 的自定义项或setxkbmap
韦兰在所有 Gnome 版本上仍能正常工作。
笔记:该解决方案不能解决“模式错误”(即多次按下切换键时)。
免责声明:我是 Quick Lang Switch 的开发者...