Lanzar un script cuando se conecta a Wifi

Hola!
zyrus
White ninja
White ninja
Posts: 11
Joined: 11 Jun 2024, 17:51
Distribution: porteus

Lanzar un script cuando se conecta a Wifi

Post#1 by zyrus » 11 Jun 2024, 18:16

Hola gente
Me gustaria ejecutar un script cuando via wifi se detecte una conexión a internet establecida. Por lo que veo Porteus usa NetworkManager, y según he leido por ahí, este software tiene unos directorios en /etc/NetworkManager donde situar los scripts, en concreto uno llamado dispatcher.d , pero situo ahí un script de prueba para que me escriba, (de los parametros que NetworkManager pasa a los scripts allí situados), el evento generado, pero no hace nada. Si lo ejecuto yo manualmente con dos parametros todo va bien, pero nunca se lanza ese script, que se supone que NetworkManager lanza automaticamente cada vez que hay un evento relacionado con la conexion/interfaz, cosa que yo fuerzo para ver si funciona, conectandome y desconectandome del wifi.
No me vale el cheatcode guiexec ya que la conexion a una red wifi no es automática; precisa clicar en un boton en una pagina de acceso que ofrece el router
Gracias anticipadas

Kulle
Warlord
Warlord
Posts: 646
Joined: 28 Jan 2017, 10:39
Distribution: v4.0 64bit Xfce
Location: Berlin

Lanzar un script cuando se conecta a Wifi

Post#2 by Kulle » 12 Jun 2024, 14:49

Aquí hay un guión:

Code: Select all

#!/bin/bash

# Verfügbare WLAN-Netze auflisten und nummerieren
networks=($(nmcli -t -f SSID device wifi list | awk -F: '{print $1}'))
for i in "${!networks[@]}"; do
    echo "$((i+1)). ${networks[i]}"
done

# Benutzereingabe für die gewünschte Nummer
read -p "Bitte geben Sie die Nummer des gewünschten WLAN-Netzes ein: " choice

# SSID basierend auf der ausgewählten Nummer ausgeben
selected_ssid="${networks[choice-1]}"
if [ -n "$selected_ssid" ]; then
    read -s -p "Bitte geben Sie das Passwort für '$selected_ssid' ein: " password
    nmcli device wifi connect "$selected_ssid" password "$password"
else
    echo "Ungültige Auswahl. Bitte geben Sie eine gültige Nummer ein."
fi
AI assisted browsers: Opera, Microsoft Edge and others
Mira aquí: #10

zyrus
White ninja
White ninja
Posts: 11
Joined: 11 Jun 2024, 17:51
Distribution: porteus

Lanzar un script cuando se conecta a Wifi

Post#3 by zyrus » 13 Jun 2024, 18:33

Gracias por la respuesta, pero creo que no es lo que preguntaba o me he explicado mal; lo que yo necesito es saber si no hay un evento que NetworkManager identifique como conexión realizada a una red inalámbrica y distinguirlo en un script en el directorio dispatcher.d para ejecutar cierto comando sólo cuando se dé ese evento, el de la conexión, NO el de la desconexión. Leo que NetworkManager tiene el evento o accion up pero eso es sólo para cuando la interfaz esta activada, y tiene otro llamada connectivity-change que podria valerme, pero ese acción se produce tanto cuando detecta conexión como cuando se va fuera de linea. No me importa si la conexión es a un SSID u otro, sólo que se esté conectado de manera efectiva (esto es, ping externos devueltos con éxito, ya que algunos routers públicos precisan de una validación inicial via página, vamos, hacer click en un botón, o no sales a internet)

