ルート cron 経由で他のユーザーのディスプレイに GUI アプリケーションを起動する

ルート cron 経由で他のユーザーのディスプレイに GUI アプリケーションを起動する

システムの起動時に cron 経由で VPN トンネルの接続を自動化しようとしています。roots
cron によってトリガーされる bash スクリプトがありますsudo crontab -e(他のコマンドには昇格が必要なため)。

piactl (cli) を使用しても問題ありませんが、接続しようとすると、クライアントを起動する必要があるというメッセージが表示されるので...
実行したい手順の 1 つは、非ルート ユーザーのディスプレイで GUI アプリケーション (pia-client) を起動することです。

次のコマンドはターミナルから直接実行できます。

sudo su
runuser -l $username -c 'DISPLAY=:0 /opt/piavpn/bin/pia-client &> /dev/null &'

しかし、それをスクリプトに組み込むと動作しません。
スクリプトは実行可能でありchmod +x /path/to/script.sh、同じスクリプト内の他のコマンドは動作します。

誰か解決策を持っていますか?

答え1

恥ずかしいことに、私はすでに数日前に同じ質問をしていました。気づきもしませんでした...

解決策は、コマンドが cron にないため、コマンドへのフルパスを追加することですPATH
コードを次のように変更しました。

sudo su
/sbin/runuser -l $username -c 'DISPLAY=:0 /opt/piavpn/bin/pia-client &> /dev/null &'

出典/クレジット:この質問に対する@steeldriverのコメント

関連情報