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

éta*_*ogy 5 input devices input-method

如果我去,/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
Run Code Online (Sandbox Code Playgroud)
  1. 为什么每个设备有两个条目?
  2. 每个条目的目的是什么?

作为旁注,只有一个open(<path_to_device>, O_RDONLY)用于监听输入(对于键盘来说,它是usb-0:1.2:1.0一个)。

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

Kam*_*ski 2

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

. 每个设备没有两个条目。是的,*-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
Run Code Online (Sandbox Code Playgroud)

如您所见,有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
Run Code Online (Sandbox Code Playgroud)

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