当安装特定的闪存驱动器时如何运行脚本?

当安装特定的闪存驱动器时如何运行脚本?

有没有办法在安装特定的 USB 设备时运行脚本?

我将视频保存在单独的 USB 上,并想运行一个脚本,将 USB 设备上的视频文件夹安装到主文件夹中。

答案1

有更好的解决方案systemd现在。您创建一个依赖于媒体并且媒体需要的服务,例如:/etc/systemd/system/your.service

[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount

[Service]
ExecStart=/home/you/bin/triggerScript.sh

[Install]
WantedBy=media-YourMediaLabel.mount

然后您必须启动/启用该服务:

sudo systemctl start your.service
sudo systemctl enable your.service

挂载后,systemd 会触发触发脚本。与 udev 规则相比,其优势在于脚本真正在挂载后触发,而不是在添加系统设备后触发。

用例:我有一个加密分区,我想自动备份它。添加设备后,我必须输入密码。如果我将备份脚本挂接到 udev,则脚本会在我输入密码时尝试运行,但会失败。

资源:使用 udev 编写脚本

笔记:您可以使用以下方式找到您的设备单元:

systemctl list-units -t mount

答案2

首先在 中找到您的设备lsusb。记下 ID(例如0a81:0101

/etc/udev/rules.d/在via中创建一个新的 udev 规则文件sudoedit /etc/udev/rules.d/100-mount-videos.rules并在其中包含一条新规则,如下所示:

ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"

请注意我是如何使用来自的 ID 的lsusb

然后你只需要编写脚本来完成工作。一个简单的 mount 命令就可以了。你可能需要一个sleep 5命令来等待文件系统初始化(如果你让 gnome 进行主要安装——但你可以先安装它,然后可能不需要 sleep)。

Allan 补充:长时间运行的脚本可能会阻止“此设备或相关设备的所有后续事件”。我的 Mint 手册页进一步指出“长时间运行的任务需要立即与事件进程本身分离。”没有给出关于从哪里获得此技能的提示。

来自 Oli 的回复:像这样包装它:https://askubuntu.com/a/106359/449

答案3

获取 ATTRS{idVendor} 和 ATTRS{idProduct} 的值的另一种方法是(在 Ubuntu 12.04 中测试):

  1. 找到你的 USB 的安装位置:

    $ mount | grep /dev/sd*
    

    如下所示:

    /dev/sdb on /media/SOMEDIR type vfat ...
    
  2. 使用 udevadm 获取该设备信息:

    udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
    

    输出应该是这样的:

    E: ID_MODEL_ID=001a
    E: ID_VENDOR_ID=002b
    
  3. 现在使用 ATTRS{idProduct} 的模型 ID 和 ATTRS{idVendor} 的供应商 ID

    ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
    

答案4

如果您不想干扰文件管理器(nautilus、konquerer、gnome 等)对设备挂载和卸载的控制,我建议不要使用 udev 路线。

相反,使用udisks-glue如果您的系统使用 udisk(几乎所有系统都使用 udisk)。

安装后,只需~/.udisks-glue.conf在您的主目录中创建一个配置文件,如下所示。

以下示例每次插入 SD 卡时都会更新相机上的 GPS 辅助数据。

filter BT16EXTREME {
  optical = false
  partition_table = false
  usage = filesystem
  label = BT16EXTREME
}
match BT16EXTREME {
  post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}

之后,只需确保 udisks-glue 在您启动或登录时启动即可。例如通过 gnome 的启动应用程序

相关内容