ネットワーク接続が有効になって実行された後の非GUIアプリケーションの実行

ネットワーク接続が有効になって実行された後の非GUIアプリケーションの実行

私はDebianベースのRaspbianを使用しています。私のRaspberry Piは自動的にデスクトップに起動します。私はCで書かれ、g ++を使って実行可能ファイルにコンパイルされた小さなプログラムを持っています。このプログラムを実行するにはネットワーク接続が必要で、一部のデータを端末に出力します。素晴らしいことはありません。

それを使用するには、LXterminalウィンドウを開き、sudo権限でプログラムを手動で実行する必要がありました。

sudo ./Desktop/rpiMainProgram

私の質問は:ネットワーク接続を確立した後にターミナルベースのプログラムを自動的に起動するにはどうすればよいですか?


私は使うダイヤル3Gアダプタを自動的に接続するにはパスします/etc/network/interface。接続が有効です。 pingとサーフィンができます。

auto ppp0
iface ppp0 inet wvdial

フォローするこのチュートリアル必要に応じて wvdial を設定します。

方法を参照してくださいbash(?)スクリプトを呼び出すためにpost-upinメソッドを使用します。/etc/network/interfacesただし、この方法では、GUI以外のアプリケーションを実行することはできません。

放棄する前の最後の試みは

auto ppp0
iface ppp0 inet wvdial
post-up LXterminal "sudo ./Desktop/rpiMainProgram"

ベストアンサー1

次の内容をファイルに入れることができます/etc/rc.local(テストされていません)。

{ while ! ping -c 1 -W 1 8.8.8.8; do  sleep 1; done; /home/youruser/Desktop/rpiMainProgram > /home/youruser/Desktop/rpiMainProgram.log 2>&1; }&

ping -c 1 -W 1 8.8.8.8:pingパケットを送信し、1秒間応答を待ちます。

whileコマンドがステータスコード> 0(つまり失敗)で終了している間、pingループは続きます。

ネットワーク接続があり、8.8.8.8正常にpingできる場合は、ループが停止してプログラムが実行されます(これを呼び出すと効果があるかどうかを確認してくださいpwd

これにより、{}これを単一のコマンドタイプに変換して、を使用して全体をバックグラウンドにプッシュできます&。それ以外の/etc/rc.local場合は、ネットワークが発生するまで残りをブロックします。

よりエレガントな解決策があるかもしれませんが、私のPiにも同様の解決策があります。

おすすめ記事