Dicho de otro modo, poder usar el servicio NetworkManager-dispatcher (https://www.networkmanager.dev/docs/api ... tcher.html) para hacer "algo" cuando detecte conectividad

User avatar
M. Eerie
Moderator
Moderator
Posts: 650
Joined: 31 Aug 2017, 21:18
Distribution: Nemesis Xfce/MATE x64

Lanzar un script cuando se conecta a Wifi

Post#4 by M. Eerie » 02 Jul 2024, 09:02

zyrus wrote:
13 Jun 2024, 18:33
hacer "algo" cuando detecte conectividad
Hola zyrus.

Desconozco qué distribución estás utilizando, por tanto desconozco el servicio que dispararía dicho evento. Si es una derivada de archlinux, o artix en el caso de Nemesis, el script necesario debe ir en la carpeta /etc/NetworkManager/dispatcher.d tal como se indica aquí.

Si es porteus, la carpeta probablemente sea otra (/etc/network/ /etc/network/if-up.d/ o similar). Prueba a nombrar el script sin extensión alguna y asegúrate de marcarlo como ejecutable...

No puedo ayudarte mucho más ya que no se trata de una pregunta específica de Porteus, sino que depende del tipo de distribución que utilices.
> Does not compute_ 🖖

https://forum.porteus.org/viewtopic.php?p=94310#p94310
https://forum.porteus.org/viewtopic.php?p=84002#p84002
https://forum.porteus.org/viewtopic.php?p=77174#p77174
https://forum.porteus.org/viewtopic.php?f=39&t=8584

zyrus
White ninja
White ninja
Posts: 11
Joined: 11 Jun 2024, 17:51
Distribution: porteus

Lanzar un script cuando se conecta a Wifi

Post#5 by zyrus » 03 Dec 2024, 16:12

Pues estoy usando Porteus como distribución, por si no lo comenté antes.
La idea que tengo es lanzar un comando de actualización de hora (tengo el timezone bien puesto en Europe/Madrid pero siempre me pone mal la hora por la tonteria de adelantar 1 hora y retrasarla en ciertas partes del año) para que en cuanto se detecte conexión a internet actualice y corrija ese desfase horario consultando el servidor horario de referencia en España. El script funciona perfectamente si lo arranco con el cheatcode guiexec pero es más complicado de lo necesario, ya que tiene que ir investigando si hay conexión cada ciertos segundos para poder lanzar luego un ntpdate. Lo suyo sería que el servicio NetworkManager tuviera una manera sencilla para ejecutar scripts SOLAMENTE cuando detecte conexión. En el enlace que me pones de Arch indica que tiene que estar el servicio Network.dispatcher levantado. No sé como verlo porque aunque init --version indica que Porteus usa SysVinit, no funciona el comando sudo service Network.dispatcher status.
En Porteus existe el directorio /etc/NetworkManager/dispatcher.d pero sólo tiene tres subdirectorios: no-wait, pre-down y pre-up y me parece que ninguno de esos me será util para mi propósito de lanzar scripts al detectar internet.
Nunca habia tenido tantas dificultades para que una distro me actualizara correctamente la hora, se supone que indicando el timezone correcto deberia bastar

beny
Full of knowledge
Full of knowledge
Posts: 2214
Joined: 02 Jan 2011, 11:33
Location: italy

Lanzar un script cuando se conecta a Wifi

Post#6 by beny » 03 Dec 2024, 21:17

hola, mira si porteus tiene el paquete ntp completo, con el script en /etc/rc.d que te permite iniciar el demonio y también la configuración en /etc para que siempre tengas la hora correcta en tu sistema, mira en configurar si hay que poner los servidores en español, incluso en arch solo hay tres directorios en network.dispacher

zyrus
White ninja
White ninja
Posts: 11
Joined: 11 Jun 2024, 17:51
Distribution: porteus

Lanzar un script cuando se conecta a Wifi

Post#7 by zyrus » 04 Dec 2024, 19:52

Pues en ese directorio no veo nada relacionado con ntp, incluso he mirado en los subdirectorios rc0.d...rc6.d los cuales están vacios.
Es más, he buscado ntp en el htop y con el comando grep y no veo nada. He hecho un find y tampoco, solo está ntpdate que es el comando que uso para sincronizar la hora manualmente. Sospecho que no está en Porteus.
El caso es que en Porteus Settings Centre hay una opción específica para establecer la hora y fecha manualmente y para establecer el timezone, pero da igual lo que haga. La hora siempre esta mal.
Una pesadilla esta distribución.... Porque tampoco tiene centro de software sólo una herramienta para descargarte 8 navegadores y dos extras
Lo del NetworkManager dispatcher al menos en Porteus no funciona; lo he comprobado con un script personal que me muestra la interface y evento cada vez que hay algún cambio y no muestra nada. No sé si será porque no esté arrancado el servicio NetworkManager.dispatcher o no he entendido cómo funciona.
Gracias de todos modos

beny
Full of knowledge
Full of knowledge
Posts: 2214
Joined: 02 Jan 2011, 11:33
Location: italy

Lanzar un script cuando se conecta a Wifi

Post#8 by beny » 05 Dec 2024, 11:06

porteus deriva de slackware 15, si es necesario puedes instalar paquetes de slackware 15 sin problemas, porteus tiene varios administradores de paquetes pmod es el oficial para slackware,slapt-mod,getpkg,slpkg para que los paquetes se construyan con slackbuild o sbopkg que hace lo mismo cosa, y si realmente quieres que haya slakfinder en la web para buscar paquetes para tu distribución, entiendo la frustración, pero echar un vistazo al foro puede ayudarte.
https://slackware.nl/slakfinder/
slapt-mod: A simple wrapper for slapt-get to build Porteus module.

slapt-mod [-c] [-u] [-d|-m|-M|-n|-N PACKAGE_NAME] [-l PATTERN] [-s PATTERN]

Options:
-c: Purge cached packages
-d: Download only
-m: Download and build module (ZSTD compression)
-M: Download and build module (XZ compression)
-n: Download and build module without dependencies (ZSTD compression)
-N: Download and build module without dependencies (XZ compression)
-l: List installed packages
-s: Search package
-u: Update database
-h: This usage

To change the temporary directory (default is /tmp), pass the TMP variable.
$ TMP=/path/to/directory slapt-mod -m packagename

Temporary directory is for storing downloaded packages, installing and converting them to modules.

See /etc/slapt-get/slapt-modrc to set preferences for stripping and language of created modules.

zyrus
White ninja
White ninja
Posts: 11
Joined: 11 Jun 2024, 17:51
Distribution: porteus

Lanzar un script cuando se conecta a Wifi

Post#9 by zyrus » 05 Dec 2024, 18:25

Me he bajado ntp-4.2.8p18-x86_64-3_slack15.0.txz y lo ha convertido a xzm. Si lo activo no hace nada. ¿ Es posible tener un servicio cliente de ntp funcional en porteus ?. Me he bajado y activado también ntpclient-2015_3ce nada65-x86_64-1salix15.0.xzm y me pasa lo mismo, que no hace nada. No veo ningun proceso ntp* funcionando. Y otra duda al respecto ¿ porque no funciona el consultar el estado de un servicio en Porteus ?. Porteus tiene el init sysV asi que deberia funcionar el comando sudo service ntp status pero me dice que no conoce el comando service

beny
Full of knowledge
Full of knowledge
Posts: 2214
Joined: 02 Jan 2011, 11:33
Location: italy

Lanzar un script cuando se conecta a Wifi

Post#10 by beny » 05 Dec 2024, 18:34

como root en terminal sh /etc/rc.d/rc.ntpd start, no se si los servidores tienen que ser de España, prueba si usas xfce4 puedes agregar el daemon a todos los boot
porteus como slackware utiliza el directorio /etc/rc.d como hogar para los scripts de inicio y también para el software

bash-5.2# sh '/etc/rc.d/rc.ntpd' start
Starting NTP daemon: /usr/sbin/ntpd -g -p /run/ntpd.pid -u ntp:ntp
bash-5.2# sh '/etc/rc.d/rc.ntpd' status
ntpd is running as PID 6782.
bash-5.2#

Post Reply