Tratando de entender el método de reconexión automática WIFI

9

Encontré este método para volver a conectar el dongle WIFI de esta publicación . Pero, quiero tener claro cómo funciona, antes de intentar implementarlo.

  1. Vaya /etc/ifplugd/action.d/y cambie el nombre del ifupdownarchivo a ifupdown.original.
  2. A continuación, hacer: cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown.
  3. Finalmente: sudo reboot
  1. Cuando se /etc/ifplugd/action.d/ifupdownllama
  2. ¿Qué hace el guión /etc/wpa_supplicant/ifupdown.shesencialmente en términos simples? Me parece bastante complejo; y cuando se llama también.
  3. ¿Podrían los pasos 1 a 3 causar otros problemas imprevistos que impedirían que mi WIFI funcione? Estoy tratando de implementar esto en un Raspberry PI, a través de SSH, sin un teclado y monitor en una ubicación de difícil acceso.

Traté de buscar en Google varios bits, ¡pero me perdí un poco!

reggie
fuente

Respuestas:

0

ifplugd está destinado a detectar la eliminación o reconexión de un conector ethernet. El directorio asociado /etc/ifplugd/action.d/ aloja scripts que se llaman cuando, por ejemplo, el conector está enchufado (o eliminado).

El paso 2 de su proceso provocará que la conexión wpa se (re) negocie cuando se inserte (o retire) el conector, y se supone que la conexión es WPA. El proceso de cambio de nombre / copia que describa deshabilitaría cualquier procesamiento preexistente realizado en el script ifupdown preexistente, que podría ser insignificante o no. Puede considerar simplemente llamar al /etc/wpa_supplicant/ifupdown.sh agregando eso al script ifupdown existente (al final, por ejemplo), pero depende de comprender lo que ya está en el script existente (que a menudo es simple).

Si simplemente desea renegociar la conexión wifi si o cuando se cae, en lugar de manejar la desconexión física del conector, puede considerar usar esto:

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

Esa secuencia de comandos es robusta, en su mayoría inofensiva, y debería funcionar bien.

GregD
fuente
0

Version corta

  1. Respondido por dudek ya; ese directorio se usa para scripts que le dicen a su sistema cómo manejar las cosas que se conectan o desconectan de él.

  2. Consulte "Versión larga" para ver los intentos de explicar cómo he llegado a comprender el guión en cuestión. Básicamente, después de ejecutar algunas comprobaciones y cargar algunas funciones externas, comprueba si debe ejecutarse la startsecuencia de comandos, o si se produce un stoperror al salir y salir.

  3. Ah, sí, podría bloquear el acceso remoto si toca las configuraciones de red de una manera que no le gusta mucho al RPi. He tocado mis configuraciones de red de manera tan ruda en el pasado en mi RPi que ha sido más fácil comenzar desde una nueva instalación. Sea cauteloso y considere mover la temperatura de RPi a una ubicación que sea fácil de iniciar sesión.

Versión larga

Mirando a través de este archivo en mi RPi parece bien comentado y no se usa para muchas llamadas de funciones externas. Pero ha pedido términos simples, así que haré todo lo posible para explicarle cómo llegar a comprender este tipo de scripts, ya que parece que es un usuario de RPi como yo (configuración de servidor remoto sin cabeza). podría comprobar lo que ya he escrito en el RPi StackExchange para la reconexión automática a redes WiFi ocultas, ya que puede tener otros trucos útiles para los requisitos de su servidor.

Para ayudar a responder sus preguntas aquí hay un poco de expansión de sintaxis de scripts de shell;

En los ~.shscripts de shell es común encontrar funciones definidas así;

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

y luego llamado a través de function_nameeste último en el script, a veces dentro de otras funciones. Funciones, archivos de script y si las declaraciones son solo listas de comandos para ejecutar. En el caso de las funciones, las cosas entre {y }se ejecutan y, en el caso de las ifdeclaraciones, las cosas entre theny fise ejecutan y en las inserciones donde elseo elifse usan dentro de las ifdeclaraciones condicionalmente.

