利用 Xbindkeys 设置全局快捷键/一键切换输入法
就像在 DDE手势管理器:FAQ 中提到的,我对与电脑的交互方式一直有比较高的要求,毕竟工作加上生活娱乐,有太多太多的时间要花在电脑上了,符合个人习惯的操作方式可以极大地提高效率并缓解疲劳。除了触摸板手势和鼠标手势之外,我还有一些习惯的个人向系统快捷键设置,其中很重要使用频率极高的快捷键就是:通过单击键盘右侧的 Shift 按键切换输入法。
Why
切换中英文输入法是一个使用频率极高的操作,尤其是在写代码和文档的时候。一般来说,默认的切换方式有两种:
- 使用 Ctrl + Shift 组合键,这是最符合一般习惯的。但是由于需要使用左手的小拇指和无名指以略微扭曲的姿势去按,所以长时间频繁使用会比较容易造成疲劳,而且需要按两个键的组合键,相比于按下一个键总归要多花一点点时间,这在高速打字或者需要尽快跟随思路编写代码的时候,这一点点的差别就可能会让人感觉到不爽。
- 使用中文输入法自带的方式切换中英文模式,比如搜狗输入法中可以选择切换中英文模式的快捷键:
但是搜狗输入法给出的选项是同时对左右两侧的 Ctrl / Shift 键生效的,而我只希望右侧的 Shift 键响应中英文的切换,因为正常来说一般打字的时候是左手的使用压力比较大,左侧功能键使用的频率很高,而右侧功能键用得相对少一点,用右侧 Shift 键切换输入法可以更好地平衡左右手的疲劳程度;另外,写代码的时候经常需要按住左侧 Shift 键临时输入大写英文字母,有时会在下意识按下 Shift 键后思路跟上来发现接下来并不需要大写字母,此时松开 Shift 键,输入法却切换到中文了,还需要再按一次切换回英文,然后就会因为节奏被打断而恼火——所以我喜欢的模式是,左侧 Shift 键只响应按住时输入大写字母的操作,切换中英文操作则交给右侧 Shift 。
综上,之前我一直是关闭搜狗本身的切换快捷键,使用 Fcitx (搜狗输入法的 Linux 版是基于 Fcitx 框架的) 的设置项:
即可实现想要的效果——但是,最新的 Deepin/UOS 系统为了更好地做到符合国人使用习惯的开箱即用,将输入法的设置限制在只能在系统设置模块里调整,fcitx 本身的设置不再生效:
而这里又不允许将切换快捷键设置为 Shift_R 单个按键,于是我不得不寻找一种更为通用的替代方案。
在经过一些摸索之后,找到了 Xbindkeys 这个工具,可以通过全局绑定快捷键的方式实现想要的效果。 Xbindkeys 是一个允许将命令绑定到键盘上的某些键或组合键的程序,可以独立于窗口管理器和桌面环境工作,所以不论在使用的是什么发行版的 Linux,使用的是什么桌面环境,都可以使用这个程序实现统一的效果。
使用
安装
xbindkey被包含在大多数GNU/Linux发行版中,所以只需:
1 | sudo apt install xbindkeys |
初始化配置
初次使用前需要先执行如下命令生成默认配置文件:
1 | xbindkeys --defaults > ~/.xbindkeysrc |
否则在使用 xbindkeys-config
工具编辑配置的时候会报如下错误:
1 | Error : ~/.xbindkeysrc not found or reading not allowed. |
使用 xbindkeys-config 进行配置
打开图形化配置工具
直接在终端中输入运行:xbindkeys-config
,即可看到如下界面:
配置过程
点击左侧下方的
New
按钮增加一条配置在右侧
Name
栏中输入该条配置的名称点击
Get Key
按钮,将会弹出如上图中间左侧的窗口XBindKey: Hit a key
鼠标点击一下这个弹出的窗口,确保其拥有输入焦点
按下想要绑定的快捷键,以我想绑定的右侧 Shift 为例,在
Get Key
按钮上面的Key
输入框中会自动填入如下代码:Shift+Mod2 + Shift_R | m:0x11 + c:62
经测试,绑定单个按键并不需要前面的修饰按键,所以只需要保留Shift_R
即可在
Action
栏中输入想要触发的操作,以切换输入法为例,可以通过 xdotool 模拟发送 Ctrl + Shift 快捷键,所以填入如下代码:1
xdotool keyup Shift_R && xdotool key Ctrl+Shift
注意需要先用
xdotool keyup Shift_R,
释放我们实际按下的右 Shift 键,否则的话,系统接收到的组合键就变成了 Ctrl+Shift+Shift_R,无法完成输入法的切换点击
Apply
按钮应用配置,即可测试效果
额外内容
xbindkeys 如何实现的开机自启
安装配置好后,发现重启后配置仍然生效,查看系统进程可以发现开机后 xbindkeys
进程会自动启动,但是通过 systemctl list-unit-files | grep xbindkeys
发现并没有注册开机启动服务,那么它是如何实现开机自启的呢?
查找后发现,xbindkeys安装后会在 /etc/xdg/autostart
目录下写入 xbindkeys.desktop
这个文件,从而实现的开机自启,这种方式与 Windows 中将程序的快捷方式放入 启动
文件夹下实现开机自启的方式类似。
另外,可以将desktop 文件放进 ~/.config/autostart
这个目录下,以单独为当前用户配置开机自启的程序
修改搜狗输入法的输入框配色
搜狗输入法默认的配色在暗色主题下不是很好看。参考星空黑这个皮肤的配色,打开搜狗的外观配置页面:
将颜色分别设置为:
- 拼音串颜色: #EEEEEE
- 第一候选颜色: #36ABBF
- 非第一候选颜色: #EEEEEE
字体设置为: 18
效果: