Essayer de comprendre la méthode WIFI de reconnexion automatique

9

J'ai trouvé cette méthode pour reconnecter le dongle WIFI de ce post . Mais, je veux être clair sur la façon dont cela fonctionne, avant d'essayer de l'implémenter.

  1. Accédez à /etc/ifplugd/action.d/et renommez le ifupdownfichier en ifupdown.original.
  2. Ensuite , faites: cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown.
  3. Finalement: sudo reboot
  1. Quand est /etc/ifplugd/action.d/ifupdownappelé?
  2. Que fait /etc/wpa_supplicant/ifupdown.shessentiellement le script en termes simples, il me semble assez complexe; et quand est-il appelé aussi.
  3. Est-ce que les étapes 1 à 3 pourraient causer d'autres problèmes imprévus qui empêcheraient mon WIFI de fonctionner? J'essaie de l'implémenter sur un Raspberry PI, via SSH, sans clavier et moniteur dans un endroit difficile à atteindre.

J'ai essayé de Google différents morceaux, mais je me suis un peu perdu!

reggie
la source

Réponses:

0

ifplugd est destiné à détecter la suppression ou la reconnexion d'un connecteur Ethernet. Le répertoire associé /etc/ifplugd/action.d/ héberge des scripts qui sont appelés lorsque, par exemple, le connecteur est branché (ou supprimé).

L'étape 2 de votre processus entraînerait la (re) négociation de la connexion wpa lorsque le connecteur est inséré (ou retiré), et elle suppose que la connexion est WPA. Le processus de renommage / copie que vous décrivez désactiverait tout traitement préexistant effectué dans le script ifupdown préexistant, qui pourrait être négligeable ou non. Vous pourriez envisager d'appeler simplement /etc/wpa_supplicant/ifupdown.sh en l'ajoutant au script ifupdown existant (à la fin, par exemple), mais cela dépend de comprendre ce qui est déjà dans le script existant (ce qui est souvent simple).

Si vous souhaitez simplement renégocier la connexion wifi si ou quand elle tombe, au lieu de gérer la déconnexion physique du connecteur, vous pouvez envisager d'utiliser ceci:

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

Ce script est robuste, pour la plupart inoffensif, et devrait faire l'affaire avec robustesse.

GregD
la source
0

Version courte

  1. Déjà répondu par dudek; ce répertoire est utilisé pour les scripts qui indiquent à votre système comment gérer les choses qui y sont connectées ou déconnectées.

  2. Voir "Version longue" pour des tentatives d'expliquer comment j'en suis venu à comprendre le script en question. Fondamentalement, après avoir exécuté quelques vérifications et chargé certaines fonctions externes, il vérifie s'il doit exécuter la startséquence de commandes, ou stop, ou une erreur et quitter.

  3. Oh oui, cela pourrait très bien vous empêcher d'accéder à distance si vous touchez les configurations réseau d'une manière que le RPi n'aime pas beaucoup. J'ai tellement touché mes configurations réseau dans le passé sur mon RPi qu'il a été plus simple de commencer à partir d'une nouvelle installation. Soyez prudent et envisagez de déplacer la tempérarité RPi vers un emplacement où il est facile de se connecter localement.

Version longue

En parcourant ce fichier sur mon RPi, il semble bien commenté et il ne sert pas à de nombreux appels de fonctions externes. Mais vous avez demandé des termes simples donc je ferai de mon mieux pour expliquer comment je vais comprendre ces types de scripts, car il semble que vous soyez un utilisateur RPi comme moi (configuration du serveur distant sans tête) pourrait vérifier ce que j'ai déjà écrit sur le RPi StackExchange pour la reconnexion automatique aux réseaux WiFi cachés car il peut avoir d'autres astuces utiles pour les besoins de votre serveur.

Pour vous aider à répondre à vos questions, voici un peu d'explication de la syntaxe des scripts shell;

Dans les ~.shscripts shell , il est courant de trouver des fonctions définies comme telles;

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

puis appelé via function_namece dernier dans le script, parfois dans d'autres fonctions. Les fonctions, les fichiers de script et si les instructions ne sont que des listes de commandes à exécuter. Dans le cas des fonctions, les éléments entre {et }sont exécutés et dans le cas des ifinstructions, les éléments entre thenet fisont exécutés et dans les cas où elseou elifsont utilisés dans les ifinstructions de manière conditionnelle.

