【问题标题】:Map XInput2 devices to sysfs nodes将 XInput2 设备映射到 sysfs 节点
【发布时间】:2015-07-21 22:56:07
【问题描述】:

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

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

【问题讨论】:

    标签: linux sysfs xinput evdev


    【解决方案1】:

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

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

    xinput 实用程序 (code here) 可以显示以下信息:xinput list-props $devid,并且应该作为一个完整的示例来说明如何操作。

    【讨论】:

      【解决方案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}')
      

      `

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

      要从设备路径获取 sysfs 路径,请使用 udev_device_new_from_devnum 和 stat(如 here 所示),从设备路径创建 udev_device,然后使用 udev_device 调用 udev_device_get_syspath论据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-30
        • 1970-01-01
        • 2011-03-30
        • 2012-07-31
        • 2013-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多