自動再接続WIFIメソッドを理解しようとしています


9

私はこの投稿からWIFIドングルを再接続するこの方法を見つけました。しかし、私はそれを試して実装する前に、それがどのように機能するかを明確にしたいと思います。

  1. に移動し/etc/ifplugd/action.d/ifupdownファイルの名前をに変更します ifupdown.original
  2. 次に行いますcp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
  3. 最終的に: sudo reboot
  1. いつ/etc/ifplugd/action.d/ifupdown呼び出されますか?
  2. スクリプトは/etc/wpa_supplicant/ifupdown.sh基本的に平易な言葉で何をするのか、それは私にはかなり複雑に見えます。いつ呼ばれるのか
  3. 手順1〜3を実行すると、私のWIFIが機能しなくなる他の予期しない問題が発生する可能性がありますか?私はこれをSSH経由でRaspberry PIに実装しようとしていますが、キーボードやモニターを手の届きにくい場所に置く必要はありません。

いろいろググってみましたが少し迷ってしまいました!

回答:


0

ifplugdは、イーサネットコネクタの削除または再接続を検出するためのものです。関連するディレクトリ/etc/ifplugd/action.d/は、たとえばコネクタがプラグイン(または削除)されたときに呼び出されるスクリプトをホストします。

プロセスのステップ2では、コネクタが挿入(または削除)されたときにwpa接続が(再)ネゴシエートされ、接続はWPAであると想定されます。説明する名前変更/コピープロセスは、既存のifupdownスクリプトで行われた既存の処理を無効にします。/etc/wpa_supplicant/ifupdown.shを既存のifupdownスクリプトに追加して(たとえば、最後に)呼び出すことを検討することもできますが、既存のスクリプトの内容を理解しているかどうかに依存します(多くの場合単純です)。

コネクタの物理的な切断を処理する代わりに、接続が切断された場合、または切断されたときにwifi接続を再ネゴシエートするだけの場合は、次の使用を検討してください。

https://raw.githubusercontent.com/dweeber/WiFi_Check/master/WiFi_Check

そのスクリプトは堅牢で、ほとんど無害で、トリックを堅牢に実行する必要があります。


0

短縮版

  1. dudekはすでに回答しています。このディレクトリは、システムにプラグインまたはプラグインから外される処理方法をシステムに指示するスクリプトに使用されます。

  2. 問題のスクリプトを理解する方法を説明する試みについては、「ロングバージョン」を参照してください。基本的に、いくつかのチェックを実行し、いくつかの外部関数をロードした後start、コマンドのシーケンス、またはを実行する必要があるかどうかstop、またはエラーを出して終了するかどうかをチェックします。

  3. そうそう、RPiがあまり好きではない方法でネットワーク構成に触れた場合、リモートアクセスからロックアウトされる可能性が非常に高い。私は自分のRPiで大まかに過去にネットワーキング構成に触れたので、新規インストールから開始する方が簡単でした。慎重に、ローカルにログインしやすい場所にRPiを一時的に移動することを検討してください。

ロングバージョン

私のRPiでこのファイルを見ると、よくコメントされているようで、多くの外部関数呼び出しには使用されません。しかし、あなたは平易な用語を求めてきたので、私はこれらの種類のスクリプトを理解するためにどうやって行くのかを説明するために最善を尽くしますが、あなたは私のようなRPiユーザー(ヘッドレスリモートサーバーのセットアップ)のようですサーバーの要件に役立つ他のトリックがあるので、非表示のWiFiネットワークへの自動再接続のために、RPi StackExchangeですでに書き込んだ内容を確認する必要があるかもしれません。

質問への回答に役立つように、ここにシェルスクリプト構文の解説を少し示します。

シェル~.shスクリプトでは、そのように定義された関数を見つけるのが一般的です。

function_name () {
    echo "doing stuff for function_name"
}

その後function_name、スクリプトの後者を介して、時には他の関数内で呼び出されます。関数、スクリプトファイル、およびステートメントが実行するコマンドのリストにすぎない場合。間もの関数の場合{とは、}実行された場合のif間のスタッフたstatments thenとがfi実行され、instencesにelse又はelif内で使用されるif条件付きたstatments。

分析しているファイルにはdo_start、という名前の関数と、do_stop他のファイルで定義されている関数があります...「これらの他の関数はどのファイルと定義されていますか?」または「スクリプトaがファイルbから関数をロードするかどうかを確認するにはどうすればよいですか?」最初に回答する必要がある2つの質問です。

