Apple 键盘
一些使用 Apple 键盘驱动程序的键盘型号可能存在按键交换或缺少功能的情况。本文介绍如何更改键盘设置,使其行为符合预期。
数字锁定已开启
您可能会发现数字锁定已开启。症状是只有物理按键 7
、8
、9
、u
、i
、o
、j
、k
、l
和周围的按键工作并输出数字。要解决此问题,请按 Fn+F6
两次或三次。您可能需要使用像 numlockx 这样的实用程序。
或者,使用 xmodmap 手动设置键码以避免使用数字锁定
keycode 90 = KP_0 KP_0 KP_0 KP_0 KP_0 KP_0 keycode 87 = KP_1 KP_1 KP_1 KP_1 KP_1 KP_1 keycode 88 = KP_2 KP_2 KP_2 KP_2 KP_2 KP_2 keycode 89 = KP_3 KP_3 KP_3 KP_3 KP_3 KP_3 keycode 83 = KP_4 KP_4 KP_4 KP_4 KP_4 KP_4 keycode 84 = KP_5 KP_5 KP_5 KP_5 KP_5 KP_5 keycode 85 = KP_6 KP_6 KP_6 KP_6 KP_6 KP_6 keycode 79 = KP_7 KP_7 KP_7 KP_7 KP_7 KP_7 keycode 80 = KP_8 KP_8 KP_8 KP_8 KP_8 KP_8 keycode 81 = KP_9 KP_9 KP_9 KP_9 KP_9 KP_9
无线键盘上的按键重复
取消配对键盘,然后重新配对。诀窍是在整个配对过程中按住电源按钮。
hid_apple 模块选项
fnmode
- 顶行按键的模式- 0 - 禁用
- 1 - 通常为媒体键,按住 Fn 键可切换为功能键(=Apple 键盘上的自动)
- 2 - 通常为功能键,按住 Fn 键可切换为媒体键(=非 Apple 键盘上的自动)
- 3 - 自动(默认)
iso_layout
- 启用/禁用键盘的硬编码 ISO 布局。可能与国际键盘布局相关- 0 - 非 ISO(=ANSI 键盘上的自动)
- 1 - ISO(=ISO 键盘上的自动)
- -1 - 自动(默认)
swap_opt_cmd
- 交换Option
(Alt
) 和Command
(Flag
) 键- 0 - 如丝印,Mac 布局(默认)
- 1 - 已交换,PC 布局
swap_fn_leftctrl
- 交换Fn
和L_Control
键- 0 - 如丝印,Mac 布局(默认)
- 1 - 已交换,PC 布局
功能键不工作
如果您的 F<num>
键不工作,这可能是因为键盘的内核驱动程序默认使用媒体键,并且需要您使用 Fn
键才能访问 F<num>
键。要临时更改此行为,请追加 2
到 /sys/module/hid_apple/parameters/fnmode
。
# echo 2 >> /sys/module/hid_apple/parameters/fnmode
要永久更改,请设置 hid_apple
fnmode
选项为 2
/etc/modprobe.d/hid_apple.conf
options hid_apple fnmode=2
要将更改应用于您的初始 ramdisk,在您的 mkinitcpio 配置(通常为 /etc/mkinitcpio.conf
)中,请确保您在 HOOKS
变量中包含 modconf
,或在 FILES
变量中包含 /etc/modprobe.d/hid_apple.conf
。然后您需要重新生成 initramfs。
交换 Cmd 和 Alt/AltGr
这将交换左侧的 Alt
和 Cmd
键以及右侧的 Alt
/AltGr
和 Cmd
键。
临时和立即解决方案
# echo "1" > /sys/module/hid_apple/parameters/swap_opt_cmd
永久更改,在下次重启时生效
/etc/modprobe.d/hid_apple.conf
options hid_apple swap_opt_cmd=1
然后您需要重新生成 initramfs。
交换功能键和左 Ctrl 键
这将交换 Fn
和左 Ctrl
键。
临时和立即解决方案
# echo "1" > /sys/module/hid_apple/parameters/swap_fn_leftctrl
永久更改,在下次重启时生效
/etc/modprobe.d/hid_apple.conf
options hid_apple swap_fn_leftctrl=1
然后您需要重新生成 initramfs。
PrintScreen 和 SysRq
Apple 键盘有一个 F13
键而不是 PrintScreen
/SysRq
键。这意味着 Alt+SysRq 序列 不起作用,并且与 PrintScreen
关联的应用程序操作(例如在 Wine 下运行的许多游戏中截取屏幕截图)也不起作用。要解决此问题,您可以将 setxkbmap -option "apple:alupckeys"
添加到您的 .xinitrc
中。这将把 PrintScreen
/SysRq
映射到 F13
,以及把 Scroll lock
映射到 F14
,把 Pause
映射到 F15
。
或者,按照 将扫描码映射到键码 文章将 F13
扫描码映射到 PrintScreen
/SysRq
键码,其中 458856 (0x070068) 是 F13
的扫描码,sysrq
是 PrintScreen
/SysRq
的键码。
像对待普通键盘一样对待 Apple 键盘
根据您想要完成的自定义,有两种解决方案可用,内核中还有一些选项。您需要选择其中一种。
使用补丁到 hid-apple
虽然原始的 hid-apple
模块没有进一步自定义键盘的选项,例如交换 Fn
和左 Ctrl
键或将 Alt
放在 Super
的左侧,但有一个 打过补丁的版本 将此功能添加到模块中。要使用它,请安装 hid-apple-patched-dkms-gitAUR 软件包。这将安装打过补丁的 hid-apple
并屏蔽原始版本。
该软件包使用 DKMS 在内核升级期间自动重新编译模块。虽然 dkms 将通过依赖项拉入。您仍然需要手动安装相应的内核头文件软件包。有关更多信息,请参阅 DKMS 页面。
除了打过补丁的内核模块外,软件包还在 /usr/lib/modprobe.d/hid_apple.conf
中提供了一个配置文件,默认启用类似 PC 的布局
- 顶行按键通常是功能键,按住 Fn 键可切换为媒体键,如 #功能键不工作 中所述。
- 左下角的四个按键依次充当
Ctrl
、Fn
、Super
、Alt
。 - 右下角的两个按键依次充当
Alt
、Ctrl
。 - 如果您有
Ejectcd
键,它将充当Delete
键。
如果您希望更改默认选项,请将配置文件复制到 /etc/modprobe.d
并进行所需的更改
# cp {/usr/lib,/etc}/modprobe.d/hid_apple.conf
/etc/modprobe.d
下的文件将完全覆盖 /usr/lib/modprobe.d
下的同名文件,并且内容不会合并。
或者,如果您想保留默认选项,请将其他选项放在名称不同的文件中。
请参阅项目 README 以了解每个配置选项的确切含义,并调整配置文件以满足您的需求。在 内核模块#使用 modprobe.d 了解更多关于 modprobe.d
的信息。
安装后,重启以使更改生效,或 #无需重启即可更改行为。
模块未采纳故障排除配置
首先,确保加载了打过补丁的版本,查看模块提供了哪些参数
$ ls /sys/module/hid_apple/parameters/
如果您没有看到像 swap_fn_leftctrl
、ejectcd_as_delete
等新选项,请检查您的 DKMS 安装。
然后,检查配置文件是否正确包含在 initramfs 中
$ mkdir /tmp/initramfs $ cd /tmp/initramfs # lsinitcpio -x /boot/initramfs-linux.img
检查 usr/lib/modprobe.d/hid_apple.conf
和 etc/modprobe.d/
中任何其他相关配置文件的存在和内容。如果它们不存在,您应该检查您的 /etc/mkinitcpio.conf
以包含这些文件。默认情况下,应该有一个 modconf
钩子自动包含这些文件,如果不是,请将其添加到 autodetect
之后的 HOOKS 数组 中。
或者,在 FILES 数组 中显式指定这些文件
FILES=(/usr/lib/modprobe.d/hid_apple.conf)
最后,重新生成 initramfs 并重启。
使用 un-apple-keyboard
如果您不需要所有这些自定义,并且不想手动或使用 dkms 编译新模块,则有一个 AUR 软件包 un-apple-keyboardAUR 不依赖于新的内核模块,而仅依赖于映射。它启用以下功能
- 键盘被视为 ISO 键盘(例如,位于
Left Shift
键右侧的<
和>
像预期一样工作)。 - 功能键默认禁用。您需要按
Fn
键组合才能触发它们。默认情况下,行为是按键F1
到F12
Alt
和Cmd
键已交换。F13
映射到SYSRQ
,F14
映射到Scroll Lock
,F15
映射到Pause
。
前 3 个上述功能是通过使用默认的 Linux 内核模块 hid-apple
为您带来的。
最后一个功能是通过提供到 keyfuzzAUR 的映射提供的。
无需重启即可更改行为
要重新加载内核模块而不重启,请运行
# rmmod hid_apple && modprobe hid_apple
Magic Keyboard 无法连接
如果您的 Magic Keyboard 无法通过内置工具(例如 Gnome 3 设置中的蓝牙菜单)连接到系统,请安装 blueman 及其依赖项,并尝试使用它进行连接。如果仍然无法连接,请确保您已安装 bluetoothctl 和 hcitool。
启用 dvorak/dvp
默认情况下,xkb 为 Macintosh 键盘加载转换表(实际上称为 xkb_symbols
)macintosh_vndr/us
$ setxkbmap -print -verbose 10 | grep symbols
此转换表位于 /usr/share/X11/xkb/symbols/macintosh_vndr/us
,不包含 dvorak/dvp 布局。您可以使用 /usr/share/X11/xkb/symbols/us
中的默认转换表,并在您的 .profile
中添加命令 setxkbmap
以强制加载布局
# mv /usr/share/X11/xkb/symbols/macintosh_vndr/us /usr/share/X11/xkb/symbols/macintosh_vndr/us.back # cp /usr/share/X11/xkb/symbols/us /usr/share/X11/xkb/symbols/macintosh_vndr/us $ echo "setxkbmap -v 10 -layout us -variant dvp" >> .xprofile
在根磁盘解密期间无输入
您可能必须手动将 hid_apple
模块添加到 mkinitcpio 配置
MODULES=(hid_apple)
或将键盘钩子放在 autodetect 之前,以便包含所有键盘驱动程序
HOOKS=(... keyboard autodetect ...)
在执行上述任一操作后重新生成 initramfs。