谈按键布局(二):全平台(包括 Linux)如何方便地修改布局

前言

上一篇博客中我已经介绍了我的按键布局,因为是独创的布局所以不可能在设置里选一下就直接切换。接下来我简要介绍一下切换布局的最佳实践(best practice)。
如果你对这篇博客不感兴趣,不妨看看本系列的下一篇:谈按键布局(三):人体工学按键布局的终极解决方案-以 Ergodox 为例

需求

  1. 任意自定义布局,而不是使用预设布局
  2. 可以一键切换到 qwerty 以满足游戏需求

全平台如何切换布局

全平台最重要的就是可移植性,而硬件的可移植性是最好的,所以全平台的布局切换唯一方案就是买个能硬件编程的键盘。下面简单推荐几个不贵的键盘
  1. 雷柏 vpro v500,100元,我用的就是这个
  2. pocker,350元,听说可以硬件编程
雷柏的键盘去官网下载一个驱动(只有 Windows 版),可以将它的模式切换键功能重设。键盘最右上角的模式切换键可以切换键盘到自定义模式,可以随意修改按键布局、添加键盘宏,或者重定义很少使用的 F1~F12,比如换成ctrl+alt+del,或者一键输入邮箱,或者控制音乐播放。
这种方式优点是不依赖操作系统,只要键盘插上去就可以直接使用你自定的布局了;用模式切换键也能一键切回到 qwerty

Linux 如何软件切换布局

首先有个软件叫 klfc ,可以让你写一个 json 格式的配置,它帮你把剩下的事情都做了。
我的按键布局配置在这里
  1. 下载 https://github.com/39aldo39/klfc/releases
  2. 解压
  3. ./klfc --from-json json格式的配置文件 --xkb /tmp/dv
  4. cd /tmp/dv
  5. ./install-system.sh
  6. 重启
接下来需要配置三个地方:
  1. 在桌面设置里面,语言 -> 键盘布局 -> 选择你新建的键盘布局,比如我的布局在语言为 "Other"里面,叫 "Charles Dvorak"。注意这里的键盘布局可以保存两个,一个你自己的,另一个为标准 qwerty 布局(比如普通的中文布局)
  2. 在 fcitx 设置(如果你们输入中文用的不是 fcitx 那我也不知道该怎么弄)里面,添加一种输入法,去掉“只显示当前语言”选项,找到并添加刚刚的键盘布局,并挪到最上面
  3. 这个不需要改在 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
得到:
inet:    key <I172>   {      [ XF86AudioPlay, XF86AudioPause ] };
那么就可以把这个功能绑定到相应的按键上了。比如我把原来 F1 换成了音乐播放暂停键,只需要在我的布局文件  /usr/share/X11/xkb/symbols/charles_dvorak 里面相应位置加入
    key <FK01>   {      [ XF86AudioPlay, XF86AudioPause ] };
就可以了。

评论

此博客中的热门博文

Flash被淘汰后打开swf文件的最佳方法

[SOLVED] Supermicro cannot connect to VGA video port or iKVM

MacBook日文键盘四种输入模式输入法切换(同样适用于其他布局的键盘)