Pour le fichier nous disecting il y a des fonctions nommées do_start, do_stopet certaines fonctions définies dans d' autres fichiers ... « Quels sont les fichiers de ces autres fonctions definded? » ou "Comment savoir si le script a charge des fonctions à partir du fichier b?" sont deux questions auxquelles nous devrons répondre en premier.

Autour de la ligne 48dans /etc/wpa_supplicant/ifdown.shil y a une ligne commentée (c. -à- ligne beguining avec #simble, ceux - ci sont ignorés par intrupriter script ... la plupart du temps) avec source functionslabbling coventently les quelques lignes destinées PERPOS ~

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

Notez que c'est un bon exemple de comportement de script; vérifier si un fichier est là avant de supposer qu'il l'est.

Le premier bit if [ -frecherche un fichier sous le chemin de fichier défini. Et s'il est présent, thenchargez le contenu du fichier via source(raccourci de la sourcecommande, .mais j'évite de l'utiliser dans mes scripts car il peut être mal interprété par cpet d'autres commandes, mais j'ai une digression), le fichier défini par le chemin. Ensuite, elsevérifiez que si ce fichier n'a pas été trouvé, exit 0quittez avec le statut 0le script. Ensuite, le ifstetment se termine par la fifermeture des actions à entreprendre si le premier statment ne passe pas. Ou en d'autres termes si /etc/wpa_supplicant/functions.sh ne fonctionne pasexsist puis quitte, sinon chargez ces fonctions et continuez le traitement. Ce type de duplication vérifiant si une valeur ou un fichier est présent est quelque chose que vous verrez répété tout au long du script en question ainsi que d'autres scripts, les -fvérifications des fichiers, -nvérifie la longueur des chaînes, -xvérifient non seulement si un fichier est là mais aussi si l'utilisateur exécutant le script dispose d'autorisations exécutables pour le fichier défini, -s vérifie si un fichier est vide, -nvérifie si la chaîne n'est pas vide ou nullvaleur et =compare les chaînes (ou valeurs) dans les ifinstructions. Quelque chose d'autre que vous verrez dans les scripts shell et bash sous Linux avec des ifstatments elifmais c'est pour un autre jour. Dans ce script sont d'autres astuces utilisées en plus deifdes instructions telles que ||"ou", &&"et" et !"non", comme en ligne 55~

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

~ qui met simplement des états, si le fichier défini par $WPA_SUP_BINn'est pas exécutable ou le fichier défini par $WPA_CLI_BINn'est pas exécutable, quittez avec le statut 0sans traitement supplémentaire. Ceux-ci peuvent sembler complexes au premier abord, mais les lire à haute voix dans une syntaxe plus humaine peut aider lors du premier apprentissage, pour les plus simples, et l'ajout de commentaires avec #pour les plus complexes est vraiment utile lors de l'apprentissage ou du retour au sujet.

Le fichier provenant de l'intérieur doit également être inspecté s'il n'est pas certain de ce que quelque chose appelle dans le ifupdown.shfichier. Je suggère nano /etc/wpa_supplicant/functions.shpuis j'utilise ^wou Ctrl+wpour rechercher le nom de la fonction que vous souhaitez en savoir plus. Parce qu'entre ce que jamais la tâche appelle ce script et le contenu de la functions.shplupart des morceaux de puzzel seront trouvés.

Maintenant, les choses deviennent looing un peu différent 'ligne ronde 135où un casestatment est commencé, ces types de statments ont une structure sertain que nous pouvons utiliser pour aider à décoder les opearations.

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

Dans l'exemple ci-dessus, comme pour les autres caseénoncés, nous recherchons essentiellement le contenu des $some_variablemots clés définis, c'est-à-dire startou stopet si le mot clé est trouvé, puis émettez des commandes trouvées entre la fin )et la pré ;;- lecture qui agissent pour séparer les différentes actions à entreprendre pour différentes clés mots trouvés. Notez que dans certains scripts, vous pouvez trouver ces caseinstructions dans des forboucles, mais cela l'est également pour un autre jour.

Dans le cas des casedéclarations dans le ifupdown.shscript que nous sommes d' abord le correspondant startou le stopstatut au sein $MODEvariable et en utilisant la $PHASEvaleur pour correspondre si pre-upou post-upséquence de commande doit être appelée ou si la pre-downou post-downséquence de commandes doit être appelée à la place. Si niether startni stopoù détecté, une erreur est enregistrée, imprimée et le script est quitté avec le statut 1une erreur.

S0AndS0
la source