我有一台运行 ArchLinux32 的 ThinkPad X41t。盖子上有几个按钮。我给了他们带有 的密钥代码setkeycodes
。设备可以“变形”——即围绕铰链旋转 180 度并像这样关闭。问题是,当设备转换时,这些盖子按钮不起作用 - 它们仍然产生键码(如 所报告的showkey
),但它们不执行任何操作。使用evtest
,我确定了两件事:
- 盖子按钮与常规键盘按钮属于同一事件设备,属于“AT 翻译集 2 键盘”。
被“转变”是一件可识别的事件。这是 evtest 的报告:
Event: time ..., type 5 (EV_SW), code 1 (SW_TABLET_MODE), value 1 Event: time ..., -------------- SYN_REPORT ------------ Event: time ..., type 5 (EV_SW), code 1 (SW_TABLET_MODE), value 0 Event: time ..., -------------- SYN_REPORT ------------
当变形事件已经发生时,我也尝试使用小棒按键盘按键,但他们也没有做任何事情。
因此,我怀疑当转换事件触发某些事件时,会导致操作系统忽略来自该特定设备的任何按键。有没有办法确定这是什么以及如何做,以及如何将盖子按钮添加到此事物的例外中,以便我可以在设备转换时使用它们?
提前致谢。
答案1
已在 libinput 中修复。现在变形不会禁用常规键盘,但盖子不会按下按键,所以这不是问题。
答案2
对于任何遇到同样问题的人来说,我刚刚偶然发现了一个简单的解决方案。
首先,通过运行查找平板电脑按钮的 xinput 设备 ID xinput
。它应该看起来像这样:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=10 [slave pointer (2)]
⎜ ↳ Wacom Serial Penabled Pen stylus id=12 [slave pointer (2)]
⎜ ↳ Wacom Serial Penabled Pen eraser id=13 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Sleep Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ ThinkPad Extra Buttons id=11 [slave keyboard (3)]
我不确定这些 ID 是否在所有情况下都相同,但就我而言,我正在查找的条目的 ID 为 11。一旦找到该 ID,请输入 禁用它xinput disable 11
,然后就可以开始了!