
私は bash スクリプトを書いていて、アプリケーションが実行中かどうかをチェックしています。実行されていない場合は、別のプロセス (子プロセスではない) で起動する必要があります。実行中の場合は、ウィンドウが最大化される必要があります。なんとか作成しましたが、スクリプト プロセスが終了したためか、新しいプロセスは開始後すぐに終了します。& 経由でバックグラウンドで実行しないと、アプリは閉じませんが、スクリプトを 2 回目に実行してアプリを最大化することはできません。
#!/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 アプローチを削除したので、この投稿はより簡単なガイドになります。