我正在 HP 笔记本电脑上设置 Arch Linux 系统,但由于键盘的放置方式很奇怪(标记为较小/较大键的键发送扫描码 105,这被解释为正确的控制X)我必须尝试设置我自己的键盘配置。问题是,当我使用 xev 来查看哪些键发送哪些扫描码时,我注意到功能键有一些奇怪的地方。作为精确性,我使用法式 AZERTY 布局,并且我报告的行为发生在我加载的所有法式布局上setxkbmap
(如fr
布局、模型evdev
以及所有以 开头的布局hp
)。
首先,F1 的行为确实不一致。启动并登录系统后,当在未应用修饰符的情况下按下 F1 键时,它会发送扫描代码 146,该代码通常映射到帮助,到目前为止一切顺利。但更进一步,我会注意到,当它自己按下时,它不再这样做,而是连续发送扫描码 133(映射到 Super_L)和 67(映射到 F1),而且我不这样做知道是什么触发了这种变化。重新启动总是会将密钥恢复到预期的行为。
其次,F4 键的行为方式大致相同:重新启动后,当单独按下时,它会发送 164 (XF86Favorites),但在某些时候它会更改为发送 133 (Super_L) 和 33 (p)。此更改似乎与 F1 键更改其行为的同时发生。根据这页面上,在 HP 笔记本电脑上,F4 键用于在笔记本电脑显示屏和外接显示器之间切换。
最后一个奇怪的事情是,有时,通常当快速连续按下修饰键和功能键时,会发送一些我没想到会发送的扫描代码(例如 XF86Sleep);当有条不紊地尝试每个功能键和每个修饰符时,这些神秘的扫描代码不会出现,所以我不知道它们是什么意思......这种情况只是偶尔发生,并且很难重现,因为我不太确定重现的条件是什么。
有人知道发生了什么事吗?我对 Linuxland 比较陌生,我确实尝试过了解 X 是如何进行键盘配置的,但我仍然很困惑,所以如果我有什么误解,或者我做了一些愚蠢的事情,请开导我。我也不知道提供什么样的信息会有用,所以请告诉我您是否需要更多信息来帮助我解决这个问题。
顺便说一句,Fn 键似乎也像一个死键,从某种意义上说,当按下然后释放时,下次按下功能键时就像按住了 Fn 键一样。我觉得这有点烦人,但我听说 fn 键是由键盘而不是操作系统直接处理的,所以我不知道我是否可以对此做些什么。
编辑1:所以,在发布这个问题后,我立即继续摆弄键盘并想到某物出来,这提供了一些线索,但没有提供太多答案。导致 F1 和 F4 改变行为的是 X 进入睡眠状态。重新启动后,通过合上笔记本电脑或按 F5(向 X 发送进入睡眠状态的信号)使 X 进入睡眠状态。在此之前,F1和F4的表现与预期一致,醒来后却乱了套。事实上,F5键也因此改变了,因为唤醒后,根据xev,它自己按下时不会打磨任何扫描代码。这也解释了为什么我有时会看到我无法识别的键码。
但现在我知道了这一点,我也注意到其他 F 键的奇怪之处。根据 xev 的说法,以下是更改前后所有受影响的按键在按下自己的按键时所做的操作的汇总:
- F1:之前 = 146(帮助)。之后 = 133 + 67 (Super_L + F1)。
- F4:之前 = 164(XF86 收藏夹)。之后 = 133 + 33 (Super_L + p)。
- F5:之前 = 150 (XF86Sleep)。之后=什么都没有
- F11:之前 = 136 + 171(取消 + XF86AudioNext)。之后 = 171 (XF86AudioNext)。
- F12:之前 = 255 + 171 (XF86RFKill + XF86AudioNext) 或 171 + 255 (XF86AudioNext + XF86RFKill),没有可辨别的模式。每次之后 = 255 (XF86RFKill)。
所以有些人从睡醒后就搞砸了,有些以前搞砸了,但睡觉后就解决了……我很困惑。