将XInput2设备映射到sysfs节点

时间:2015-05-11 12:27:24

标签: linux sysfs xinput evdev

如何打开XInput2设备,例如由XIQueryDevice报告到适当的sysfs节点?该设备是通用HID设备,由evdev输入驱动程序处理。

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

2 个答案:

答案 0 :(得分:2)

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

但是,基本上,XIQueryDevice可以找到设备,然后XIGetProperty用于"设备名称"他们每个人的财产。 (你在那里需要一些原子内在的东西。)

xinput实用程序(code here)可以显示以下信息:xinput list-props $devid,并且应该作为完成的示例。

答案 1 :(得分:2)

您可以使用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}')

`

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

要从设备路径获取sysfs路径,请使用udev_device_new_from_devnum和stat(如演示here),从设备路径创建udev_device,然后调用{{1用udev_device_get_syspath作为参数。