首页 > 解决方案 > 如何防止创建 evdev 输入节点

问题描述

在 Debian Linux 中,我需要阻止 udev 为特定的 USB HID 设备创建 /dev/input/event* 节点,同时仍然允许它创建 /dev/hidraw* 节点

我知道事件节点可以被“抓取”,阻止其他进程读取它,但是节点的存在会导致某些应用程序出现问题。你可以争辩说应用程序写得不好,我同意。

事实仍然是,完全阻止它们被创建是非常有用的,同时让关联的设备可以通过原始隐藏接口访问。

我一直假设自定义 udev 规则是实现此目的的一种方法,但到目前为止,我一直无法想出一个仅针对事件节点的规则。禁用整个设备,包括 hidraw*,似乎更容易做到。

我是否误认为这是可能的?

澄清:这是连接saitek操纵杆时的udev监视器输出

KERNEL[54158.243303] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3 (usb)
KERNEL[54158.247164] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0 (usb)
KERNEL[54158.250979] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012 (hid)
KERNEL[54158.251277] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012/input/input47 (input)
KERNEL[54158.251471] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012/input/input47/event21 (input)
KERNEL[54158.251683] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012/input/input47/js0 (input)
KERNEL[54158.251873] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012/hidraw/hidraw11 (hidraw)
KERNEL[54158.251957] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012 (hid)
KERNEL[54158.252021] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0 (usb)
KERNEL[54158.252085] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3 (usb)
UDEV  [54158.259505] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3 (usb)
UDEV  [54158.261152] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0 (usb)
UDEV  [54158.261898] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012 (hid)
UDEV  [54158.263014] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012/input/input47 (input)
UDEV  [54158.264639] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012/hidraw/hidraw11 (hidraw)
UDEV  [54158.265277] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012/input/input47/js0 (input)
UDEV  [54158.403253] add      /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012/input/input47/event21 (input)
UDEV  [54158.405617] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0/0003:06A3:0464.0012 (hid)
UDEV  [54158.411509] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3/1-8.3:1.0 (usb)
UDEV  [54158.425099] bind     /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.3 (usb)

这是 HID 兼容输入设备的典型特征,实际上在大多数设备之间几乎无法区分。我需要做的是允许创建 hidraw* 节点,同时防止 event*(和 js)

似乎事件*可以在 /sys 中使用“unbind”手动解除绑定,同时保持 hidraw 不变,这让我认为 udev 规则应该能够产生相同的最终结果。

标签: linuxhidudevevdev

解决方案


推荐阅读