我有一个 Microsoft 一体式无线媒体键盘 (n9z-00001),它在我当前的发行版 Arch Linux 中表现得很奇怪。 ( Linux 3.19.3-3-ARCH #1 SMP PREEMPT Wed Apr 8 14:10:00 CEST 2015 x86_64 GNU/Linux
)
$ lsusb | grep -i micro
Bus 001 Device 008: ID 045e:0800 Microsoft Corp.
这就是 xinput 产生的结果。请注意,该设备有两个键盘,其中一个具有特殊的键盘(keys)
$ xinput list | grep -i micro
⎜ ↳ Microsoft Microsoft® Nano Transceiver v2.0 id=12 [slave pointer (2)]
⎜ ↳ Microsoft Microsoft® Nano Transceiver v2.0 id=11 [slave pointer (2)]
↳ Microsoft Microsoft® Nano Transceiver v2.0 (keys) id=10 [slave keyboard (3)]
↳ Microsoft Microsoft® Nano Transceiver v2.0 id=9 [slave keyboard (3)]
我可以直接用 听琴键evtest
。虽然是同一个键盘
$ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Power Button
/dev/input/event2: Video Bus
/dev/input/event3: Video Bus
/dev/input/event4: AT Translated Set 2 keyboard
/dev/input/event5: Microsoft Microsoft® Nano Transceiver v2.0
/dev/input/event6: Microsoft Microsoft® Nano Transceiver v2.0
/dev/input/event7: Microsoft Microsoft® Nano Transceiver v2.0
/dev/input/event8: ThinkPad Extra Buttons
/dev/input/event9: HDA Digital PCBeep
/dev/input/event10: HDA Intel PCH Mic
/dev/input/event11: HDA Intel PCH Headphone
/dev/input/event12: HDA Intel HDMI HDMI/DP,pcm=3
/dev/input/event13: HDA Intel HDMI HDMI/DP,pcm=7
/dev/input/event14: HDA Intel HDMI HDMI/DP,pcm=8
/dev/input/event15: SynPS/2 Synaptics TouchPad
/dev/input/event16: Integrated Camera
/dev/input/event17: Logitech M705
/dev/input/event18: TPPS/2 IBM TrackPoint
/dev/input/event19: daskeyboard
/dev/input/event20: daskeyboard
Select the device event number [0-20]:
- 设备 ID 9
xinput
对应于/dev/input/event5
,它具有除部分媒体键之外的所有常规键。 - id 10 对应于
/dev/input/event7
,并且有媒体键F1-F4
和其他 6 个与音量控制和其他微软东西相关的键。 - 我猜这
/dev/input/event6
对应于键盘上的触摸板。
问题出在功能键上。放置在应放置位置的媒体键F1-F5
被分配给“ (keys)
”设备,而F6-F12
被分配给另一个设备。我想将媒体键映射回功能键,这样我就不必每次都按 Fn。
问题一:媒体键(通过输入设备 10 传送的键(keys)
)不由 注册xev
。它们使用showkey --scancodes
和生成输出evtest
,但它们没有被 X 拾取。如何解决这个问题?
问题2:
通过输入设备工作的媒体键9
会发送多个扫描码,并且据我所知,无法使用以下方法重新映射多个键hwdb
,如图所示这里。以下是媒体键发送的扫描码F7
Event: time 1430059493.552417, -------------- EV_SYN ------------
Event: time 1430059493.560416, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1430059493.560416, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1430059493.560416, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e3
Event: time 1430059493.560416, type 1 (EV_KEY), code 125 (KEY_LEFTMETA), value 0
Event: time 1430059493.560416, -------------- EV_SYN ------------
我不知道如何将多个扫描码绑定到单个事件;现在 X 正在检测所有单独的键并将它们映射到相应的事件。例如,根据上面的输出, media key on F7
send Ctrl+Alt+Scanner
。由于谷歌搜索没有结果,我该怎么做?
答案1
Fn您可以按+将 F 按钮锁定到 F 按钮而不是多媒体按钮,而不是重新映射按键,CapsLock如果再次按则反之亦然。
答案2
卸载 xf86-input-joystick 包后我终于遇到了同样的问题问题解决了 https://forum.manjaro.org/t/microsof-all-in-one-keyboard-problem/15560