線を中心48/etc/wpa_supplicant/ifdown.shコメント行(すなわち行がでbeguiningあります#simble;これらは、スクリプトintrupriterによって無視されます...ほとんど)とsource functionscoventently次の数行をlabblingは〜perposを意図

# source functions
if [ -f /etc/wpa_supplicant/functions.sh ]; then
    . /etc/wpa_supplicant/functions.sh
else
    exit
fi

これはスクリプトの動作の良い例であることに注意してください。ファイルがあると仮定する前に、ファイルがあるかどうかを確認します。

最初のビットif [ -fは、定義されたファイルパスの下のファイルをチェックすることです。そしてthen、ファイルの現在のロード内容がパスで定義されたファイルを介してsourcesourceコマンドの.省略形はスクリプトで使用されないようにしcpます。他のコマンドによって誤解される可能性があるため、私はそれを避けます)。次は、elseそのファイルが見つからなかった場合にスクリプトのexit 0ステータスで終了するかどうかのチェックです0。その後、if最初のステートメントがfi合格しなかった場合に実行するアクションを閉じるために、命令は終了します。言い換えれば/etc/wpa_supplicant/functions.shがない場合はありませんexsistは終了し、そうでない場合はそれらの関数をロードして処理を続行します。値またはファイルが存在するかどうかのこの種の二重チェックは、問題のスクリプトおよび他のスクリプト全体で繰り返されるものです。-fファイルの-nチェック、文字列の長さの-xチェック、ファイルが存在するかどうかだけでなく、スクリプトを実行するユーザーが定義されたファイルに対する実行権限を持っている-s 場合、ファイルが空か-nどうかを確認し、文字列が空またはnull値でないかどうかを確認=し、if文の文字列(または値)を比較します。Linuxのシェルおよびbashスクリプトにifステートメントelifが表示される他の何かが、別の日です。このスクリプト内には、他に使用されるトリックがあります。if||"or"、&&"and"、および!"not"演算子などのステートメント(オンライン55〜など)

# quit if executables are not installed
if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
    exit 0
fi

〜これは簡単に言えば状態によって定義されたファイルがあれば$WPA_SUP_BINあるない実行可能ファイルまたはで定義されたファイルが$WPA_CLI_BINあるない状態で実行して終了し0、さらに処理せずに。これらは最初は複雑に見えますが、より人間の構文で読み上げると、最初の学習時、単純な構文の場合に役立ち#、複雑なものにコメントを追加すると、学習したり、主題に戻ったりするときに非常に役立ちます。

内部で提供されているファイルも、ifupdown.shファイル内で何が呼び出されているか不明な場合は検査する必要があります。詳細を知りたい関数の名前を、またはをnano /etc/wpa_supplicant/functions.sh使用して検索することをお勧めします。なぜなら、これまでにタスクがこのスクリプトを呼び出すものと、ほとんどのパズルピースの内容が見つかるからです。^wCtrl+wfunctions.sh

今度は、ステートメントが開始される135ところとは少し異なる「ラウンドライン」を略奪するようになりましたcase。これらの種類のステートメントは、操作のデコードを支援するために使用できる一定の構造を持っています。

case $some_variable in
    start)
         echo "The word [start] was detected in \$some_variable"
    ;;
    stop)
         echo "The word [stop] was detected in \$some_variable"
    ;;
    *)
         echo "The word [$some_variable] was detected in \$some_variable but not understood"
    ;;
esac

上記の例では、他のと同じようにcaseたstatments我々は、本質的に内容を検索している$some_variableキーワードは、defiened IE用startまたはstop、キーワードが発見された場合、問題のコマンドはtraillingとの間に見られる)とpreseading ;;それは、様々なキーのために取るべきdifferantアクションをsepperateするように作用します単語が見つかりました。一部のスクリプトでは、ループcase内にこれらのステートメントが見つかるかもしれませんforが、それもまた別の日です。

スクリプトcase内のステートメントの場合、ifupdown.sh最初に変数内のstartor stopステータスを照合し、値を$MODE使用して、コマンドのシーケンスまたはコマンドのシーケンスを呼び出す、またはコマンドのシーケンスまたはシーケンスを代わりに呼び出すかをマッチングします。niether も検出された場所もない場合、エラーがログに記録されて出力され、スクリプトはエラー状態で終了します。$PHASEpre-uppost-uppre-downpost-downstartstop1

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.