`/etc/network/if-up.d`スクリプトが実行されますが、GUIアプリケーション(firefox-esrなど)を起動しません。

`/etc/network/if-up.d`スクリプトが実行されますが、GUIアプリケーション(firefox-esrなど)を起動しません。

firefox-esrネットワークが利用可能になったら起動する必要があります。

これが私が得るものです:

sudo tee "/etc/network/if-up.d/upif" > /dev/null << EOFBOOT
#!/bin/bash
DISPLAY=":0"
if [[ "\$IFACE" = "eth0" || "\$IFACE" = "wlan0" ]]; then
    echo "\$(date) \$IFACE" >> /var/log/upif
    firefox-esr &
fi
EOFBOOT
sudo chmod +x "/etc/network/if-up.d/upif"

ログファイルに日付とインタフェース名が表示されます。これはスクリプトが実行されますがfirefox-esr起動しないことを意味します。

私が試したこと:

  • 次へ追加DISPLAY=":0"
  • grep -inR "firefox" /var/log
  • 実行可能ファイルのフルパスを使用します。/usr/bin/firefox-esr
  • 使用sudo firefox-esr &
  • 末尾の削除&

何も役に立ちません。しかし、IFACE="eth0"Shebangの下に置いてsudo /etc/network/if-up.d/upif手動で実行すると、上記の正確なスクリプトが操作を実行し、Firefoxを起動します。

そこに何が問題なのかよくわかりません。

Debian 9.4 を実行しています2018-06-27-raspbian-stretch-lite

PSはもともとFirefoxを起動する前にすでに実行されていることを確認するための論理チェックがありましたが、Firefoxがまったく起動しないことに気づき、それを削除しました。

修正する同様の質問を見つけました。NetworkManager if-up.dスクリプトからGUIを起動します。

答え1

ネットワークイベントスクリプトはrootとして実行されますが、デスクトップ環境はおそらく(希望的に)そうではありません。

これは全体的に問題のあるアプローチのようです。何かが落ちた:

  • Firefoxは、rootではなくログインしているユーザーとして実行する必要があります。
  • FirefoxがXサーバーに接続するには、Xサーバーに認証できる必要があります(~/.Xauthorityおよび参照man xauth)。
  • HOMEデスクトップセッション(などXDG_RUNTIME_DIR)で正しく機能するには、Firefox環境を設定する必要があります。

ネッ~/.xinitrc​いいですね。

答え2

ありがとう、Fadabi Nawiに行ったことがありますか?、答えは次のとおりです。

su pi -c "DISPLAY=:0.0 /usr/bin/firefox-esr &"

コア:

関連情報