将XInput2设备映射到sysfs节点



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

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

您可以使用xinput命令获取设备Id。由此可以使用xinput list-props <device id>获取设备节点路径。属性261是设备节点。

一旦有了设备节点,就可以使用udevadm info -p $(udevadm info -q path -n <device node path>)获取sysfs节点路径。

懒惰的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}')

`

要以编程方式执行此操作,您需要使用XIDeviceInfo(例如XIDeviceInfo->deviceid)中的设备ID调用XIGetProperty,示例调用语法如下。

要从设备路径获取sysfs路径,可以使用带有stat的udev_device_new_from_devnum(如这里所示),从设备路径生成udev_device,然后使用该udev_device作为参数调用udev_device_get_syspath

输入设备可以具有其他属性;XIListProperties将列举它们。至少在我的系统中,其中一个属性是"设备节点",它指向设备的/dev/input/eventX设备。

不过,基本上,XIQueryDevice查找设备,然后XIGetProperty查找每个设备上的"设备名称"属性。(你需要一些原子内部的东西。)

xinput实用程序(此处代码)可以显示以下信息:xinput list-props $devid,并且应该作为一个完整的操作示例

相关内容

  • 没有找到相关文章

最新更新