如何udev
为插入的任何USB大容量存储设备而不只是特定设备实施规则?什么应该改变的idVendor
,和idProduct
?
ACTION=="add", SUBSYSTEM=="usb", SYSFS{idVendor}=="0204", SYSFS{idProduct}=="6025",
RUN+="/home/workspace/bash_script.sh"
如何udev
为插入的任何USB大容量存储设备而不只是特定设备实施规则?什么应该改变的idVendor
,和idProduct
?
ACTION=="add", SUBSYSTEM=="usb", SYSFS{idVendor}=="0204", SYSFS{idProduct}=="6025",
RUN+="/home/workspace/bash_script.sh"
Answers:
block
子系统中有一个存储设备,因此您需要SUBSYSTEM=="block"
遵循以下规则:
ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", \
RUN+="/path/to/script"
如果您使用systemd
,则systemd
每次添加USB存储设备时都可以运行一个设备。创建单位文件,例如/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
将my-usb-rule.service
在任何USB存储设备添加事件上触发(依次执行脚本)。
编辑规则/单位后,请不要忘记重新加载配置:
udevadm control --reload
systemctl daemon-reload
SUBSYSTEM=="block", SUBSYSTEMS=="usb"
(注意与S的区别)。我怀疑它始终可以ENV{ID_BUS}=="usb"
在原始答案中使用,因为我在这里看到了scsi的价值。但是,我正在解决一个与最初询问的问题稍有不同的问题,我需要任何USB记忆棒(pendrive),但没有外部驱动器。
ENV{ID_BUS}
在所有系统上价值都不相同。昨天,我正在使用udev 210开发较旧的系统(我相信。由于机器不在Internet上,所以现在无法检查),值是scsi。现在,我在使用udev 228的较新计算机上,值是usb。对于同一个USB记忆棒,我将其随身携带。(不确定udev版本是否是此处的相关因素,也可以是内核或安装udev规则的任何其他软件包,例如udisks2)SUBSYSTEM=="block", SUBSYSTEMS=="usb"
(请注意 S)仍可移植且安全。