在没有 sudo 权限的脚本中处理 USB 驱动器读/写操作

在没有 sudo 权限的脚本中处理 USB 驱动器读/写操作

我正在开发一个应用程序,有时需要写入 USB 驱动器单元。该应用程序以非超级用户权限执行,我认为在驱动器上写入的最佳方法是在插入驱动器后立即使用刷新选项安装它,这样,理论上我不需要使用以下 udev 规则执行任何 umount 操作:

ACTION="add", KERNEL="sd*[0-9]", SUBSYSTEMS="usb", RUN+="/bin/sh mymountscript.sh '%E{DEVNAME}'"

安装脚本尝试以这种方式调用命令:

mount -o --flush $1 /media/my-user/my-usb-unit

但我得到这个安装错误:

mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

令人好奇的是,只有在尝试通过 udev 规则安装它时,我才会收到此错误,如果我调用mymountscript.sh自己,该单元就会正确安装在该点上。

除了这个问题的解决方案之外,我想知道这样做是否有风险(我理解这是因为我在写入文件后没有卸载驱动器)。如果我采取另一种方式,我将需要应用程序脚本(代表用户执行)能够自己安装/卸载单元。为此,我需要在插入设备名称时将其保存在某处,并授予应用程序安装权限。

操作系统是Xubuntu 16.04。

答案1

我的解决方法是这样管理它:

  1. 一项用于 USB 插入操作的 udev 规则。

  2. 与此同时,脚本本身也会挂载/卸载驱动器。

  3. 一项用于 USB 删除操作的 udev 规则。

USB 已插入

我执行一个脚本,该脚本仅将设备名称保存到文件中。我可以在此规则中附加任何其他脚本:

ACTION=”add”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh my-usb-inserted.sh”,  RUN+=”/bin/sh myownscript.sh” 

在这里,myownscript.sh将使用安装设备挂载,允许标准用户安装/卸载可移动驱动器。我可以在这些脚本之后调用任何其他脚本,只要我在下一个使用它之前卸载每个脚本中的单元即可。

USB 被移除

在这里,一个简单的脚本删除了创建的文件my-usb-inserted.sh,因此我们知道脚本中没有插入任何闪存单元。

ACTION=”remove”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh usb-removed.sh” 

这一解决方法没有考虑到必须处理多个 USB 驱动器这一事实。

也可以看看:

相关内容