谈按键布局(二):全平台(包括 Linux)如何方便地修改布局
前言
在上一篇博客中我已经介绍了我的按键布局,因为是独创的布局所以不可能在设置里选一下就直接切换。接下来我简要介绍一下切换布局的最佳实践(best practice)。
如果你对这篇博客不感兴趣,不妨看看本系列的下一篇:谈按键布局(三):人体工学按键布局的终极解决方案-以 Ergodox 为例
如果你对这篇博客不感兴趣,不妨看看本系列的下一篇:谈按键布局(三):人体工学按键布局的终极解决方案-以 Ergodox 为例
需求
- 任意自定义布局,而不是使用预设布局
- 可以一键切换到 qwerty 以满足游戏需求
全平台如何切换布局
全平台最重要的就是可移植性,而硬件的可移植性是最好的,所以全平台的布局切换唯一方案就是买个能硬件编程的键盘。下面简单推荐几个不贵的键盘
- 雷柏 vpro v500,100元,我用的就是这个
- pocker,350元,听说可以硬件编程
雷柏的键盘去官网下载一个驱动(只有 Windows 版),可以将它的模式切换键功能重设。键盘最右上角的模式切换键可以切换键盘到自定义模式,可以随意修改按键布局、添加键盘宏,或者重定义很少使用的 F1~F12,比如换成ctrl+alt+del,或者一键输入邮箱,或者控制音乐播放。
这种方式优点是不依赖操作系统,只要键盘插上去就可以直接使用你自定的布局了;用模式切换键也能一键切回到 qwerty
Linux 如何软件切换布局
首先有个软件叫 klfc ,可以让你写一个 json 格式的配置,它帮你把剩下的事情都做了。
我的按键布局配置在这里
- 下载 https://github.com/39aldo39/klfc/releases
- 解压
- ./klfc --from-json json格式的配置文件 --xkb /tmp/dv
- cd /tmp/dv
- ./install-system.sh
- 重启
接下来需要配置三个地方:
- 在桌面设置里面,语言 -> 键盘布局 -> 选择你新建的键盘布局,比如我的布局在语言为 "Other"里面,叫 "Charles Dvorak"。注意这里的键盘布局可以保存两个,一个你自己的,另一个为标准 qwerty 布局(比如普通的中文布局)
- 在 fcitx 设置(如果你们输入中文用的不是 fcitx 那我也不知道该怎么弄)里面,添加一种输入法,去掉“只显示当前语言”选项,找到并添加刚刚的键盘布局,并挪到最上面
- 这个不需要改
在 fcitx 设置里面下面一栏最右面那个图标,选择默认键盘布局那里,选择刚刚添加的布局
如果在配置的第一个地方你有两个布局,那么你就可以软件一键在自定义布局和标准布局之间切换了。当然,你的硬件键盘此时必须设置成标准布局
Linux TTY 如何修改按键布局
/usr/share/kbd/keymaps 里面有很多按键布局文件,找一个为基础解压,改改再改个名,用 gzip 压缩后放回去,然后需要生效时使用 sudo loadkeys xxx 即可。其中你的布局文件名为 xxx.map.gz
当然也可以直接下载我的布局设置 https://github.com/the0demiurge/CharlesBackup/blob/master/keyboard/charles-dvorak.map.gz
xkb 高级配置
在 Gnome 或者其他桌面环境如果需要一些高级功能,比如让 F1~F12 承担一些音乐控制的功能,也可以通过改按键布局的方式实现。
首先 /usr/share/X11/xkb/keycodes/evdev 文件定义了一些键码到名称的映射,比如
<I172> = 172; // #define KEY_PLAYPAUSE 164播放暂停按键的名称是 I172
然后到 /usr/share/X11/xkb/symbols 文件夹去找 I172 的功能定义:$ grep -r I172
得到:
那么就可以把这个功能绑定到相应的按键上了。比如我把原来 F1 换成了音乐播放暂停键,只需要在我的布局文件 /usr/share/X11/xkb/symbols/charles_dvorak 里面相应位置加入inet: key <I172> { [ XF86AudioPlay, XF86AudioPause ] };
就可以了。key <FK01> { [ XF86AudioPlay, XF86AudioPause ] };
评论
发表评论