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 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 paquets,
- 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 (Wake-on-LAN) 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).
Sous GNU/linux lors de l'extinction, le système désactive les interfaces réseaux.
Méthode pour éviter la désactivation du WOL
Testée avec Feisty, fonctionne sous Gusty
ethtool
est rajoutée à de multiples endroits où elle est parfaitement inutile ; visiblement celui qui a proposé ce script l'a mise partout au petit bonheur sans savoir où elle serait utile. Tout ceci n'est en particulier d'aucune utilité sous Intrepid.
Il semble qu'on puisse ne modifier qu'un seul fichier pour avoir un Wake On Lan qui fonctionne. Comme les pilotes 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.
Alternative
si quelqu'un a testé avec succès merci de remettre un peu d'ordre ci-dessous…
Editez
sudo gedit /etc/network/interfaces
ajoutez
pre-down /usr/sbin/ethtool -s eth0 wol g
puis pour l'extinction:
halt
" sont inutiles, puisque le script "halt
" d'origine le prévoit déjà à l'identique, mais avec le nom de variable NETDOWN. On obtient donc le résultat équivalent en mettant simplement NETDOWN="no" dans /etc/default/halt
.
Néanmoins, la modification de cette variable n'est pas suffisante, en effet, dans rc0.d on constate que networking est lancé avant halt, or networking va couper vos interfaces réseau, chose qu'on cherche à éviter avec la variable NETDOWN. Il s'agit probablement d'un bug !
La solution consiste donc, dans le paragraphe stop de votre networking, de rajouter un ifconfig eth0 up (ou adaptez si ce n'est pas eth0). Vous pouvez en profiter pour rajouter le ethtool au même endroit, histoire de limiter les modifications
é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 ;)
- Cette fin de page serait à réviser.
Contributeurs : Dwan, Hipopo, Mysteroïd.