Ceci est une ancienne révision du document !
Wake on LAN : réveil de l'ordinateur via le réseau
Définition
Le Wake-on-LAN (WOL) ou mise en marche du PC depuis le réseau est une technologie développée par AMD et IBM, permettant à un ordinateur mis en veille d'être démarré à distance par l'envoi d'un « magic-packet » sur la carte réseau supportant le Wake-on-LAN.
Sur les ordinateurs récents, l'arrêt complet de l'ordinateur est possible. En effet, l'alimentation est toujours présente et la carte-mère est généralement en veille. D'ailleurs un voyant sur près du connecteur réseau signale la présence d'une activité, même ordinateur éteint.
- vous aurez besoin d'une station de contrôle pour piloter le réveil d'un ordinateur distant (a priori sur votre réseau local), sur laquelle vous installerez l'un de ces 2 packets,
- pour réveiller l'ordinateur distant, il faut connaître son adresse MAC.
- sur l'ordinateur distant, il faut configurer le BIOS pour que la fonction WOL soit activée, pas de logiciel supplémentaire a installer,
Mise en oeuvre
Paramétrage du BIOS
Pour que le WOL soit possible il faut activer l'option correspondante dans votre bios. Suivant la version/fabricant de votre BIOS l'option se nomme différemment : Power On PCI, Wake On Network,…
Paramétrage de la carte réseau
Il faut maintenant paramétrer la carte réseau pour qu'elle réagisse au signal "Wake-on-lan" qu'on appelle aussi paquet "magique" (magic packet).
Note : Je ne suis pas arrivé à paramétrer le WOL une fois pour toute dans la mémoire morte de la carte réseau. Une solution (pas très propre) consiste à exécuter un script au démarrage et/ou à l'arrêt de l'ordinateur et/ou de l'interface réseau.
En dur
Je ne suis jamais arrivé à écrire dans l'EEPROM de ma carte réseau pour qu'elle
sudo gedit /etc/network/interfaces
et ajoutez
pre-down /usr/sbin/ethtool -s eth0 wol g
puis on finit avec l'extinction:
éditez
sudo gedit /etc/default/halt
et ajoutez
WOL=1
puis éditez
sudo gedit /etc/init.d/halt
Juste avant la ligne
log_action_msg "Will now halt"
ajoutez
# dont shut interfaces down if WOL=1
wol="-i"
if [ "$WOL" = "1" ]
then
wol=""
fi
Puis remplacez la ligne
halt -d -f -i $poweroff $hddown
par :
halt -d -f $wol $poweroff $hddown
Voilà, il y a peut-être des choses en double ou il y a peut-être plus simple/facile/optimisé, mais je pense que cette méthode marche pas mal. Peut-être à mettre sur le wiki, mais j'ai pas encore regardé comment faire, ni même si c'est assez complet pour l'y faire figurer… enfin d'ici la, bon wol. Pitch ;)
Méthode éphémère alternative
Testée avec Feisty,fonctionne sous Gusty
En essayant les méthodes précédentes, j'en suis venu à ne modifier qu'un seul fichier pour avoir un Wake On Lan qui fonctionne. Comme les drivers de cartes réseau ont tendance, en se chargeant, à désactiver le WOL, nous allons tout simplement activer le WOL sur n'importe quel évènement réseau, que ce soit start, stop, restart ou force-reload.
Pour cela, éditons /etc/init.d/networking :
sudo gedit /etc/init.d/networking
Et ajoutons ethtool -s eth0 wol g à la fin de chaque fonction (attention, votre carte réseau n'est peut-être pas identifiée sous eth0 mais eth1, pensez à faire la modification dans les commandes. Afin de savoir, tapez dans un terminal: ifconfig vous aurez descriptif des interfaces réseau en service sur votre machine), ce qui donne :
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: networking
# Required-Start: mountkernfs ifupdown $local_fs
# Required-Stop: ifupdown $local_fs
# Default-Start: S
# Default-Stop: 0 6
### END INIT INFO
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
[ -x /sbin/ifup ] || exit 0
. /lib/lsb/init-functions
case "$1" in
start)
log_action_begin_msg "Configuring network interfaces"
type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true
if [ "$VERBOSE" != no ]; then
if ifup -a; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
else
if ifup -a >/dev/null 2>&1; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
fi
type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 15" || true
#ajout ici!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ethtool -s eth0 wol g
;;
stop)
if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts |
grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then
log_warning_msg "not deconfiguring network interfaces: network shares still mounted."
#ajout ici!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ethtool -s eth0 wol g
exit 0
fi
log_action_begin_msg "Deconfiguring network interfaces"
if [ "$VERBOSE" != no ]; then
if ifdown -a --exclude=lo; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
else
if ifdown -a --exclude=lo >/dev/null 2>/dev/null; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
fi
#ajout ici!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ethtool -s eth0 wol g
;;
force-reload|restart)
log_action_begin_msg "Reconfiguring network interfaces"
ifdown -a --exclude=lo || true
if ifup -a --exclude=lo; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
#ajout ici!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ethtool -s eth0 wol g
;;
*)
echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
#ajout ici!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ethtool -s eth0 wol g
exit 1
;;
esac
#ajout ici!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ethtool -s eth0 wol g
exit 1
Et voilà ! Que le réseau soit démarré, arrêté, redémarré ou rechargé, le wol sera réactivé, ce qui lui permet notamment de rester activé à l'arrêt de l'ordinateur.