安装驱动器和 Udev - Udev 不安装驱动器,但执行脚本的其他方面

安装驱动器和 Udev - Udev 不安装驱动器,但执行脚本的其他方面

我想热插拔外部硬盘、安装它并自动运行 Unison 文件同步器。

我制定了一条 udev 规则,名为/etc/udev/rules.d/100-sync.rules

ACTION=="add", SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="wxyz", ATTRS{idProduct}=="wxyz", RUN+="/home/william/sync.sh"

它触发该脚本:

#!/bin/bash
mkdir /media/william/Backup
mount -U <my_drives_uuid> /media/william/Backup
su william -c 'notify-send "Unison" "Starting Sync"'
su william -c 'unison Desktop_Ext_local_connection.prf -silent > /home/william/unison_errors.log'
su william -c 'notify-send "Unison" "Finished Sync"'
umount /media/william/Backup
rmdir /media/william/Backup

从 root shell 运行脚本按预期工作,但是当它由 udev 触发时,驱动器不会安装。(我仍然收到系统通知和目录创建/销毁)

基于,我认为这不起作用,因为 udev 使用了不同的命名空间。我尝试创建一个文件,/etc/systemd/system/systemd-udevd.service内容如下

[Service]
MountFlags=shared *(and alternatively PrivateMounts=no)*

然而,这并没有改变行为 - 它仍然无法安装。(是的,我重新启动了守护进程)

如何使用 udev 安装驱动器?

脚本完成后,Ubuntu 会自动安装驱动器。有没有办法让 Ubuntu 在 udev 运行我的脚本之前安装驱动器?

我看不到 Ubuntu 用于挂载驱动器的任何 udev 规则,其内容/etc/udev/rules.d只是

100-sync.rules  70-snap.snapd.rules  70-snap.snap-store.rules

那么,我的脚本完成后,Ubuntu 如何安装驱动器,以及如何更改顺序以便首先安装它们?

我正在使用 Ubuntu 20.04.3 LTS,在运行 21.04 的笔记本电脑上也出现了同样的问题

答案1

据我所知,所有包含 FS 挂载的 udev 脚本都是几年前的了。我相信它在出现时就已经改变了systemd

以下是来自的参考说明udev_237-人udev (Ubuntu_18.04)

RUN{type}

     ︙

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

最好采用使用 udev、udisks 等库的解决方案,或者使用持续监视该设备的外部脚本。

顺便说一句,100-对于其他应用程序来说,现在还为时过早(udev 规则文件是按词汇顺序处理的),最好将其更改为高 2 位数字。如果你想最后使用99-

相关内容