Solución definitiva a las constantes averías del wifi en MacosX
He encontrado un sistema que finalmente funciona y cuando, con menos frecuencia, se rompe el wifi compartido, consigue recuperarlo automáticamente en un minuto.
La solución es un ~/Library/LaunchAgents/com.me.wifisharingup.plist
daemon con el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.juanfal.wifisharingup</string>
<key>ProgramArguments</key>
<array>
<string>/Users/mi/bin/wifisharingup.sh</string>
</array>
<key>Nice</key>
<integer>1</integer>
<key>StartInterval</key>
<integer>60</integer>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/me/Library/Logs/wifisharingup.err</string>
<key>StandardOutPath</key>
<string>/Users/me/Library/Logs/wifisharingup.out</string>
</dict>
</plist>
Puedes ver, cada minuto ejecuta el simple script que sigue. Ten cuidado haciendo que el plist anterior sea propiedad del Root y lánzalo con:
sudo chown root com.me.wifisharingup.plist
sudo launchctl load /Users/me/Library/LaunchAgents/com.me.wifisharingup.plist
El script que lanza cada minuto (no olvides hacerlo ejecutable) es:
#!/bin/sh
if [[ ! `ipconfig getifaddr en1` ]]; then
/usr/sbin/networksetup -setairportpower en1 off
/usr/sbin/networksetup -setairportpower en1 on
echo `date` >> "/Users/me/Library/Logs/wifisharingup.err"
else
touch "/Users/me/Library/Logs/wifisharingup.out"
fi
Creo que la simple llamada periódica (cada minuto) a ipconfig getifaddr en1
refresca algo en lo que es el demonio de compartir wifi. Sea lo que sea, en cualquier momento el compartir wifi falla, pierde la dirección IP auto asignada, y entonces, ipconfig getifaddr en1
falla, por lo que mi script reinicia totalmente el wifi, haciendo que reconstruya su estado anterior y recuperando el wifi compartido.
De momento lleva días funcionando dentro de un MacMini sin teclado, ratón ni monitor, pero sólo enchufado a la Ethernet y dando acceso a mis gadgets wifi al mundo.
0 votos
Mankoff, cuando ejecuto tu sugerencia: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist parece que se ejecuta bien e incluso el gui de preferencias de compartición se actualiza correctamente cuando se refresca, sin embargo la conexión no funciona. Si ejecuto el comando de nuevo, incluso falla porque piensa que ya está cargado. Además, si ejecuto el comando "top" para ver el proceso que se está ejecutando, no veo "InternetSharing", pero si lo inicio en la guía de preferencias, veo que el proceso "InternetSharing" se está ejecutando y la conexión funciona. Alguna idea de por qué estoy h
0 votos
No estoy seguro de por qué tienes ese comportamiento. Veo "InternetSharing" en la parte superior (o más fácil, ps aux | grep -i internet ).
0 votos
Estoy usando OS X 10.6. Si tienes una versión diferente quizás sea por eso...
0 votos
Además, esto debería ser un comentario a mi respuesta, no una respuesta en sí misma. Tal vez quieras borrar la respuesta...
0 votos
Sí, ciertamente esto debería ser un comentario a su respuesta, pero por alguna razón no soy capaz de comentar las respuestas a menos que alguien ya haya hecho un comentario. Tal vez porque soy un nuevo usuario. Estoy ejecutando OS X 10.6.4. Otra cosa que he notado es que cuando lanzo el uso compartido de Internet en la guía de preferencias es que el proceso natd (demonio de traducción de direcciones de red) también se inicia. Me pregunto si también tengo que iniciar este proceso, actualmente estoy investigando cómo hacerlo, parece que hay argumentos complejos necesarios para iniciar este proceso.
0 votos
Mankoff, cuando ejecutas el comando ¿también se inician los otros procesos, como bootpd y natd? Estos procesos se inician cuando comienzo a compartir internet desde la GUI, pero ningún proceso se inicia cuando ejecuto el comando. Empiezo a pensar que el proceso se bloquea porque los otros procesos no están presentes. Eso también explicaría por qué el uso compartido de Internet se comprueba en la interfaz gráfica de usuario, pero el proceso no se está ejecutando.
0 votos
@MikeZ: Los he convertido en comentarios para ti. Como aún no tienes suficiente reputación para comentar en todos los sitios del sitio, lo que puedes hacer es crear una nueva pregunta y con suerte otros podrán ayudarte al igual que mankoff. Esto te ayudará a ganar suficiente reputación para comentar en todos los sitios. Consulta apple.stackexchange.com/privilegios para obtener más información sobre la reputación y los privilegios.