Le Wake On Lan sous Linux

Fermé
COCO - 25 mars 2005 à 12:14
 clement.be4free - 18 déc. 2008 à 22:45
comment fonctionne le Wake On Lan (éveil et extinction à distance) sous linux ? quel matériel ? quel config ? adresse de site ki en parle ???

Merci d'avance !!!
A voir également:

4 réponses

zefcafougnette Messages postés 1 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 15 novembre 2007 4
15 nov. 2007 à 09:54
Bonjour,

Pour réveiller des machines sous linux en Wake on lan, j'utilise la méthode suivante :
1 - J'active l'option dans le BIOS de la machine
2 - je configure un service qui configure les cartes réseau
3 - je lance la commande eth-wake MAC_ADRESSE ( voir script wol.sh) sous root

Il semble que linux ne conserve pas les paramètres de configuration des cartes réseaux lorsqu'on arrête la machine. La configuration du BIOS ne suffit pas non plus.

J'utilise le script WakeOnLan sur des machine de production sous Readhat Entreprise. Pour des machine sous windows, je n'ai pas de solution pour le moment.

Script pour réveillée une machine Linux :

wol.sh

#!/bin/bash
#
# Script pour demarrer un machine en WakeOnLan
#
# Il faut fournir le nom de la machine en parametre
#
#Je verifie que le nom de la machine a ete donne
#
export LIGCMD=$(basename $0)
export MACHINE=$1
if [ $# -eq 0 ]; then
echo
echo " Le nom de la machine a demarrer doit etre passe en parametre."
echo
echo " ${LIGCMD} <nom de la machine>"
echo
exit 1
fi
#
# Je verifie que la commande peut etre utilisee sur la machine qui lance le script
#
if ! (which ether-wake > /dev/null 2>&1); then
echo
echo "Le script $(basename $0) ne peut pas etre lance sur cette machine."
echo
exit 1
fi
#
# Je verifie que la machine n'est pas demarrer
#
if (ping -c 2 ${MACHINE} >/dev/null 2>&1); then
echo
echo "La machine ${MACHINE} est en cours de fonctionnement."
echo
exit 1
fi
#
# Je defini l'adresse mac de la machine a demarrer
#
case ${MACHINE} in
machine1 | machine1.mondomaine.lan )
MAC_ADDR=XX:XX:XX:XX:XX:XX ;;
machine2 | machine2.mondomaine.lan )
MAC_ADDR=YY:YY:YY:YY:YY:YY ;;
* )
echo "La machine ${MACHINE} n'est pas repertoriee pour le WOL.";
exit 1 ;;
esac
#
# Je lance la commande de WakeOnLan
#
echo
echo "Envoi de la commande de demarrage pour la machine ${MACHINE}"
echo
ether-wake ${MAC_ADDR}
exit 0


Script du service

WakoOnLan à placer dans /etc/init.d (chkconfig WakoOnLan on) :

#!/bin/bash
#
# WakeOnLan Script pour configurer le WOL sur les interfaces reseau
#
# chkconfig: 2345 99 05
#
# description: Activation du Wake On Lan
#
# Source function library.
. /etc/init.d/functions
#
if [ ! -f /etc/sysconfig/network ]; then
exit 0
fi
. /etc/sysconfig/network

# Le reseau est-il demarre
if [ "${NETWORKING}" = "no" ]; then
echo "Wake On Lan non active"
exit 0
fi
#
# Determination des interfaces reseau actives
#
cd /etc/sysconfig/network-scripts
interfaces=$(ls ifcfg* | \
LANG=C sed -e "$__sed_discard_ignored_files" \
-e '/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d' \
-e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
LANG=C sort -k 1,1 -k 2n | \
LANG=C sed 's/ //')
#
# Activation du Wake On Lan pour les interfaces montees
#
for i in $interfaces; do
if (ethtool $i|grep "Supports Wake-on"|grep g > /dev/null 2>&1); then
echo -n "Activation du WakeOnLan pour $i"
daemon /sbin/ethtool -s $i wol g
echo
fi
done
exit 0
4
ben_o_it Messages postés 1 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 19 décembre 2006 1
19 déc. 2006 à 00:58
Bonjour,

