Bash

為什麼我的腳本從 udev 執行時會失敗?

  • September 27, 2020

我正在編寫一個 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 方法,因此該文章將是一個更簡單的指南。

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