1

如何将 XInput2 设备(例如由 报告的XIQueryDevice)转换为适当的sysfs节点?该设备是通用 HID 设备,由evdev输入驱动程序处理。

我知道我可以得到name设备的。我也许可以查看Xorg.0.log并尝试找到添加此设备时的适当日志消息,希望它提到与该/dev/input/event*设备关联的设备节点。或者我可以查看 中的所有输入事件sysfs,查找具有该名称的事件,并希望该名称是唯一的并且与通过 XInput 报告的名称相同。但我希望有比这两种方法更清洁的解决方案。

4

2 回答 2

2

输入设备可以有额外的属性;XIListProperties将枚举它们。至少在我的系统上,这些属性之一是“设备节点”,它指向/dev/input/eventX设备的设备。

不过,基本上,XIQueryDevice要找到设备,然后XIGetProperty为每个设备上的“设备名称”属性。(你需要一些原子实习的东西。)

xinput实用程序(此处的代码)可以显示此信息:xinput list-props $devid并且应该作为一个完整的示例来说明该做什么。

于 2015-05-13T22:12:37.890 回答
2

xinput您可以使用命令获取设备 ID 。从中您可以使用xinput list-props <device id>. 属性 261 是设备节点。

拥有设备节点后,您可以使用udevadm info -p $(udevadm info -q path -n <device node path>).

懒惰的oneliner是

 udevadm info  -q path -n $(xinput list-props `xinput | grep "search term" | awk -F "id=" '{print $2}' | awk  '{print $1}'` | grep "261" | awk -F '"' '{print $2}')

`

要以编程方式执行此操作,您希望使用来自(例如)XIGetProperty的 deviceid进行调用,示例调用语法在此处XIDeviceInfoXIDeviceInfo->deviceid

要从设备路径获取 sysfs 路径,请使用udev_device_new_from_devnumwith stat(如此处所示udev_device从设备路径生成 a,然后udev_device_get_syspath以它udev_device作为参数调用。

于 2015-05-13T22:35:42.210 回答