Arch-Linux

由 Udev 規則啟動的應用程序在 4 秒後關閉

  • June 15, 2020

文件/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 會按預期啟動(2 次,因為規則很簡單)。但 4 到 5 秒後,kcalc 再次關閉。我也嘗試過,nohup但沒有成功。其他應用程序(例如konsole和)也是如此kate

當我不在後台執行 kcalc (no &) 時,它不會關閉,但似乎進一步的處理被阻止了。只有在我關閉 kcalc 後,設備通知程序才會通知我。我不喜歡這個解決方案,因為它會影響系統的其他部分。

那麼為什麼應用程序會關閉,我該如何防止呢?

來自udev 手冊頁

udev 不適合啟動守護程序或其他長時間執行的程序;事件處理完成後,分叉的程序,無論是否分離,都將被無條件終止。

因此,最好的方法是使用udev觸發systemd最終啟動腳本的服務,如

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

您必須在其中編寫適當的.service文件。

引用自:https://unix.stackexchange.com/questions/593031