昨天发现我不能使用 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,重启,搞定!