ENV 与 ATTR/ATTRS

ENV 与 ATTR/ATTRS

我正在尝试将 USB 自动挂载到我的树莓派上,但我似乎无法让我的 udev 规则发挥作用。

我正在使用的代码是:

ACTION=="add", ENV{ID_MODEL}=="Flash_Drive", RUN+="bin/mkdir /home/pi/heyimhere"

这不起作用,因为插入闪存驱动器时不会在该位置创建目录。

我很幸运地使用 USB 来关闭,使用相同的规则,这次使用以下行将其关闭:

ACTION=="remove", ENV{ID_MODEL}=="Flash_Drive", RUN+="sbin/shutdown -h now"

哪个有效 - 一旦你拔掉 USB,它就会关闭。

为什么?我应该使用 ATTR 进行添加吗?

答案1

ENV 与 ATTR/ATTRS

ATTR{文件名}
  匹配事件设备的 sysfs 属性值。

ATTRS{文件名}
  在 devpath 中向上搜索具有匹配 sysfs 属性值的设备。如果指定了多个 ATTRS 匹配,则所有这些匹配都必须在同一设备上匹配。

ENV{键}
  与设备属性值匹配。

如果两者都ENV包含ATTR相同的信息 - 您可以使用其中任何一个,没有任何区别。

ENV相关设备的 s 可以包含从不同父设备派生的值。因此,使用ENVs 有时您可以同时匹配来自多个父设备的值,而这是不可能的ATTRS


创建目录的规则

必须使用绝对路径RUN键(RUN+="/bin/mkdir /home/pi/heyimhere"在您的示例中):

如果没有给出绝对路径,则程序预计位于 /usr/lib/udev 中;否则,必须指定绝对路径

顺便说一句,我不知道为什么你的关闭规则会起作用。它不应该,因为sbin/shutdown没有领先/


从 udev 规则挂载

正如杰森·乌瑞恩提及,你不能使用 udev 进行自动挂载

请注意,运行访问网络或udev 规则内不允许挂载/卸载文件系统,由于 systemd-udevd.service 上强制执行的默认沙箱。

相关内容