J'ai un pb pour activer le wake on lan selon le noyaux que j'utilise (je suis un peu novice sous linux).

J'ai 2 noyaux linux sur un pc :
1) un noyau 2.4.27 , pré-compilé
2) un noyau 2.6.19 , configuré et compilé par mes soins

Qd j'éteins mon pc apres l'avoir démarré sur le noyau (1), j'arrive à le redémarrer avec le wake on lan sans pb.
Par contre qd je l'ai éteins avec le noyau (2), je n'y arrive pas.

J'ai beau cherché sur internet, je n'arrive pas à trouver ce que j'ai mal configuré dans mon noyau (2).
Est-ce que quelqu'un pourrait m'aider ? Qu'est-ce que je peux avoir mal configuré pour la compilation de mon noyau ?
1
clement.be4free
18 déc. 2008 à 22:45
voila uns vision legèrement différente ce basant sur les logs trouvés dans le DHCP.

ce script permet de réveillé un host via son nom, ou via son adresse mac, ou de réveiller tout les hosts du réseau.
#!/bin/sh
# /// revision-script 1.0 \\\
# Author : Clément ROGER
# Author : Be4free.com
# Author : <clement.be4free AT gmail DOT com>
# Licence : Under GPL
# If you modify this script or if you want to add functions please email 
# your version to clement.be4free AT gmail DOT com

function wol_install {
        if [ ! -d "/var/lib/wol/" ] ; then  mkdir -p /var/lib/wol/ ; chmod 640 /var/lib/wol/ ; fi
        if [ ! -f "/var/lib/wol/discover" ] ; then  touch /var/lib/wol/discover ; chmod 640 /var/lib/wol/discover ; fi
}

function wol_list {
        mac_list=`cat /var/lib/wol/discover`
        for mac_address in $mac_list ; do
                echo $mac_address | {
                        IFS=";" read mac name
                        echo $name
                }
        done
}



function wol_discover {
        mac_list=`cat /var/log/syslog | grep dhcpd | grep DHCPREQUEST | sed 's/^.*from//' | cut -d " " -f 2,3 | sed 's/\ (/;/' | sed 's/)//' | sort | uniq`
        for mac_address in $mac_list ; do
                cat /var/lib/wol/discover | grep -x $mac_address >> /dev/null 1>&1
                if [ "$?" == 1 ] ; then
                        echo $mac_address >> /var/lib/wol/discover
                fi
        done
}

function wol_wake {
        argv=$1
        cat /var/lib/wol/discover | grep $argv | {
                IFS=";" read mac name
                ether-wake $mac
        }
}

if [ ! -d "/var/lib/wol/" ] || [ ! -f "/var/lib/wol/discover" ] || [ ! -r "/var/lib/wol/discover" ] && [ $1 != "install" ] ; then
        echo "Error : $0 db are not installed, please type '$0 install'"
        exit 1;
fi

case $1 in
        install)
                wol_install
                ;;
        list)
                wol_list
                ;;
        discover)
                wol_discover
                ;;
        wakeall)
                wol_discover
                mac_list=`cat /var/lib/wol/discover | cut -d ";" -f 1`
                for mac_address in $mac_list ; do
                        wol_wake $mac_address
                done
                ;;
        wake)
                if [ "$1" != "" ] ; then
                        cat /var/lib/wol/discover | grep $2 >> /dev/null 2>&1
                        if [ "$?" != "0" ] ; then
                                echo "undiscovered host, please try '$0 discover' first"
                                exit 1;
                        fi
                        wol_wake $2
                else
                        echo "Usage : $0 wake [HOST or MAC_ADDRESS]"
                        exit 1;
                fi
                ;;
        *)
                echo "Usage : $0 list|dicover|wakeall|wake [HOST or MAC_ADDRESS]"
                ;;
esac



a placer dans /usr/local/sbin/wakeonlan en 750
installer via /usr/local/sbin/wakeonlan install
Usage : /usr/local/sbin/wakeonlan list|dicover|wakeall|wake [HOST or MAC_ADDRESS]
1
voila un howto en englais qui explique comme ça marche un wake on lan sur Linux et sur Window$:

http://gsd.di.uminho.pt/jpo/software/wakeonlan/mini-howto/
0