为什么 /dev/input/by-path 上每个设备有两个条目

为什么 /dev/input/by-path 上每个设备有两个条目

如果我去,/dev/input/by-path我可以看到我的输入外围设备。

我有一个键盘和一个鼠标,在我的平台上输出是:

pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd
pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse
pci-0000:05:00.0-usb-0:1.1:1.0-mouse
pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd
  1. 为什么每个设备有两个条目?
  2. 每个条目的目的是什么?

顺便说一句,只有一个在open(<path_to_device>, O_RDONLY)监听输入(对于键盘来说,就是这个usb-0:1.2:1.0)。

(我正在运行 Ubuntu;以防万一!)

答案1

为什么每个设备有两个条目?

。每个设备没有两个条目。是的,*-event-mouse并且*-mouse已配对,它们共享相同的pci-0000:05:00.0-usb-0:1.1:1.0标识符,这表明它们是同一设备。另一方面,您的*-event-kbd设备不同。

每个条目的目的是什么?

如果运行ls -l /dev/input/by-path,输出可能是(示例):

pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd -> ../event5
pci-0000:05:00.0-usb-0:1.1:1.0-event-mouse -> ../event6
pci-0000:05:00.0-usb-0:1.1:1.0-mouse -> ../mouse0
pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd -> ../event13

如您所见,有event*mouse*设备。这个文件解释差异:

  • event*

    evdev是通用输入事件接口。它将内核中生成的事件直接传递给程序,并带有时间戳。所有架构上的事件代码都是相同的,并且与硬件无关。

    这是用户空间使用用户输入的首选接口,鼓励所有客户端使用它。

  • mouse*

    mousedev是一种使使用鼠标输入的遗留程序正常工作的技巧。它从鼠标或数字转换器/平板电脑获取事件,并使 PS/2 样式(a la /dev/psaux)鼠标设备可供用户使用。

如果您执行sudo cat pci-0000:05:00.0-usb-0:1.1:1.0-event-mouseand (在单独的控制台中)sudo cat pci-0000:05:00.0-usb-0:1.1:1.0-mouse,您将看到它们都从鼠标读取,但字节流不同。

您已经识别pci-0000:05:00.0-usb-0:1.2:1.0-event-kbd为您的键盘。我认为剩下的设备(pci-0000:05:00.0-usb-0:1.1:1.1-event-kbd)是别的东西。你应该ls -l像上面那样找出它对应的是哪个事件,然后

$ # Example from my laptop
$ cat /sys/class/input/event13/device/name
Laptop_Integrated_Webcam_FHD: I

我的网络摄像头没有物理按钮,但我怀疑同一驱动程序支持有一些物理按钮(例如快照按钮)的网络摄像头。在您的情况下,剩下的设备可能也不是普通键盘。

相关内容