将 XInput2 设备映射到 sysfs 节点
Map XInput2 devices to sysfs nodes
如何打开 XInput2 设备,例如正如 XIQueryDevice
所报告的那样,进入适当的 sysfs
节点?该设备是通用 HID 设备,由 evdev
输入驱动程序处理。
我知道我可以获得设备的name
。我也许可以查看 Xorg.0.log
并尝试找到添加此设备时的相应日志消息,希望它提到与之关联的 /dev/input/event*
设备节点。或者我可以查看 sysfs
中的所有输入事件,查找具有该名称的事件,并希望该名称是唯一的并且与通过 XInput 报告的事件相同。但我希望有比这两个更干净的解决方案。
输入设备可以有额外的属性; XIListProperties
将枚举它们。至少在我的系统上,这些属性之一是 "Device Node",它指向设备的 /dev/input/eventX
设备。
但基本上,XIQueryDevice
找到设备,然后 XIGetProperty
找到每个设备上的 "Device Name" 属性。 (你需要一些原子实习的东西。)
xinput
实用程序 (code here) 可以显示此信息:xinput list-props $devid
并且应该作为一个完整的示例来说明如何操作。
您可以使用 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 }' | awk '{print }'` | grep "261" | awk -F '"' '{print }')
`
要以编程方式执行此操作,您需要使用 XIDeviceInfo
中的设备 ID 调用 XIGetProperty
(例如 XIDeviceInfo->deviceid
),示例调用语法为 here.
要从设备路径获取 sysfs 路径,请使用 udev_device_new_from_devnum
和 stat(如 here 所示),从设备路径创建 udev_device
,然后调用 udev_device_get_syspath
以 udev_device
作为参数。
如何打开 XInput2 设备,例如正如 XIQueryDevice
所报告的那样,进入适当的 sysfs
节点?该设备是通用 HID 设备,由 evdev
输入驱动程序处理。
我知道我可以获得设备的name
。我也许可以查看 Xorg.0.log
并尝试找到添加此设备时的相应日志消息,希望它提到与之关联的 /dev/input/event*
设备节点。或者我可以查看 sysfs
中的所有输入事件,查找具有该名称的事件,并希望该名称是唯一的并且与通过 XInput 报告的事件相同。但我希望有比这两个更干净的解决方案。
输入设备可以有额外的属性; XIListProperties
将枚举它们。至少在我的系统上,这些属性之一是 "Device Node",它指向设备的 /dev/input/eventX
设备。
但基本上,XIQueryDevice
找到设备,然后 XIGetProperty
找到每个设备上的 "Device Name" 属性。 (你需要一些原子实习的东西。)
xinput
实用程序 (code here) 可以显示此信息:xinput list-props $devid
并且应该作为一个完整的示例来说明如何操作。
您可以使用 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 }' | awk '{print }'` | grep "261" | awk -F '"' '{print }')
`
要以编程方式执行此操作,您需要使用 XIDeviceInfo
中的设备 ID 调用 XIGetProperty
(例如 XIDeviceInfo->deviceid
),示例调用语法为 here.
要从设备路径获取 sysfs 路径,请使用 udev_device_new_from_devnum
和 stat(如 here 所示),从设备路径创建 udev_device
,然后调用 udev_device_get_syspath
以 udev_device
作为参数。