我编写了一个自定义 udev 规则,用于查找要插入的特定 USB 设备,然后运行一些 gphoto 命令。如下所示:
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="32a1", RUN+="/usr/bin/gphoto2 --set-config /main/settings/capturetarget=1 && /usr/bin/gphoto2 --capture-image --interval 5"
本质上,这应该允许我连接的相机将存储方式设置为相机的 SD 卡,然后每 5 秒拍摄一次照片,拍摄次数不限(或直到我拔下相机电源)。但是,该应用程序似乎正在运行其自身的多个实例(但可能是其他原因)。拍摄几张照片(5 - 15 张)后,相机停止拍摄。
但是,当我以本地用户身份(即树莓派上的用户:pi)运行这些精确的命令时,相机可以按我预期的方式运行。
非常感谢任何帮助,因为我对 udev 规则还很陌生,并且不明白为什么它不起作用。
答案1
您的配方存在一个问题,即使用 shell 语法,即结构 command1 && command2。但 udev 不会将命令传递给 shell,因此作业控制和 IO 重定向等 shell 构造不可用。
你可以使用类似
RUN+="sh -c '此处有一些命令但不能使用双引号'"
无论如何,我之所以想到这个问题,是因为我也遇到了这样的问题:当我切换 KVM 时,我的键盘的 udev 规则会触发大约 6 次。