Linux 如何检查输入设备是否在同一物理设备中?

Linux 如何检查输入设备是否在同一物理设备中?,linux,input,Linux,Input,因为一些输入设备(如gamepad)可能会引入一些虚拟设备(如操纵杆+鼠标+键盘),所以我需要在我的应用程序中对它们进行分组,以确保它们是同一个gamepad。我在Linux中找不到可靠的方法来识别这种情况。USB有uniq字段,通常也称为序列号,但我发现: 大多数设备都是空的 许多廉价/DIY设备滥用此字段,将所有物理设备的静态数据填入其中,因此一旦分组,所有游戏板将看起来像一个,尽管它们在物理上是分开的 显然,这个领域是不可靠的。按名称进行比较也不可靠,因为几个相同的输入设备将被分组 因此,

因为一些输入设备(如gamepad)可能会引入一些虚拟设备(如操纵杆+鼠标+键盘),所以我需要在我的应用程序中对它们进行分组,以确保它们是同一个gamepad。我在Linux中找不到可靠的方法来识别这种情况。USB有uniq字段,通常也称为序列号,但我发现:

  • 大多数设备都是空的
  • 许多廉价/DIY设备滥用此字段,将所有物理设备的静态数据填入其中,因此一旦分组,所有游戏板将看起来像一个,尽管它们在物理上是分开的
  • 显然,这个领域是不可靠的。按名称进行比较也不可靠,因为几个相同的输入设备将被分组


    因此,我需要一种可靠的方法来检测/dev/input/event0和/dev/input/event1是否在物理上是同一个设备。

    我不认为一个USB小工具可以显示为多个设备,但它可以有多个配置和接口。除非该设备本身实现了USB集线器。除了Try
    ls/dev/input/by path
    所有USB和PCI设备在/sys文件系统中都有一个物理路径之外,您可以轻松地选择整个树。我不是说设备内部有USB集线器。所以,只有虚拟设备(这里的设备是/dev中的项目,所以从应用程序视图来看,它们完全是从真实设备抽象出来的)作为单个物理设备的一部分才是本主题的主题。使用/dev/input/eventX设备时,配置/接口不适用。USB设备树并没有那么大的帮助,因为当您到达根目录时,很难知道在哪里停止。关键问题是要告诉/dev/input/event1和/dev/input/event2是否属于同一操纵杆/游戏板,所以这意味着即使在USB树中旅行,我也需要知道它到底映射到了什么eventX。用户可以插入2个或更多相同的操纵手柄,因此通过VID/PID进行匹配将不起作用。