Udev 规则匹配任何 USB 存储设备

Udev 规则匹配任何 USB 存储设备

如何udev为插入的任何 USB 大容量存储设备实施规则,而不仅仅是特定的设备?idVendor和应该改变什么idProduct

 ACTION=="add", SUBSYSTEM=="usb", SYSFS{idVendor}=="0204", SYSFS{idProduct}=="6025",
     RUN+="/home/workspace/bash_script.sh"

答案1

存储设备位于block子系统中,因此您需要SUBSYSTEM=="block"在规则中添加如下内容:

ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", \
    RUN+="/path/to/script"

如果您使用的是,则每次添加 USB 存储设备时都systemd可以运行一个单元。systemd创建单元文件,例如/etc/systemd/system/my-usb-rule.service

[Service]
Type=oneshot
ExecStart=/path/to/script

和规则,例如/etc/udev/rules.d/85-my-usb-rule.rules

ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", \
    ENV{SYSTEMD_WANTS}="my-usb-rule.service"

现在udev将在任何 USB 存储设备上触发my-usb-rule.service(进而执行您的脚本)添加事件。


编辑规则/单元后,不要忘记重新加载配置:

udevadm control --reload
systemctl daemon-reload

相关内容