ネットワーク接続が有効になって実行された後の非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にも同様の解決策があります。

答え2

ターミナルマルチプレクサでプログラムを起動します。画面またはマルチプレクサ。これを使用して、プログラムを実行して対話するときに接続できる別の端末を作成します。たとえば、画面の場合は、起動時に次のコマンドを実行します。

screen -S rpiMainProgram -d -m /home/nixda/Desktop/rpiMainProgram

そして、それを使用してプログラムが実行されている画面インスタンスに接続します。

screen -S rpiMainProgram -r -d

画面インスタンスから切り離すには、Ctrl+を押してからAを押しますd

Debian では、ネットワークインタフェースを有効にしてプログラムを実行するには、スクリプトの追加/etc/network/if-up.d。どのインターフェイスが動作しているかを確認する必要があります(特にループバックインターフェイスが動作しているときにプログラムを起動したくありません)。/etc/network/if-up.d/local_rpiMainProgram同様のコンテンツでコンテンツを作成する

#!/bin/sh
case "$IFACE" in
  ppp0) screen -S rpiMainProgram -d -m /home/nixda/Desktop/rpiMainProgram
esac

または

#!/bin/sh
if ping -q -W1 -c1 8.8.8.8; then
  screen -S rpiMainProgram -d -m /home/nixda/Desktop/rpiMainProgram
fi

答え3

rungettyを使用して未使用の仮想端末でこれを実行すると、正常に動作します。コントロールAlt FN出力を表示します。

関連情報