Bash
為什麼我的腳本從 udev 執行時會失敗?
我正在編寫一個 bash 腳本並檢查應用程序是否正在執行。如果它沒有執行,它應該在一個單獨的程序(而不是子程序)中啟動。如果它正在執行,則應將視窗最大化。我做到了,但是新程序在啟動後不久就終止了,可能是因為腳本程序結束了。當我不通過 & 在後台執行它時,應用程序不會關閉,但是我無法再次執行腳本來最大化應用程序。
#!/bin/bash if pgrep app then echo app is running # Maximize the app wmctrl -x -r WMClassOfapp -b "add,maximized_vert,maximized_horz" else echo app is not running /usr/bin/app fi
當我在終端中執行它時,它工作正常。當我從 udev 規則呼叫它時,應用程序終止。使用 nohup 產生相同的結果。這是udev規則
ACTION=="add" \ , KERNEL=="hci0:3585" \ , SUBSYSTEM=="bluetooth" \ , ENV{DISPLAY}=":0" \ , ENV{HOME}="/home/user" , RUN+="/home/user/runapp"
我終於在這裡找到了解決方法。您需要第二個腳本,其中包含
#!/bin/bash echo /pathto/runApp | at now
必須從 udev 規則呼叫此腳本。必須安裝它才能工作
at
,並且您必須atd
通過呼叫啟用sudo systemctl enable atd --now
。這有點hacky,但至少它有效。我刪除了 systemd 方法,因此該文章將是一個更簡單的指南。