前情

最近将办公用的 ThinkPad X1 Carbon 6th 系统重装为了 Linux,但是在使用时发现,键盘的功能键区 (F1~F12) 的默认行为是多媒体功能,即控制屏幕亮度、音量等功能。 当我尝试按 F2 ,使用重命名时,结果却是控制了屏幕亮度。在正常情况下,这些功能键应该是要配合 Fn 键一起才能触发的。

最初,我以为是键盘的问题,因为笔记本本身键盘的功能键区使用正常,而且可以通过 Fn+Esc 切换锁定状态,但是外接键盘并没有此功能,且尝试其他按键也没有恢复正常。

经过多番搜索查询,在 Linux 上,适配 MacOS 的多模键盘不会将任何 F1-F12 功能键映射为实际的 F 键值,而是默认将它们视为多媒体键。 Fn+F1-12 的组合也不会起作用。

但是可以通过如下操作,切换 Fn 模式,来控制功能键默认的映射模式。

配置

shell 输入:

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

通过向 /sys/module/hid_apple/parameters/fnmode 文件中写入不同的值,可切换不同的模式:

  • 0 禁用功能键,按‘Fn’ + ‘F8’等同于 F8
  • 1 默认功能键,按‘F8’触发功能键 (play/pause),按‘Fn’ + ‘F8’触发 F8 键
  • 2 默认非功能键,按‘F8’触发 F8 键,按‘Fn’ + ‘F8’触发多媒体功能 (play/pause)

此时,键盘应该已经可以正常使用。 不过,以上配置重启后即失效,可通过将设置写入配置文件使配置永久生效:

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

重启(已尝试,单纯重启并无变化)或者 执行如下命令:

sudo update-initramfs -u   //Ubuntu、Debian
mkinitcpio -P      //ArchLinux

End

🎉🎉🎉