udevで実行するとスクリプトが失敗するのはなぜですか?

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"

ベストアンサー1

最後にここで解決策を見つけました。次を含む2番目のスクリプトが必要です。

#!/bin/bash
echo /pathto/runApp | at now

このスクリプトはudevルールで呼び出す必要があります。この機能を機能させるには、インストールする必要があり、呼び出してat有効にする必要がatdありますsudo systemctl enable atd --now。少しハッキーですが、少なくとも動作します。

この投稿がより簡単なガイドになるように、systemdメソッドを削除しました。

おすすめ記事