Para el archivo que estamos diseñando hay funciones nombradas do_start, do_stopy algunas funciones definidas en otros archivos ... "¿Qué archivos están definidos estas otras funciones?" o "¿Cómo puedo encontrar si el script a carga funciones del archivo b?" son dos preguntas que primero tendremos que responder.

Alrededor de la línea 48en la /etc/wpa_supplicant/ifdown.shque hay una línea comentada (es decir beguining línea con #simble; éstos son ignorados por intrupriter guión ... sobre todo) con source functionslabbling coventently las próximas líneas destinados PERPOS ~

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

Tenga en cuenta que este es un buen ejemplo de comportamiento de secuencias de comandos; comprobando si hay un archivo antes de asumir que lo está.

El primer bit if [ -fes buscar un archivo bajo la ruta de archivo definida. Y si está presente thenel contenido de carga del archivo a través de source(la abreviatura del sourcecomando es .pero evito usarlo en mis scripts porque puede ser mal interpretado por cpy otros comandos, pero digress que tengo) el archivo definido por la ruta. A continuación, se elseverifica que si ese archivo no se encuentra, exit 0salga con el estado 0del script. Luego, el ifstetment termina con fiacciones cerradas para tomar si la primera declaración no fue aprobada. O en otras palabras, si /etc/wpa_supplicant/functions.sh no funcionaexsist luego salga, de lo contrario cargue esas funciones y continúe procesando. Este tipo de comprobación doble si un valor o archivo está presente es algo que verá repetido a lo largo del script en cuestión, así como otros scripts, -fverifica los archivos, -nverifica la longitud de la cadena, -xverifica no solo si hay un archivo sino también si el usuario que ejecuta el script tiene permisos ejecutables para el archivo definido, -s verifica si un archivo está vacío, -nverifica si la cadena no está vacía o no tiene nullvalor, y =compara las cadenas (o valores) en las ifdeclaraciones. Algo más que verá en los scripts de shell y bash en Linux con ifdeclaraciones, elifpero eso será para otro día. Dentro de este script hay otros trucos utilizados además deifdeclaraciones como operadores ||"o", &&"y", y !"no", como en línea 55~

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

~ que simplemente dice estados, si el archivo definido por no$WPA_SUP_BIN es ejecutable o el archivo definido por no es ejecutable, salga con el estado sin procesar más. Estos pueden parecer complejos al principio, pero leerlos en voz alta en una sintaxis más humana puede ayudar cuando se aprende por primera vez, para los simples, y agregar comentarios con los complejos es realmente útil al aprender o volver al tema más adelante.$WPA_CLI_BIN0#

El archivo que se obtiene internamente también debe inspeccionarse si no está seguro de lo que se llama dentro del ifupdown.sharchivo. Sugeriría nano /etc/wpa_supplicant/functions.shy luego usar ^wo Ctrl+wpara buscar el nombre de la función sobre la que desea saber más. Porque entre cualquier tarea que se llame este guión y se encontrará el contenido de la functions.shmayoría de los puzzel peces.

Ahora las cosas se vuelven un poco diferentes en la línea redonda 135donde casese inicia una declaración, este tipo de declaraciones tienen una estructura segura que podemos usar para ayudar a decodificar las operaciones.

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

En el ejemplo anterior, al igual que con otras casedeclaraciones, estamos buscando esencialmente el contenido de $some_variablelas palabras clave desafiadas, es decir, starto, stopy si se encuentra la palabra clave, emita comandos encontrados entre el seguimiento )y la preselección ;;que actúan para separar las diferentes acciones que se deben tomar para varias claves. palabras encontradas Tenga en cuenta que en algunos scripts puede encontrar estas casedeclaraciones dentro de los forbucles, pero eso también es para otro día.

En el caso de las casedeclaraciones dentro de ifupdown.shla escritura estamos igualando el primero starto el stopestatus dentro de $MODEla variable y el uso de $PHASEvalor para que coincida si pre-upo post-upsecuencia de comandos debe ser llamado o si el pre-downo la post-downsecuencia de comandos se debe llamar en su lugar. Si no se detecta startni stopdónde, se registra un error, se imprime y se sale del script con el estado 1un error.

S0AndS0
fuente