由 Udev 规则启动的应用程序在 4 秒后关闭

由 Udev 规则启动的应用程序在 4 秒后关闭

文件/etc/udev/rules.d/90-test.rules

ACTION=="add", SUBSYSTEM=="usb", ENV{DISPLAY}=":0", ENV{HOME}="/home/user", RUN+="/etc/udev/rules.d/test.sh"

文件/etc/udev/rules.d/test.sh

#!/usr/bin/env bash
/usr/bin/kcalc &

当我插入 USB 设备时,kcalc 按预期启动(两次,因为规则很简单)。但4到5秒后,kcalc再次关闭。我也尝试过nohup但没有成功。对于其他应用程序(如konsole和 )也会发生同样的情况kate

当我不在后台运行 kcalc 时( no &),它不会关闭,但似乎进一步的处理被阻止。仅当我关闭 kcalc 后,设备通知程序才会通知我。我不喜欢这个解决方案,因为它会影响系统的其他部分。

那么为什么应用程序会关闭以及如何防止它发生?

答案1

来自udev 联机帮助页

启动守护进程或其他长时间运行的进程不适合 udev;分叉的进程,无论是否分离,都将在事件处理完成后被无条件终止。

因此,最好的方法是使用udev来触发systemd最终启动脚本的服务,如下所示

RUN{program}="/bin/systemctl start my_service.service"

您必须在其中写入适当的.service文件。

相关内容