我刚刚从 xf86-input-evdev 切换到 xf86-input-libinput,它破坏了我的键盘布局 - 带有右 alt 的箭头键、上下文菜单键、删除键、数字键盘输入等都奇怪地交换了。libinput debug-events
但是,显示了正确的密钥。检查后Xorg.conf
,我注意到以下行:
Option "XkbRules" "base"
将其更改为 后evdev
,键盘工作正常。
我找到了“ The XKB Configuration Guide ”,其中提到了各种规则,但没有详细说明它们的区别。
两种布局有什么区别?即使使用 libinput 也可以使用 evdev 规则吗?
tl;dr:在 Linux 上,您应该使用
evdev
规则。正如 XKB 指南中所说,您链接:差异主要是历史性的。
evdev
是现代 Linux 内核输入子系统,最初编写 XKB 时并不存在。如果您查看xkeyboard-config的源代码,您会发现evdev
和base
规则都是从(大部分)相同的模板生成的。不过,将系统 XKB 数据库中生成的文件与diff
. 您会看到许多条目,其中base
规则为特定键盘模型加载inet
符号,而evdev
规则取消了大多数特定于模型的条目并加载更通用的集合:不是真的,这是规则中的整个模型到符号部分
evdev
,而base
版本有 60 多行长。该evdev.m_s.part
文件是该部分规则的源模板;这是一个模型到符号的映射(该!model = symbol
部分开头的行;因此m_s
在文件名中)。规则的唯一其他特定于 evdev 的部分来自该evdev.m_k.part
文件,它是模型到键码的映射(!model = keycodes
规则部分),并且那里的差异相似。有关更多详细信息,请查阅这些规则(尤其是和)引用的键码和符号文件。您可能会对XKB 规则格式的这篇文章感兴趣。
/usr/share/X11/xkb/keycodes/evdev
/usr/share/X11/xkb/symbols/inet