出于安全原因,我想防止输入设备无法在某个USB端口上使用。非输入功能(例如大容量存储或ttyUSB)必须在此端口上可用。输入设备必须仍在其他 USB 端口上工作。
“无法使用”意味着例如没有/dev/input/eventX
创建相应的设备并且通用框架(X11、linux控制台)不接受来自设备的输入。
我可以通过 udev 规则识别 USB 端口,例如
DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7/2-1.7.1/*"
但我不知道如何禁用它。
支持古老的 udev 版本OPTIONS+="ignore_device"
,但此选项已消失。
我怎样才能做到这一点?
答案1
您需要为每种可能的输入设备类型编写一条规则,即:
- ID_INPUT_KEYBOARD
- ID_INPUT_KEY
- ID_INPUT_MOUSE
- ID_INPUT_触摸板
- ID_输入_平板电脑
- ID_INPUT_JOYSTICK
在规则中,测试具有该名称的环境变量是否为非空,例如将其与?*
仅在存在至少一个字符时才匹配的 glob 模式进行匹配。例如:
ENV{ID_INPUT_KEYBOARD}=="?*"
在每条规则中,当匹配时,将设备的authorized
属性设置为0,例如:
ATTR{authorized}="0"
最好替换=
为,:=
这样它就不会被以后的规则覆盖。这给出了一个典型的规则:
ACTION=="add", DEVPATH=="...", ENV{ID_INPUT_KEYBOARD}=="?*", ATTR{authorized}:="0"
看这个演示文稿作者:阿德里安·克伦肖。