Lo que necesito: conectarme a una red wifi diferente en archlinux llamando al script python.
Lo que estoy haciendo: ejecutar las siguientes declaraciones desde python:
wpa_passphrase "MySSID" "MyPass"> /etc/wpa_supplicant/profile.conf wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/profile.conf dhcpd wlan0Funciona solo para el primer intento. Cuando se ejecuta por segunda vez, dice que dhcpd ya está activado. No sé cómo cambiar a otra red.
También probé wpa_cli y nuevamente, no sé cómo cambiar a otra red.
Sugiera alguna solución o alternativa (sin complicaciones)
Su problema concreto es que inicia wpa_supplicant y dhcp en lugar de reiniciarlos. Tengo un script que dice
#shutdown dhc dhclient -r #shutdown wpa_supplicant killall wpa_supplicant #down interface ifdown --force wlan0 sleep 1 #your wpa startup here: wpa_supplicant -t -fYOUR_LOG_FILE -cYOUR_wpa_supplicant.conf -B -iwlan0 sleep 1 #restart dhc dhclient -nwSupongo que puede hacer esto un poco mejor configurando sus /etc/network/interfaces apropiadamente.
Por cierto. en principio, no debería ser necesario reiniciar el dhc en absoluto. Después de un tiempo, debería darse cuenta de que necesita obtener una nueva IP, pero para mí esto lleva mucho tiempo. ;)
Edite /etc/wpa_supplicant.conf
nano /etc/wpa_supplicant.confComplete el archivo para que se vea así (reemplazando wifi_name y wifi_key por sus valores reales, por supuesto).
network={ ssid="wifi_name1" psk="wifi_key1" }y
network={ ssid="wifi_name2" psk="wifi_key2" }Luego guardar y salir
La red wifi ya está configurada, ahora debemos decirle que queremos conectarnos a ella usando este archivo de configuración.
wpa_supplicant -B -i wlan0 -c <(wpa_passphrase MYSSID passphrase)Si su interfaz no se llama wlan0, reemplace wlan0 por el nombre real de su interfaz. Ahora debemos solicitar una dirección IP.
dhclient wlan0Si todo salió bien, ahora verá varias líneas que contienen algunas direcciones IP y el comando ping debería funcionar.
Cuando genere una nueva configuración con wpa_passphrase , colóquela en un lugar diferente al anterior para facilitar las cosas. Entonces, por ejemplo, el wifi de su hogar podría estar en /etc/wpa_supplicant/home.conf y el wifi de su trabajo podría estar en /etc/wpa_supplicant/work.conf .
Luego, cuando necesites conectarte al wifi de tu casa, simplemente ejecuta
killall wpa_supplicant # With root privileges wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/home.confY cuando necesitas conectarte al wifi de tu trabajo corres
killall wpa_supplicant # With root privileges wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/work.conf Enjuague y repita para cualquier red nueva que desee usar. Si no desea mantener una red, como un wifi de Starbucks en un viaje por carretera, simplemente guárdelo en una conf que planea sobrescribir o eliminar como /etc/wpa_supplicant/temp.conf .
AFAIK, nunca tienes que volver a ejecutar dhcpcd. Tengo dhcpcd como proceso de inicio y cada vez que cambio de wifi nunca necesito tocarlo.
Editar: tampoco necesita ejecutar esto como un script de python. Puedes hacerlo en la concha. Si necesita escribir un script que cambie rápidamente el wifi, le recomendaría que use un script de shell como el siguiente, por ejemplo.
#!/bin/sh [ -z "$1" ] && exit 1 [ ! -f "/etc/wpa_supplicant/${1}.conf" ] && echo "$1 is not a wpa_supplicant config file" && exit 1 sudo killall wpa_supplicant sudo wpa_supplicant -B -i wlan0 -c "/etc/wpa_supplicant/${1}.conf"correr como
wifichange homeo
wifichange work La sección [ -z "$1" ] dice que salga si no ingresó nada. (me gusta)
wifichange Y el [ ! -f ...] la sección dice que salga si no ingresó el nombre de un archivo de configuración real.
Ahora probé el script.