记录一次在 openSUSE 下修复 IQUNIX F97 键盘

昨天发现我不能使用 CTRL + ALT + F1~F12 切换到 Virtual TTY。

最早我以为是 KDE Wayland Session 复盖了我的快捷键,去

cat ~/.config/kglobalshortcutsrc | grep Ctrl+Alt+F
cat ~/.config/khotkeysrc | grep Ctrl+Alt+F

都没找到。

然后怀疑是不是这个是 Xorg 的功能,换了 Wayland 就没有了,搜索了一下也不是,是 Kernel 的功能。

接着怀疑是 systemd 没开那么多 VTTY,发现 /dev/tty* 下面一直到 59,也不是。

又想到 /usr/bin/chvt 这个命令:

sudo chvt 3

发现可以切换到 VTTY,但也不能总是这么切换啊。

而且别人是 chvt 切换过去,在 tty3 可以使用快捷键切回图形桌面,所以才发现是桌面环境的快捷键阻挡的。我的是去了 tty3 也得再次使用 chvt 1 切换回来。

这个时候就有点意识到是硬件的问题了。

于是想到去看 keymap,我的键盘布局是 us:

sudo localectl status

/usr/share/kbd/keymaps/xcb/us.map.gz 我根本没有改动,其他修改按键映射的地方也没有(因为之前不会)。这时候实在没思路了,想着找一个图形程序直接显示我按了什么键吧。

由于我是 Wayland, xev 不见得可以,最终搜到了 Alynx Zhou 在 SUSE Hack Week 期间开发的 Show me the key,还挺好用

最终发现我以为我按下的是 CTRL + ALT + F1,其实我按下的是 CTRL + ALT + BrightnessDown。F2 是 BrightnessUp, 其他都有各自的映射。

加上之前搜索的时候看到有人提 Function/Mediakey Lock, 我觉得是我的键盘的多媒体按键被自动打开了。

翻了一下说明书,这块键盘没有手动切换 F1 和 BrightnessDown 的功能,那就只能看看内核驱动了。

不看不知道,一看我的键盘被映射成 Apple Keyboard 了,用的是 hid_apple 这个驱动:

sudo dmesg -w
[  418.904062] [   T3784] usb 3-2: new full-speed USB device number 2 using xhci_hcd
[  419.069844] [   T3784] usb 3-2: New USB device found, idVendor=05ac, idProduct=024f, bcdDevice= 0.04
[  419.069851] [   T3784] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  419.069852] [   T3784] usb 3-2: Product: IQUNIX F97 Mechanical Keyboard
[  419.069853] [   T3784] usb 3-2: Manufacturer: IQUNIX
[  419.069853] [   T3784] usb 3-2: SerialNumber: 000000000000
[  419.122832] [   T3786] usbcore: registered new device driver apple-mfi-fastcharge
[  419.152283] [   T3788] input: IQUNIX IQUNIX F97 Mechanical Keyboard as /devices/pci0000:00/0000:00:08.1/0000:0b:00.3/usb3/3-2/3-2:1.0/0003:05AC:024F.0003/input/input17
[  419.237238] [   T3788] apple 0003:05AC:024F.0003: input,hidraw2: USB HID v1.11 Keyboard [IQUNIX IQUNIX F97 Mechanical Keyboard] on usb-0000:0b:00.3-2/input0
[  419.237647] [   T3788] apple 0003:05AC:024F.0004: Fn key not found (Apple Wireless Keyboard clone?), disabling Fn key handling
[  419.237679] [   T3788] input: IQUNIX IQUNIX F97 Mechanical Keyboard as /devices/pci0000:00/0000:00:08.1/0000:0b:00.3/usb3/3-2/3-2:1.1/0003:05AC:024F.0004/input/input18
[  419.237777] [   T3788] apple 0003:05AC:024F.0004: input,hiddev97,hidraw3: USB HID v1.11 Keyboard [IQUNIX IQUNIX F97 Mechanical Keyboard] on usb-0000:0b:00.3-2/input1

找到原因就好办了,在 /etc/modprobe.d 下建立 50-hid_apple.conf,加入下面内容:

options hid_apple fnmode=2

它默认的是 3(auto), 2 的意思就是默认作为功能键使用,不作为多媒体按键使用。具体去看 Apple Keyboard

然后使用:

sudo dracut -f

重建 initramfs,重启,搞定!

4赞