私は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-up
inメソッドを使用します。/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出力を表示します。