当我的 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
答案2
运行udevadm monitor
并插入 USB 设备。它会告诉你 udev 到底做了什么。