Debian下如何阻止特定USB HID设备生成evdev输入节点并保留hidraw
实现方法
该需求完全可以通过自定义udev规则实现,不会影响hidraw节点的正常创建。
步骤1:编写自定义udev规则
首选方案是使用udev内置的INPUT_IGNORE_DEVICE变量,该变量只会阻止input子系统的节点生成,完全不影响hidraw节点的创建。
创建规则文件/etc/udev/rules.d/99-disable-specific-hid-input.rules,写入以下内容:
# 匹配指定USB HID设备的input子系统设备,禁用event、js等input节点生成 SUBSYSTEM=="input", ENV{ID_VENDOR_ID}=="06a3", ENV{ID_MODEL_ID}=="0464", ENV{INPUT_IGNORE_DEVICE}="1"
这里的06a3和0464对应你提供的Saitek摇杆的厂商ID和产品ID,如果你需要适配其他HID设备,替换为对应设备的ID即可。
步骤2:重载udev规则生效
执行以下命令重载规则:
udevadm control --reload-rules
之后重新拔插对应USB设备即可验证效果。
验证效果
- 执行
ls /dev/input/,确认没有对应设备的event、js节点 - 执行
ls /dev/hidraw*,确认对应hidraw节点正常存在
备选方案(手动解绑)
如果你需要使用unbind的方式实现,也可以将解绑逻辑写入udev规则,效果和手动操作一致:
SUBSYSTEM=="input", KERNEL=="event*", ENV{ID_VENDOR_ID}=="06a3", ENV{ID_MODEL_ID}=="0464", RUN+="/bin/sh -c 'echo $kernel > /sys/bus/input/drivers/evdev/unbind'" SUBSYSTEM=="input", KERNEL=="js*", ENV{ID_VENDOR_ID}=="06a3", ENV{ID_MODEL_ID}=="0464", RUN+="/bin/sh -c 'echo $kernel > /sys/bus/input/drivers/joydev/unbind'"
该方案优先级低于第一种,仅在特殊场景下使用。
内容的提问来源于stack exchange,提问作者Colin Hahn
相关产品推荐
相关产品推荐

