文件/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
来触发systemd
最终启动脚本的服务,如下所示
RUN{program}="/bin/systemctl start my_service.service"
您必须在其中写入适当的.service
文件。