如何打开XInput2设备,例如由XIQueryDevice
报告到适当的sysfs
节点?该设备是通用HID设备,由evdev
输入驱动程序处理。
我知道我可以获得该设备的name
。我可以查看Xorg.0.log
并尝试查找添加此设备的相应日志消息,希望它提到与之关联的/dev/input/event*
设备节点。或者我可以查看sysfs
中的所有输入事件,查找具有该名称的输入事件,并希望该名称是唯一的,并且与通过XInput报告的名称相同。但我希望有一个更清洁的解决方案。
答案 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
作为参数。