连接 USB 时 Shell 脚本未运行

连接 USB 时 Shell 脚本未运行

当我的 iPhone 连接到 Raspberry Pi 并运行 Raspbian 时,我尝试运行 shell 脚本

这是我到目前为止所拥有的:在/etc/udev/rules.d/test.rules:

ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1227", RUN+="/home/pi/testscript.sh"

我如何检查该脚本是否确实正在运行,因为我认为它没有运行,这是正确的语法吗?

答案1

您的脚本必须是可执行的。

逐步执行此操作以找出您的问题:

首先创建一个简单的脚本:

sudo nano /bin/device_added.sh

device_added.sh在脚本中添加以下行

#!/bin/bash echo "USB device added at $(date)" >>/tmp/scripts.log

打开第二个脚本。

sudo nano /bin/device_removed.sh

然后将以下行添加到device_removed.sh脚本中。

#!/bin/bash echo "USB device removed at $(date)" >>/tmp/scripts.log

保存文件,关闭并使两个脚本可执行。

$ sudo chmod +x /bin/device_added.sh $ sudo chmod +x /bin/device_removed.sh

接下来,我们创建一个规则来触发上述脚本的执行,名为/etc/udev/rules.d/80-test.rules

nano /etc/udev/rules.d/80-test.rules

在其中添加以下两条规则。

SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_added.sh" SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_removed.sh"

保存文件并关闭它。然后以 root 身份,通过运行告诉 systemd-udevd 重新加载规则文件(这也会重新加载其他数据库,例如内核模块索引)。

sudo udevadm control --reload

现在将您的 iPhone 或任何其他 USB 驱动器连接到您的计算机并检查device_added.sh脚本是否已执行。首先,该文件scripts.log应创建在/tmp.

然后该文件应该有一个条目,例如“USB 设备在 date_time 被删除”

如果此步骤正确,您可以/bin/device_added.sh用您的脚本替换该脚本。并将您的规则放入/etc/udev/rules.d/80-test.rules

udev 用于 Linux 中的设备检测管理

答案2

运行udevadm monitor并插入 USB 设备。它会告诉你 udev 到底做了什么。

相关内容