[WOL] Problemas de Wake On Lan
Debian 11 / 12
Síntoma
- Partimos de que la configuración para WOL en la BIOS es correcta pero al enviar un paquete mágico de WOL a ese equipo no se enciende, tras haberlo apagado desde el sistema operativo.
- En algunas placas base es fácil detectar si la tarjeta tiene alimentación con el equipo apagado porque se ilumina alguno de los LEDs adjuntos al conector RJ45 del adaptador de red. Otras placas base pueden no indicarlo así pero estar igualmente alimentado el adaptador de red.
- En algunos ordenadores del aula, por ejemplo los de placa base ASUS, al apagarlos desde el sistema operativo también se apaga la alimentación de su tarjeta de red. Esto no debería ser así, pues debería quedar con alimentación para poder encender el equipo nuevamente mediante WOL.
Solución
- Como
root
instalamos previamente en esos equipos el paqueteethtool
si aún no lo tuviésemos.# aptitude install ethtool
- Con la orden
$ ip a
conocemos el nombre que asigna el sistema operativo a nuestra tarjeta de red, por ejemplo
enp3s0
. - Ejecutamos
# ethtool -s enp3s0 wol g
- Apagamos el ordenador, por ejemplo con
# poweroff
- Mandamos un paquete WOL y comprobamos que se enciende.
Automatización
- Una vez comprobado que funciona, se puede insertar esta orden en un script que se ejecute automáticamente al iniciar el equipo para que WOL funcione siempre. En este caso usaré el método que funciona dentro del contexto de systemd, por lo que solamente será válido en el caso de que nuestra distribución haga uso de systemd como sistema de inicio predeterminado; tal es el caso de nuestro Debian 12.
- Creo y edito el script, por ejemplo en el directorio del
root
:- wol.sh
#!/bin/bash ethtool -s enp3s0 wol g
A este fichero hay que darle permisos de ejecución…
# chmod a+x wol.sh
- Creo y edito el fichero de servicio, por ejemplo en el mismo directorio anterior:
- wol.service
[Unit] Description=Corrige WOL en ASUS After=network.target network-online.target Wants=network-online.target [Service] ExecStart=/root/wol.sh [Install] WantedBy=multi-user.target
- El último paso es habilitar el servicio para que se inicie con cada arranque del sistema:
# systemctl enable /root/wol.service
También se puede iniciar un servicio de forma manual en cualquier momento con:
# systemctl start wol.service
Además, en cualquier momento se puede comprobar que el servicio está cargado en el equipo con:
# systemctl status wol.service
Script de prueba con todo el proceso
Para ejecutar desde el home de root. Habrá que controlar que la identificación de la tarjeta de red sea la correcta: En este script se supone que es enp3s0
debiendo cambiar ese nombre según lo que nos informe la orden
$ ip a
- arregla_wol.sh
#!/bin/bash aptitude install ethtool echo "#!/bin/bash" > wol.sh echo "ethtool -s enp3s0 wol g" >> wol.sh chmod a+x wol.sh echo "[Unit]" > wol.service echo "Description=Corrige WOL" >> wol.service echo "After=network.target network-online.target" >> wol.service echo "Wants=network-online.target" >> wol.service echo "" >> wol.service echo "[Service]" >> wol.service echo "ExecStart=/root/wol.sh" >> wol.service echo "" >> wol.service echo "[Install]" >> wol.service echo "WantedBy=multi-user.target" >> wol.service systemctl enable /root/wol.service systemctl start wol.service systemctl status wol.service