Ubuntu 16.04 GNOME Shell中系统与应用快捷键冲突问题求助
解决Ubuntu 16.04 GNOME下Ctrl+Shift输入法快捷键冲突问题
我之前在GNOME Shell环境下也碰到过一模一样的快捷键冲突问题,给你几个针对性的解决方案,从简单到进阶:
方案1:修改输入法切换的触发时机(最推荐)
默认情况下,ibus的“仅修饰键切换输入法”是按下修饰键时就触发切换,这就导致你按住Ctrl+Shift再按其他键(比如Chrome的Ctrl+Shift+I)时,系统先响应了输入法切换。我们可以把触发时机改成释放修饰键时才切换,这样只有单独按下Ctrl+Shift并松开时才会切换输入法,按住组合键再加其他按键时不会触发:
- 打开终端,执行以下命令:
gsettings set org.freedesktop.ibus.xkb switch-mode 'release' - 重启ibus生效:
ibus restart
这个方法几乎能解决90%的类似冲突,而且不需要额外安装工具,完全适配你的Ubuntu 16.04环境。
方案2:针对特定应用禁用全局输入法快捷键
如果你希望Ctrl+Shift在Chrome和VS Code中完全不触发输入法切换,只在其他场景生效,可以用xbindkeys来实现窗口特定的快捷键规则:
- 先安装工具:
sudo apt-get install xbindkeys xbindkeys-config - 获取目标应用的窗口类名:
- 打开Chrome,在终端执行
xprop WM_CLASS,然后点击Chrome窗口,会输出类似WM_CLASS(STRING) = "Google-chrome", "Google-chrome"的内容,记下第二个值Google-chrome; - 同理,打开VS Code执行
xprop WM_CLASS,记下窗口类名Code。
- 打开Chrome,在终端执行
- 编辑
xbindkeys配置文件:
打开~/.xbindkeysrc,添加以下内容(意思是:排除Chrome和VS Code,其他窗口按下Ctrl+Shift时触发输入法切换):"ibus engine $(ibus list-engine | grep -v '^.*\('$(ibus engine)'\)' | head -n1 | awk '{print $1}')" control+shift ! windowclass = "Google-chrome" ! windowclass = "Code" - 重启
xbindkeys生效:killall xbindkeys && xbindkeys
这个方案更灵活,但需要一点命令行操作,适合有一定基础的用户。
方案3:更换输入法切换快捷键
如果上面的方法都不符合你的需求,最直接的方式就是换一个不冲突的组合键作为输入法切换快捷键:
- 打开GNOME设置 → 区域和语言 → 输入源;
- 点击“键盘快捷键”旁边的设置按钮;
- 找到“切换到下一输入源”,把快捷键改成比如
Ctrl+Alt或者其他你习惯且不冲突的组合。
这个方法最简单,但需要你适应新的快捷键。
内容的提问来源于stack exchange,提问作者yuio




