Der Versuch, die WIFI-Methode für die automatische Wiederverbindung zu verstehen

9

Ich habe diese Methode zum erneuten Verbinden des WIFI-Dongles aus diesem Beitrag gefunden . Aber ich möchte klarstellen, wie es funktioniert, bevor ich versuche, es zu implementieren.

  1. Gehen Sie zu /etc/ifplugd/action.d/und benennen Sie die ifupdownDatei in um ifupdown.original.
  2. Dann machen Sie : cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown.
  3. Schließlich: sudo reboot
  1. Wann wird /etc/ifplugd/action.d/ifupdowngerufen?
  2. Was macht das Drehbuch im /etc/wpa_supplicant/ifupdown.shWesentlichen für Laien? Es sieht für mich ziemlich komplex aus. und wann heißt es auch.
  3. Könnten die Schritte 1 bis 3 andere unvorhergesehene Probleme verursachen, die verhindern würden, dass mein WIFI funktioniert? Ich versuche dies auf einem Raspberry PI über SSH ohne Tastatur und Monitor an einem schwer erreichbaren Ort zu implementieren.

Ich habe versucht, verschiedene Teile zu googeln, bin aber etwas verloren gegangen!

Reggie
quelle

Antworten:

0

ifplugd soll das Entfernen oder Wiederverbinden eines Ethernet-Anschlusses erkennen. Das zugehörige Verzeichnis /etc/ifplugd/action.d/ hostet Skripte, die aufgerufen werden, wenn beispielsweise der Connector eingesteckt (oder entfernt) wird.

Schritt 2 in Ihrem Prozess würde dazu führen, dass die wpa-Verbindung (neu) ausgehandelt wird, wenn der Connector eingesteckt (oder entfernt) wird, und es wird davon ausgegangen, dass die Verbindung WPA ist. Der von Ihnen beschriebene Umbenennungs- / Kopiervorgang würde alle bereits vorhandenen Verarbeitungen deaktivieren, die im bereits vorhandenen ifupdown-Skript ausgeführt werden und möglicherweise vernachlässigbar sind oder nicht. Sie können die Datei /etc/wpa_supplicant/ifupdown.sh einfach aufrufen, indem Sie diese zum vorhandenen ifupdown-Skript hinzufügen (z. B. am Ende). Dies hängt jedoch davon ab, ob Sie wissen, was bereits im vorhandenen Skript enthalten ist (was häufig einfach ist).

Wenn Sie die WLAN-Verbindung lediglich neu verhandeln möchten, wenn sie unterbrochen wird, anstatt die physische Trennung des Steckverbinders zu behandeln, sollten Sie Folgendes in Betracht ziehen:

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

Dieses Skript ist robust, meistens harmlos und sollte den Trick robust machen.

GregD
quelle
0

Kurzfassung

  1. Schon von Dudek beantwortet; Dieses Verzeichnis wird für Skripte verwendet, die Ihrem System mitteilen, wie mit Dingen umgegangen werden soll, die an das System angeschlossen oder von diesem getrennt werden.

  2. Unter "Langversion" finden Sie Versuche zu erklären, wie ich das betreffende Skript verstanden habe. Grundsätzlich wird nach dem Ausführen einiger Überprüfungen und dem Laden einiger externer Funktionen geprüft, ob entweder die Befehlsfolge startoder stopoder ein Fehler ausgeführt und beendet werden soll.

  3. Oh ja, es könnte Sie sehr gut vom Fernzugriff abhalten, wenn Sie die Netzwerkkonfigurationen auf eine Weise berühren, die das RPi nicht besonders mag. Ich habe meine Netzwerkkonfigurationen in der Vergangenheit auf meinem RPi so grob berührt, dass es einfacher war, mit einer Neuinstallation zu beginnen. Seien Sie vorsichtig und ziehen Sie in Betracht, das RPi-Temperaroly an einen Ort zu verschieben, an dem Sie sich leicht bei local anmelden können.

Lange Version

Wenn ich diese Datei auf meinem RPi durchschaue, scheint sie gut kommentiert zu sein und wird nicht für viele externe Funktionsaufrufe verwendet. Aber Sie haben nach Laienbegriffen gefragt, also werde ich mein Bestes geben, um zu erklären, wie ich diese Art von Skripten verstehe, da es so aussieht, als wären Sie ein RPi-Benutzer wie ich (Headless Remote Server Setup) Möglicherweise möchten Sie überprüfen, was ich bereits auf dem RPi StackExchange für die automatische Wiederherstellung zu versteckten WiFi-Netzwerken beschrieben habe, da es möglicherweise andere Tricks enthält, die für Ihre Serveranforderungen nützlich sind.

Um Ihnen bei der Beantwortung Ihrer Fragen zu helfen, finden Sie hier einige Erläuterungen zur Shell-Skriptsyntax.

In Shell- ~.shSkripten ist es üblich , solche Funktionen zu finden.

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

und dann über function_nameletztere im Skript aufgerufen , manchmal innerhalb anderer Funktionen. Funktionen, Skriptdateien und wenn Anweisungen nur Listen von auszuführenden Befehlen sind. Im Fall von Funktionen der Stoff zwischen {und }wird läuft und im Fall von ifstatments das Zeug zwischen thenund fiausgeführt werden und in instences wo elseoder elifinnerhalb verwendet werden , ifbedingt statments.

