检测插入的 USB 驱动程序并运行其中的某个文件

检测插入的 USB 驱动程序并运行其中的某个文件

我有某种基于 Ubuntu Server 14.0.2 设置的 Ubuntu 信息亭,它在 chrome 上运行一个应用程序。信息亭没有互联网连接,因此应用程序的更新应该手动完成。我希望更新过程尽可能简单,所以我想向最终用户展示的是只需将 USB 驱动器插入 PC 即可自动检测 USB 驱动器并尝试运行某个文件的功能。例如,我插入一个 USB 驱动器,Ubuntu Server 会尝试查找文件update-2.3.sh并执行它。该update-2.3.sh文件只是一个将运行一些命令并将文件从 USB 交换到硬盘驱动器从而产生新代码的文件。我猜这应该以管理员权限运行,或者也许只需将代码目录设置为就777足够了?

USB 驱动器中的文件示例:

├───update-2.3.sh
├───/updates
|   └───file1.php
|   └───file2.php
    └───/sub
        └───another.php

现在该update-2.3.sh文件将运行某些命令,例如mv覆盖现有文件(有一个文件夹“〜/ code / app / updates”)和一些以管理员身份运行的命令:

sudo stop kiosk
(sudo?) mv updates ~/code/app/
sudo start kiosk

* 还没有测试过这个mv命令,希望它能起作用

做这样的事可能吗?

答案1

@drifter104 是正确的,您可以使用 udev 规则实现这一点。我有一个类似的设置,我想插入一个加密的拇指驱动器,并让它自动运行备份脚本来备份我工作电脑上的某些重要文件。

我将给你一个例子,说明我是如何使我的系统正常工作的。

根据 udev README,/etc/udev/rules.d/README :

如果此目录中文件的顺序对您来说并不重要,建议您简单地将文件命名为“descriptive-name.rules”,以便它们在此目录和 /lib/udev/rules.d 中的所有编号规则之后进行处理,从而覆盖在那里设置的任何内容。

因此,我将规则文件命名为:

/etc/udev/rules.d/encrypted-backup.rules

其他指南会设置规则来获取 U 盘的型号和/或序列号,但我不能使用它。我不希望我的备份脚本在加密卷安装和解密之前运行。因此,我从 /sys/block/dm-3(加密卷)而不是硬件设备本身(/sys/block/sdb)执行此操作。输入密码解密驱动器后,让备份脚本执行操作。我想你会想从硬件设备本身触发。

因此,创建触发“dm-3”成功解密和添加的 udev 规则。在上述规则文件中,我将编写以下几行:

KERNEL=="dm-3", ACTION=="add", SUBSYSTEM=="block", RUN+="/usr/local/bin/backup.sh"

特别提示:如果您不添加ACTION=="add",那么它将在安装和卸载驱动器时运行您的脚本。:)

现在,对于您的更新,您只需让它运行您的更新脚本即可。

我希望这些信息对你有帮助!

相关内容