linux - 如何防止创建 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 规则应该能够产生相同的最终结果。
解决方案
推荐阅读
- java - Vert.x 线程命名 - “vert.x-worker-thread-...”
- visual-studio - 在 VS 的 MSI 设置中强制文件随 Windows 自动启动
- c# - why I couldn't see the referenced dll module hosted by a process
- sql - Oracle - 按日期区分组
- java - how can i still get this problem after i mention the service in the manifest
- javascript - How do I use requirejs in the browser?
- r - Generate Absolute xpath of given webElement in RSelenium [R]
- bash - How to run commands after login to shell command of a container in a VM?
- java - 除非我使用 .join(),否则为什么同步方法不会被锁定?
- css - 适合在 Flexbox/Grid 中缩放的图像行?