当前位置: 首页>>技术教程>>正文


如何在安装特定的flash-drive时运行脚本?

, ,

问题描述

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

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

最佳解决方法

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

通过sudoedit /etc/udev/rules.d/100-mount-videos.rules/etc/udev/rules.d/中创建一个新的udev规则文件,然后像这样在其中新建一条规则:

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

请注意我是如何使用lsusb中的ID的。

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

来自Allan的补充:长时间运行的脚本可能会阻止“此设备或依赖设备的所有其他事件”。 My Mint手册页进一步指出“长时间运行的任务需要立即脱离事件过程本身。”没有给出关于从哪里获得技能的提示。

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

次佳解决方法

现在有更好的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

mount之后,systemd会触发你的触发器脚本。优于udev规则的优点是脚本在挂载后真正触发,而不是在添加系统设备之后触发。

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

资源:Scripting with udev

注意:您可以使用以下命令找到您的设备单元:sudo systemctl list-units -t mount

第三种解决方法

获取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" ...
    

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1828.html,未经允许,请勿转载。