Für die Datei sind disecting wir es sind Funktionen genannt do_start, do_stopund einige in anderen Dateien definiert Funktionen ... „Welche Dateien sind diese anderen Funktionen definded?“ oder "Wie finde ich, ob Skript a Funktionen aus Datei b lädt?" sind zwei Fragen, die wir zuerst beantworten müssen.

Um die Linie 48in /etc/wpa_supplicant/ifdown.shgibt es eine Kommentarzeile (dh Linie beguining mit #simble; diese von Skript intrupriter ignoriert werden ... meistens) mit source functionscoventently labbling die nächsten paar Zeilen bestimmt PERPOS ~

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

Beachten Sie, dass dies ein gutes Beispiel für das Skriptverhalten ist. Überprüfen Sie, ob eine Datei vorhanden ist, bevor Sie davon ausgehen, dass dies der Fall ist.

Das erste Bit if [ -fsucht nach einer Datei unter dem definierten Dateipfad. Und wenn vorhanden, thenladen Sie den Inhalt der Datei über source(kurze sourceBefehlshilfe, .aber ich vermeide es, sie in meinen Skripten zu verwenden, da sie durch cpandere Befehle, die ich habe , falsch interpretiert werden kann ) die durch den Pfad definierte Datei. Als nächstes wird elseüberprüft, ob das Skript exit 0mit dem Status beendet wird , wenn diese Datei nicht gefunden wurde 0. Dann ifendet die Einstellung mit fidem Schließen von Aktionen, die ausgeführt werden müssen, wenn die erste Anweisung nicht bestanden wurde. Oder mit anderen Worten, wenn /etc/wpa_supplicant/functions.sh dies nicht tutexsist dann exit, andernfalls laden Sie diese Funktionen und setzen Sie die Verarbeitung fort. Diese Art der Doppelprüfung, ob ein Wert oder eine Datei vorhanden ist, wird im gesamten fraglichen Skript sowie in anderen Skripten wiederholt. Dabei wird -fnach Dateien -ngesucht, die Zeichenfolgenlänge -xüberprüft und nicht nur überprüft, ob eine Datei vorhanden ist, sondern auch Wenn der Benutzer, der das Skript ausführt, über ausführbare Berechtigungen für die definierte Datei verfügt, -s prüft, ob eine Datei leer ist, -nprüft, ob die Zeichenfolge nicht leer oder nullwert ist, und =vergleicht Zeichenfolgen (oder Werte) in ifAnweisungen. Etwas anderes sehen Sie in Shell- und Bash-Skripten unter Linux mit ifStatments, elifaber das ist für einen anderen Tag. In diesem Skript werden zusätzlich zu anderen Tricks verwendetifAnweisungen wie ||"oder", &&"und" und !"nicht" Operatoren wie Online 55~

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

~ Die einfach Staaten setzen, wenn die Datei definiert $WPA_SUP_BINist nicht ausführbar oder die Datei definiert $WPA_CLI_BINist nicht ausführbar beendet das Programm mit Status 0ohne Verarbeitung weiter. Diese können auf den ersten Blick komplex aussehen, aber das Vorlesen in einer menschlicheren Syntax kann beim ersten Lernen #hilfreich sein , für die einfachen, und das Hinzufügen von Kommentaren mit für komplexe ist sehr hilfreich, wenn Sie lernen oder auf das letztere Thema zurückkommen.

Die Datei, die intern bezogen wird, sollte auch überprüft werden, wenn Sie sich nicht sicher sind, wie etwas in der ifupdown.shDatei aufgerufen wird. Ich würde vorschlagen , nano /etc/wpa_supplicant/functions.shund dann mit ^woder Ctrl+wfür die Funktion des Namens suchen um , dass Sie möchten mehr darüber wissen. Denn zwischen jeder Aufgabe, die dieses Skript nennt, und dem Inhalt der functions.shmeisten Puzzel Peces .

Jetzt wird es ein bisschen anders, 135wenn eine caseAnweisung gestartet wird. Diese Art von Anweisungen hat eine bestimmte Struktur, die wir zum Entschlüsseln von Operationen verwenden können.

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

Im obigen Beispiel casedurchsuchen wir wie bei anderen Anweisungen im Wesentlichen den Inhalt $some_variablenach den defienierten Schlüsselwörtern, dh startoder, stopund wenn das Schlüsselwort gefunden wird, geben Sie Befehle zwischen Trailling )und Preseading aus ;;, die dazu dienen, unterschiedliche Aktionen für verschiedene Schlüssel zu trennen Wörter gefunden. Beachten Sie , dass Sie diese caseAnweisungen in einigen Skripten möglicherweise in forSchleifen finden, aber auch für einen anderen Tag.

Im Fall der caseAussagen im ifupdown.shSkript sind passend wir zuerst die startoder stopStatus innerhalb $MODEvariabel und mit $PHASEWert , wenn Übereinstimmen pre-upoder post-upFolge von Befehl sollte aufgerufen werden , oder wenn die pre-downoder post-downFolge von Befehlen sollten stattdessen aufgerufen werden. Wenn weder startnoch stopwo erkannt, wird ein Fehler protokolliert, gedruckt und das Skript mit dem Status 1Fehler beendet.

S0AndS0
quelle