女朋友献祭了她的 Magic Keyboard 给我以代替噪音过大的青轴机械键盘,经过一番配置和摸索之后,我真香了(


规划

我拿到的 Magic Keyboard 是 en-US 布局的,只不过 Caps Lock 被本地化为了 中/英

相比我之前的使用习惯,这个键盘有如下几个需要调教的地方:

  • FnLock 默认是关闭的,这导致上面第一排的 FX 功能键映射的是对应的功能而不是 FX
  • Alt(option) 和 Meta(command) 键位置是反的
  • 我习惯把 CapsLock 当作另外一个 Ctrl 使用

调教

朴素的搜索修改 Fn 映射的话会有不少错误的答案,比如:

  • Fn + Esc,这是大部分笔记本电脑键盘支持的配置方式,一般对应的键都会标注出来,显然的 Magic Keyboard 不支持这种方式
  • Apple 官方给出的方式修改系统设置,还说如果没有的话可能键盘不是苹果产的(这键盘是苹果的,系统不是呀)
  • 还有比较邪道的方式是改 xmodmap,这个比较容易翻车也不好调试,所以不考虑了

我摸索出来的正确方式是配置 hid-apple 内核模块,首先 ls /sys/module/hid_apple/parameters 能看到这个内核模块支持的配置:

> ls /sys/module/hid_apple/parameters
fnmode  iso_layout  swap_fn_leftctrl  swap_opt_cmd

这四个配置项的作用分别如下:

  • fnmode: 配置 Fn 键的行为
  • iso_layout: 修改键盘布局
  • swap_fn_leftctrl: 将 Fn 和左侧的 Ctrl(control) 键交换位置
  • swap_opt_cmd: 将 Alt(option) 和 Meta(command) 交换位置

这次会用到的主要就是 fnmodeswap_opt_cmd 两个配置。

fnmode 配置

fnmode 有三个可选值,含义分别是:

  • 0 = disable: fn + F8 = F8
  • 1 = fkeyslast: F8 = 特殊功能键,fn + F8 = F8
  • 2 = fkeysfirst: F8 = F8fn + F8 = 特殊功能键

需要注意的是,如果设成了 0,那 fn + Left = Home 的映射也会失效,所以推荐设置成 2。

配置时首先修改运行时参数来检查(重启后失效):

echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode

如果测试没有问题的话可以写入持久化的配置:

echo options hid_apple fnmode=2 | sudo tee -a /etc/modprobe.d/hid_apple.conf

swap_opt_cmd 配置

swap_opt_cmd 设置为 1 后将会对调 Alt(option)Meta(command) 这两个键的位置,这样就会比较符合传统键盘的习惯。

同样先修改运行时参数进行测试:

echo 1 | sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

测试正常的化写入持久化的配置:

echo options hid_apple swap_opt_cmd=1 | sudo tee -a /etc/modprobe.d/hid_apple.conf

CapsLock as Ctrl

这是在 Xorg 的层面配置的,我直接使用了 KDE 的配置工具,此处就不赘述了。

自动唤醒

经过上述的调教之后这个键盘已经可以正常使用了,但是重启之后发现了一个尴尬的事实:Linux 默认配置下并不会自动连接已经配对过的蓝牙设备。这导致我在 SDDM 登录界面无法输入密码解锁,进一步的不能点击蓝牙面板的 comment 或者调用 bluetoothctl

Archwiki 有相关的介绍,但是里面使用的 hciconfig 等工具已经弃用了,比较合理的方式是修改 /etc/bluetooth/main.conf 配置文件,启用 AutoEnable

[Policy]
# AutoEnable defines option to enable all controllers when they are found.
# This includes adapters present on start as well as adapters that are plugged
# in later on. Defaults to 'false'.
AutoEnable=true

启用这个配置后 Linux 将会自动连接已经配对的设备,就不会再出现开机后无法输入密码这种尴尬的情况啦。

参考资料

  • Apple Keyboard 总结并整理了很多关于苹果键盘的配置
  • Ubuntu 的 AppleKeyboard 有不少 9.04 时代的内容,但是总体上还是适用的

动态

  • 又是一年一度的 S10 了,今年 LGD 再次进入世界赛,然而实在拉跨,被外卡吊打,很绝望
  • 成功变成了 TiKV 的 Contributor,这是我参与的第一个大 Rust 项目