OP完全重新编辑。
我的Razer Cynosa 狼蛛幻彩版是一个物理设备(基本上不超过 PC_105 键盘),提供 3 个接口(1),其中一个用于同时发送一些扫描码,另一个用于在按下任何键时发送一些内部转码的鼠标报告。
我正在寻找一种在X下将后者用作鼠标的方法。
所有 3 个接口都会在启动时正确枚举,并绑定到适当的 hid 通用内核内置驱动程序 (2)
然后反弹到雷泽克布德模式探测时的驱动程序 (3)
其中每一项稍后都会与输入事件相关联并由 X11 服务器 (xorg-server-21.1.4) 注册:
- 对于此类设备,通常的方式是关于键盘类型的第一个接口(设备 ID 9)和鼠标类型的第三个接口(设备 ID 11)(4)
- 对于第二个键盘类型(设备 ID 10),以某种对我来说不寻常且至少不明确的方式。 (5) (参见配置为鼠标/配置为键盘顺序)
所有这些导致报告令人困惑
$ xinput --list --short
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ MOSART Semi. 2.4G Wireless Mouse id=8 [slave pointer (2)]
⎜ ↳ Razer Razer Cynosa Chroma id=10 [slave pointer (2)]
⎜ ↳ Razer Razer Cynosa Chroma id=11 [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)]
↳ Power Button id=7 [slave keyboard (3)]
↳ Razer Razer Cynosa Chroma id=9 [slave keyboard (3)]
(设备 ID 10 仅报告为从属指针,而最初注册为键盘类型。)
注意到cat /dev/input/event5
按下任意键时会打印类似鼠标的通信,并且由于 event5 链接到设备 ID 10,因此xinput --test-xi2 10
仅记录键盘事件类型 13 (原始按键)和 14(原始密钥发布)
evdev 会不会感到困惑?
1:lsusb -vs 008:002
报告:
$ lsusb -vs 008:002
Bus 008 Device 002: ID 1532:022a Razer USA, Ltd Cynosa Chroma
Device Descriptor:
…
Configuration Descriptor:
…
bNumInterfaces 3
…
Interface Descriptor:
…
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
…
Interface Descriptor:
…
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0
bInterfaceProtocol 1 Keyboard
…
Interface Descriptor:
…
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0
bInterfaceProtocol 2 Mouse
…
2:Bootlog 枚举 USB 设备
[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/0003:1532:022A.0002/input/input4
[kernel] hid-generic 0003:1532:022A.0002: input: USB HID v1.11 Keyboard [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input0
[kernel] input: Razer Razer Cynosa Chroma Keyboard as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.1/0003:1532:022A.0003/input/input5
[kernel] input: Razer Razer Cynosa Chroma Consumer Control as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.1/0003:1532:022A.0003/input/input6
[kernel] hid-generic 0003:1532:022A.0003: input: USB HID v1.11 Keyboard [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input1
[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.2/0003:1532:022A.0004/input/input9
[kernel] hid-generic 0003:1532:022A.0004: input: USB HID v1.11 Mouse [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input2
3:在 modprobe 时重新绑定 Razer 接口
[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/0003:1532:022A.0002/input/input10
[kernel] razerkbd 0003:1532:022A.0002: input: USB HID v1.11 Keyboard [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input0
[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.1/0003:1532:022A.0003/input/input11
[kernel] razerkbd 0003:1532:022A.0003: input: USB HID v1.11 Keyboard [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input1
[kernel] input: Razer Razer Cynosa Chroma as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.2/0003:1532:022A.0004/input/input12
[kernel] razerkbd 0003:1532:022A.0004: input: USB HID v1.11 Mouse [Razer Razer Cynosa Chroma] on usb-0000:00:1d.2-2/input2
4:第一个键盘接口和鼠标接口的XCONFIG-ing
config/udev: Adding input device Razer Razer Cynosa Chroma (/dev/input/event4)
Razer Razer Cynosa Chroma: Applying InputClass "evdev keyboard catchall"
Razer Razer Cynosa Chroma: Applying InputClass "system-keyboard"
Using input driver 'evdev' for 'Razer Razer Cynosa Chroma'
systemd-logind: got fd for /dev/input/event4 13:68 fd 39 paused 0
Razer Razer Cynosa Chroma: always reports core events
evdev: Razer Razer Cynosa Chroma: Device: "/dev/input/event4"
evdev: Razer Razer Cynosa Chroma: Vendor 0x1532 Product 0x22a
evdev: Razer Razer Cynosa Chroma: Found keys
evdev: Razer Razer Cynosa Chroma: Configuring as keyboard
Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/0003:1532:022A.0002/input/input10/event4"
Adding extended input device "Razer Razer Cynosa Chroma" (type: KEYBOARD, id 9)
Option "xkb_rules" "evdev"
config/udev: Adding input device Razer Razer Cynosa Chroma (/dev/input/event6)
Razer Razer Cynosa Chroma: Applying InputClass "evdev pointer catchall"
Using input driver 'evdev' for 'Razer Razer Cynosa Chroma'
systemd-logind: got fd for /dev/input/event6 13:70 fd 41 paused 0
Razer Razer Cynosa Chroma: always reports core events
evdev: Razer Razer Cynosa Chroma: Device: "/dev/input/event6"
evdev: Razer Razer Cynosa Chroma: Vendor 0x1532 Product 0x22a
evdev: Razer Razer Cynosa Chroma: Found 9 mouse buttons
evdev: Razer Razer Cynosa Chroma: Found scroll wheel(s)
evdev: Razer Razer Cynosa Chroma: Found relative axes
evdev: Razer Razer Cynosa Chroma: Found x and y relative axes
evdev: Razer Razer Cynosa Chroma: Configuring as mouse
evdev: Razer Razer Cynosa Chroma: Adding scrollwheel support
evdev: Razer Razer Cynosa Chroma: YAxisMapping: buttons 4 and 5
evdev: Razer Razer Cynosa Chroma: EmulateWheelButton: 4, EmulateWheelInertia: 10, EmulateWheelTimeout: 200
Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.2/0003:1532:022A.0004/input/input12/event6"
XINPUT: Adding extended input device "Razer Razer Cynosa Chroma" (type: MOUSE, id 11)
evdev: Razer Razer Cynosa Chroma: initialized for relative axes.
Razer Razer Cynosa Chroma: (accel) keeping acceleration scheme 1
Razer Razer Cynosa Chroma: (accel) acceleration profile 0
Razer Razer Cynosa Chroma: (accel) acceleration factor: 2.000
Razer Razer Cynosa Chroma: (accel) acceleration threshold: 4
5:第二个键盘接口的 XCONFIG-ing 不明确
config/udev: Adding input device Razer Razer Cynosa Chroma (/dev/input/event5)
Razer Razer Cynosa Chroma: Applying InputClass "evdev keyboard catchall"
Razer Razer Cynosa Chroma: Applying InputClass "system-keyboard"
Using input driver 'evdev' for 'Razer Razer Cynosa Chroma'
systemd-logind: got fd for /dev/input/event5 13:69 fd 40 paused 0
Razer Razer Cynosa Chroma: always reports core events
evdev: Razer Razer Cynosa Chroma: Device: "/dev/input/event5"
evdev: Razer Razer Cynosa Chroma: Vendor 0x1532 Product 0x22a
evdev: Razer Razer Cynosa Chroma: Found 1 mouse buttons
evdev: Razer Razer Cynosa Chroma: Found scroll wheel(s)
evdev: Razer Razer Cynosa Chroma: Found relative axes
evdev: Razer Razer Cynosa Chroma: Forcing relative x/y axes to exist.
evdev: Razer Razer Cynosa Chroma: Found absolute axes
evdev: Razer Razer Cynosa Chroma: Forcing absolute x/y axes to exist.
evdev: Razer Razer Cynosa Chroma: Found keys
evdev: Razer Razer Cynosa Chroma: Configuring as mouse
evdev: Razer Razer Cynosa Chroma: Configuring as keyboard
evdev: Razer Razer Cynosa Chroma: Adding scrollwheel support
evdev: Razer Razer Cynosa Chroma: YAxisMapping: buttons 4 and 5
evdev: Razer Razer Cynosa Chroma: EmulateWheelButton: 4, EmulateWheelInertia: 10, EmulateWheelTimeout: 200
Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.1/0003:1532:022A.0003/input/input11/event5"
XINPUT: Adding extended input device "Razer Razer Cynosa Chroma" (type: KEYBOARD, id 10)
Option "xkb_rules" "evdev"
evdev: Razer Razer Cynosa Chroma: initialized for relative axes.
evdev: Razer Razer Cynosa Chroma: ignoring absolute axes.
Razer Razer Cynosa Chroma: (accel) keeping acceleration scheme 1
Razer Razer Cynosa Chroma: (accel) acceleration profile 0
Razer Razer Cynosa Chroma: (accel) acceleration factor: 2.000
Razer Razer Cynosa Chroma: (accel) acceleration threshold: 4
答案1
一些背景知识:X 最初只有一个鼠标和一个键盘。 XINPUT 扩展(现在是第二个主要版本)使这变得更加灵活。它保留了原来的单鼠标和单键盘作为“核心指针”和“核心键盘”,但允许额外的“主设备”,如核心对,并将所有设备变成可以附加到主设备的从设备。 X 应用程序也可以直接查询 XINPUT 事件,但很少有应用程序真正这样做;大多数应用程序只对“核心”事件做出反应。
默认情况下(至少在我的系统上),所有 evdev 设备都连接到“核心”主设备,作为键盘或鼠标。显然这在您的系统上不起作用。您可以使用 查看当前映射xinput --list
,并且无论映射如何,您都可以检查xinput --test-xi2 <device id>
某些设备是否实际产生输出。
为了完整起见,如果您需要在较低级别上调试事件(在 X 处理它们之前),那么evtest
可以帮助查看内核输入层发生了什么。
因此,如果您可以使用 看到鼠标事件xinput --test-xi2 <razor id>
,并且由于某种原因,您的“Razer 键盘鼠标”由于未附加到核心指针而无法使用,那么您可以在必要时使用xinput --float <razor id>
`xinput - 取消附加它,并将其附加到核心指针 - -重新附加<核心指针id'。
如果发生其他事情(我不知道是什么,到目前为止您没有提供任何附加信息),例如,如果您在“Razer键盘鼠标”上获取键盘事件,那么事情会变得更加复杂。
即使您的 udev 和/或 xorg.conf 搞砸了,也应该可以使用命令行工具使所有内容进入工作状态(除非有更根本的错误,例如没有鼠标事件)。完成此操作后,您可以查看配置文件以使其永久化。
好的,有了新信息:您有三个输入层设备(不是我根据原始问题所认为的两个),以及三个相应的 X 设备,一个键盘,一个鼠标,一种混合设备。
因此,第一步是弄清楚这些设备在内核输入层上的作用。所以evtest
三个都跑吧。当您使用它时,请确保使用符号链接来/dev/input/by-*
引用所有三个,选择对您来说最方便的符号链接(by-id
可能就足够了)。请编辑您的问题,并提供所有三个相关的输出,以及您按下的键以及该键是否产生预期效果。
对所有三个设备重复此操作xinput --test-xi2 ...
,查看事件是否正确转换为 X。
如果您有两个设备产生 X 指针事件(例如,如果混合设备和鼠标都产生这些事件),则浮动混合设备。然后它应该可以工作,xev
如果需要的话可以用来测试。
如果没有一个设备产生 X 指针事件,那么我们需要查看更多细节来弄清楚发生了什么。