Wake On Lan: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
=== Cos'� Devil's Pie ===
==Introduzione==
[http://www.burtonini.com/blog/computers/devilspie Devil's Pie] � un programma che permette di personalizzare il comportamento delle finestre dei programmi.
Ad esempio si pu� scegliere in quale workspace far partire un'applicazione, o impedire che compaia nella taskbar.


Ogni volta che viene aperta un'applicazione, e quindi creata la sua finestra, Devil's Pie legge nei files di configurazione l'operazione da eseguire su di essa.
Il Wake On Lan è una funzione molto utile che permette di accendere il proprio computer a distanza dall'interno della propria rete locale. Molte schede
di rete, soprattutto gli ultimi chip integrati, supportano questa caratteristica che in alcuni casi si può rivelare davvero molto utile. Immaginate ad esempio di avere due pc in due stanze/uffici diverse dello stesso piano o perché no, proprio in due piani diversi e di essere impegnati sulla prima postazione.. vi ricordate però che avete bisogno di andare a controllare un documento che sta sull'altro computer e pensate di aprire vnc ma purtroppo la seconda postazione e' ancora spenta quindi non vi potete collegare.. a questo punto solo una cosa vi può aiutare: il '''MagicPacket(tm)'''!


=== Installazione ===
 
Devil's Pie � presente nell'archivio ufficiale Debian, quindi per installarlo basta usare il gestore di pacchetti preferito (aptitude, synaptic, kpackage...) oppure scrivere semplicemente da shell:
==Software necessario==
 
Avremmo bisogno di due programmi:
* ethtool
* etherwake
 
Per installarli è sufficiente un:


<pre>
<pre>
# apt-get install devilspie
# apt-get install ethtool etherwake
</pre>
</pre>


=== Configurazione ===
La versione attuale di Devil's Pie la 0.16.
Dalla 0.13 stato modificato completamente il sistema di configurazione, passando da un file di configurazione xml a un sistema a s-expressions.


Questo crea qualche problema perch� le guide che si trovano su internet si riferiscono al vecchio sistema, e l'autore non ha ancora scritto una guida per il sistema nuovo.
==Utilizzo di ethtool==


Significativo in questo senso il manuale, accessibile con:
All'avvio del computer entrate nel BIOS e attivate il Wake-On-Lan;  solitamente trovate l'impostazione sotto la voce
"Power Management Setup".
 
Una volta avviato Linux lanciate:
<pre>
<pre>
# man devilspie
# ethtool eth0
</pre>
</pre>
Nella sezione '''Bugs''', leggiamo un incoraggiante:
<pre>This manpage is useless, as it was thrown together on a train.</pre>


Per fortuna ci viene in aiuto il file README, che troviamo nella directory /usr/share/doc/devilspie.
{{ Warningbox | in questo e nei futuri esempi, sostituite eth0 con il nome corrispondente alla scheda di rete che state usando! }}


Per ogni finestra su cui vogliamo eseguire un'operazione, creiamo un file nomeprogramma.ds nella directory .devilspie della nostra home, in cui scriviamo il comando con l'operazione da eseguire, formattata come [http://en.wikipedia.org/wiki/S-expression s-expression].


In attesa della guida, per sapere i comandi disponibili bisogna spulciare il file src/parser.c nei sorgenti di devil's pie, e fare tante prove :-).
A questo punto dovreste vedere una serie di informazioni tra cui qualcosa di simile a questo:
Per le prove, basta richiamare devilspie da shell seguito dal file di configurazione che si vuole provare, e lanciare l'applicazione su cui deve eseguire l'operazione.
<pre>
        Supports Wake-on: g
        Wake-on: d
</pre>
 
La voce "Supports Wake-on" specifica i metodi di wake-on supportati dalla vostra scheda di rete; se non la vedete è un brutto segno!
La voce "Wake-on" specifica il metodo in uso; d sta per disabled mentre g è quello che andremo ad usare (Wake on MagicPacket(tm)). ''Se per qualche motivo avete già la voce "Wake-on" impostata a "g" potete terminare qui la lettura di questa pagina ;)''
 


=== Azioni ===
Per impostare il metodo a "g" assicuratevi di avere la lettera "g" tra quelle che seguono la voce "Supports Wake-on" e poi digitate:
<pre>
# ethtool -s eth0 wol g
</pre>


Questo � l'elenco delle azioni che possono essere applicate da devilspie all'apertura di una finestra:
Se rilanciate
<pre>
# ethtool eth0
</pre>


; <tt>(geometry geo)</tt>: Setta la dimensione e il posto in cui verr� visualizzata la finestra.
dovreste avere "'''Wake-on: g'''".


; <tt> (fullscreen) </tt>: Visualizza la finestra a pieno schermo.


; <tt> (focus) </tt>: Seleziona la finestra.
A questo punto spegnendo il computer lo potrete accendere da un'altra postazione usando etherwake.


; <tt> (center) </tt>: Posiziona la finestra al centro dello schermo.
==Utilizzo di etherwake==


; <tt> (maximize) </tt>: Massimizza la finestra.
etherwake serve per inviare il MagicPacket(tm) alla scheda di rete del pc che volete accendere, accendendolo.
Ovviamente, dal momento che il pc è spento non vi potete basare sul indirizzo IP; dovrete usare il MAC Address.


; <tt> (maximize_vertically) </tt>: Massimizza la finestra verticalmente.
Per trovare il MAC Address del pc di destinazione lanciate da quest'ultimo il comando:
<pre>
# ifconfig
</pre>


; <tt> (maximize_horizontally) </tt>: Massimizza la finestra orizzontalmente.
ed individuate la riga:
<pre>
eth0      Link encap:Ethernet  '''HWaddr 00:50:6D:EA:A2:DC'''
</pre>


; <tt> (minimize) </tt>: Minimizza la finestra.
Il MAC Address e' la parte che segue la dicitura "HWaddr" ovvero, nel nostro esempio, "00:50:6D:EA:A2:DC" (senza virgolette).


; <tt> (pin) </tt>: Visualizza la finestra iin tutti i workspaces.


; <tt> (unpin) </tt>: Il contrario di pin.
Segnatevi il MAC Address e dopo aver impostato il metodo di wake-on a "g" sul pc di destinazione, spegnetelo e recatevi sull'altra postazione.
A questo punto lanciate:


; <tt> (set_workspace num) </tt>: Setta il workspace (al posto di num va messo il numero del workspace).
<pre>
# etherwake <mac address> -D


; <tt> (skip_pager) </tt>: Non fa visualizzare la finestra nel pager.
esempio:
# etherwake 00:50:6D:EA:A2:DC -D
</pre>


; <tt> (skip_tasklist) </tt>: Non fa visualizzare la finestra nella tasklist.
L'opzione -D serve solo ad avere in ouput qualche informazione in più sull'operazione.
Se tutto è andato per il verso giusto, il secondo pc dovrebbe essersi acceso..


; <tt> (above) </tt>: Visualizza la finestra sempre sopra altre.


; <tt> (below) </tt>: Visualizza la finestra sempre sotto altre.
==Ultimi ritocchi==


; <tt> (undecorate) </tt>: Toglie le decorazioni del window manager.
Ora, se il pc è partito, noterete che lanciando nuovamente "ethtool eth0" il metodo di wake-on è tornato a "d".
Per far si che ogni volta che accendete il computer il metodo usato sia "g" ci sono varie strade; di seguito spiegherò quella che ho scelto ovvero
la modifica del file di avvio della rete.


=== Esempi ===
Aprite il file '''/etc/init.d/networking''' e modificatelo come segue:
Supponiamo di avere gkrellm su tutti i workspace, ma di non voler vedere la sua miniatura nel pager.
Creiamo un file gkrellm.ds e scriviamo:
<pre>
<pre>
(if (is (application_name) "gkrellm") (begin skip_pager (skip_tasklist)))  
#!/bin/sh
#
# manage network interfaces and configure some networking options
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
if ! [ -x /sbin/ifup ]; then
    exit 0
fi
 
spoofprotect_rp_filter () {
    # This is the best method: turn on Source Address Verification and get
    # spoof protection on all current and future interfaces.
   
    if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
        for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
            echo 1 > $f
        done
        return 0
    else
        return 1
    fi
}
 
spoofprotect () {
    echo -n "Setting up IP spoofing protection: "
    if spoofprotect_rp_filter; then
        echo "rp_filter."
    else
        echo "FAILED."
    fi
}
 
ip_forward () {
    if [ -e /proc/sys/net/ipv4/ip_forward ]; then
        echo -n "Enabling packet forwarding..."
        echo 1 > /proc/sys/net/ipv4/ip_forward
        echo "done."
    fi
}
 
syncookies () {
    if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
        echo -n "Enabling TCP/IP SYN cookies..."
        echo 1 > /proc/sys/net/ipv4/tcp_syncookies
        echo "done."
    fi
}
 
doopt () {
    optname=$1
    default=$2
    opt=`grep "^$optname=" /etc/network/options`
    if [ -z "$opt" ]; then
        opt="$optname=$default"
    fi
    optval=${opt#$optname=}
    if [ "$optval" = "yes" ]; then
        eval $optname
    fi
}
 
case "$1" in
    start)
doopt spoofprotect yes
        doopt syncookies no
        doopt ip_forward no
 
        echo -n "Configuring network interfaces..."
        ifup -a
ethtool -s eth0 wol g
echo "done."
;;
    stop)
        if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts |
          grep -q "^/ nfs$"; then
            echo "NOT deconfiguring network interfaces: / is an NFS mount"
        elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts | 
          grep -q "^/ smbfs$"; then
            echo "NOT deconfiguring network interfaces: / is an SMB mount"
elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts |
          grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then
            echo "NOT deconfiguring network interfaces: network shares still mounted."
        else
            echo -n "Deconfiguring network interfaces..."
            ifdown -a --exclude=lo
    echo "done."
        fi
;;
    force-reload|restart)
doopt spoofprotect yes
        doopt syncookies no
        doopt ip_forward no
        echo -n "Reconfiguring network interfaces..."
        ifdown -a --exclude=lo
        ifup -a
ethtool -s eth0 wol g
echo "done."
;;
    *)
echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
exit 1
;;
esac
 
exit 0
 
</pre>
</pre>
Questo comando fa svolgere due operazioni, l'eliminazione dal pager e dalla taskbar. Per applicare operazioni multiple stato necessario iniziare l'elenco dei comandi con 'begin'. Da notare anche l'annidamento delle parentesi.


Se vogliamo svolgere una sola operazione, ad esempio aprire XMMS nel workspace 2 e nient'altro, basta il solo comando senza 'begin':
Le uniche due modifiche che ho fatto sono le due aggiunte del comando '''ethtool -s eth0 wol g''' nella sezione di start e restart delle interfacce di rete. Copiate solo quel comando nel vostro file nel punto corrispondente; evitate di fare il copia e incolla dell'intero file.
 
{{ Warningbox | gli utenti k/ubuntu hanno una versione leggermente diversa; il comando sopracitato va messo dopo il blocco "if" }}


'''Esempio estratto dal file networking di kubuntu:'''
<pre>
<pre>
(if (is (application_name) "XMMS") (set_workspace 2))
        if [ "$VERBOSE" != no ]; then
            ifup -a
        else
            ifup -a >/dev/null 2>&1
        fi
ethtool -s eth0 wol g
</pre>
</pre>


Un altro esempio un po' pi� complesso, se si vuole mostrare la lista contatti di gaim su tutti i workspaces, una grandezza di 340x630 alla posizione (4, 150), il comando � questo:
'''Metodo alternativo'''
 
Un metodo alternativo che non richiede la modifica dello script di avvio è quello di inserire l'abilitazione della funzione wake quando l'interfaccia
di rete viene tirata su. Per fare questo si può inserire l'istruzione '''ethtool -s eth0 wol g''' direttamente in '''/etc/network/interfaces'''. Ad esempio:
 
<pre>
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.1
</pre>
diventa
<pre>
<pre>
(if
auto eth0
    (and
iface eth0 inet static
         (is (application_name) "gaim")
         address 192.168.1.2
         (is (window_name) "Lista contatti")
         netmask 255.255.255.0
    )
         gateway 192.168.1.1
    (begin
         up ethtool -s eth0 wol g
         (pin)
         (geometry "340x630+4+150")
    )
)
</pre>
</pre>


=== Automazione ===
Notare l'aggiunta della direttiva '''up''' per l'interfaccia '''eth0'''
Una volta eseguito devilspie, tutte le volte che si apre un programma per cui � stata definita un'operazione questa viene eseguita.
 
Per fare in modo che queste siano sempre eseguite bisogna far partire Devil's Pie automaticamente all'avvio del sistema.
==Conclusioni==


Con gli ambienti desktop che seguono gli standard freedesktop (come xfce), � sufficiente creare un link all'eseguibile di devilspie nella directory Desktop/Autostart della nostra home.
La tecnologia Wake-On-Lan si può rendere utile solo nei rari casi in cui si disponga di una LAN con postazioni molto distanti tra loro, tuttavia in tali situazioni si rivela una risorsa davvero preziosa che può aiutare tra le altre cose a risparmiare energia, spegnendo i computer non usati "perchè tanto poi ...".
In generale, molto pi� semplicemente, al momento dello spegnimento si pu� salvare la sessione con devilspie avviato, in modo da ritrovarselo a ogni accesso successivo.




----
---- [[Utente:Virtual DarKness|Virtual DarKness]] 16:58, Giu 23, 2005 (EDT)
:[[Utente:Gnappa|Gnappa]] 17:21, Dic 8, 2005 (EST)
[[Categoria:Networking]]
:[[Utente:ilbeppe|ilbeppe]] 21:05, Mar 31, 2006 (EST)
[[Categoria:Desktop]]

Versione delle 13:53, 5 apr 2006

Introduzione

Il Wake On Lan è una funzione molto utile che permette di accendere il proprio computer a distanza dall'interno della propria rete locale. Molte schede di rete, soprattutto gli ultimi chip integrati, supportano questa caratteristica che in alcuni casi si può rivelare davvero molto utile. Immaginate ad esempio di avere due pc in due stanze/uffici diverse dello stesso piano o perché no, proprio in due piani diversi e di essere impegnati sulla prima postazione.. vi ricordate però che avete bisogno di andare a controllare un documento che sta sull'altro computer e pensate di aprire vnc ma purtroppo la seconda postazione e' ancora spenta quindi non vi potete collegare.. a questo punto solo una cosa vi può aiutare: il MagicPacket(tm)!


Software necessario

Avremmo bisogno di due programmi:

  • ethtool
  • etherwake

Per installarli è sufficiente un:

# apt-get install ethtool etherwake


Utilizzo di ethtool

All'avvio del computer entrate nel BIOS e attivate il Wake-On-Lan; solitamente trovate l'impostazione sotto la voce "Power Management Setup".

Una volta avviato Linux lanciate:

# ethtool eth0
Warning.png ATTENZIONE
in questo e nei futuri esempi, sostituite eth0 con il nome corrispondente alla scheda di rete che state usando!



A questo punto dovreste vedere una serie di informazioni tra cui qualcosa di simile a questo:

        Supports Wake-on: g
        Wake-on: d

La voce "Supports Wake-on" specifica i metodi di wake-on supportati dalla vostra scheda di rete; se non la vedete è un brutto segno! La voce "Wake-on" specifica il metodo in uso; d sta per disabled mentre g è quello che andremo ad usare (Wake on MagicPacket(tm)). Se per qualche motivo avete già la voce "Wake-on" impostata a "g" potete terminare qui la lettura di questa pagina ;)


Per impostare il metodo a "g" assicuratevi di avere la lettera "g" tra quelle che seguono la voce "Supports Wake-on" e poi digitate:

# ethtool -s eth0 wol g

Se rilanciate

# ethtool eth0

dovreste avere "Wake-on: g".


A questo punto spegnendo il computer lo potrete accendere da un'altra postazione usando etherwake.

Utilizzo di etherwake

etherwake serve per inviare il MagicPacket(tm) alla scheda di rete del pc che volete accendere, accendendolo. Ovviamente, dal momento che il pc è spento non vi potete basare sul indirizzo IP; dovrete usare il MAC Address.

Per trovare il MAC Address del pc di destinazione lanciate da quest'ultimo il comando:

# ifconfig

ed individuate la riga:

eth0      Link encap:Ethernet  '''HWaddr 00:50:6D:EA:A2:DC'''

Il MAC Address e' la parte che segue la dicitura "HWaddr" ovvero, nel nostro esempio, "00:50:6D:EA:A2:DC" (senza virgolette).


Segnatevi il MAC Address e dopo aver impostato il metodo di wake-on a "g" sul pc di destinazione, spegnetelo e recatevi sull'altra postazione. A questo punto lanciate:

# etherwake <mac address> -D

esempio:
# etherwake 00:50:6D:EA:A2:DC -D

L'opzione -D serve solo ad avere in ouput qualche informazione in più sull'operazione. Se tutto è andato per il verso giusto, il secondo pc dovrebbe essersi acceso..


Ultimi ritocchi

Ora, se il pc è partito, noterete che lanciando nuovamente "ethtool eth0" il metodo di wake-on è tornato a "d". Per far si che ogni volta che accendete il computer il metodo usato sia "g" ci sono varie strade; di seguito spiegherò quella che ho scelto ovvero la modifica del file di avvio della rete.

Aprite il file /etc/init.d/networking e modificatelo come segue:

#!/bin/sh
#
# manage network interfaces and configure some networking options

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

if ! [ -x /sbin/ifup ]; then
    exit 0
fi

spoofprotect_rp_filter () {
    # This is the best method: turn on Source Address Verification and get
    # spoof protection on all current and future interfaces.
    
    if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
        for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
            echo 1 > $f
        done
        return 0
    else
        return 1
    fi
}

spoofprotect () {
    echo -n "Setting up IP spoofing protection: "
    if spoofprotect_rp_filter; then
        echo "rp_filter."
    else
        echo "FAILED."
    fi
}

ip_forward () {
    if [ -e /proc/sys/net/ipv4/ip_forward ]; then
        echo -n "Enabling packet forwarding..."
        echo 1 > /proc/sys/net/ipv4/ip_forward
        echo "done."
    fi
}

syncookies () {
    if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
        echo -n "Enabling TCP/IP SYN cookies..."
        echo 1 > /proc/sys/net/ipv4/tcp_syncookies
        echo "done."
    fi
}

doopt () {
    optname=$1
    default=$2
    opt=`grep "^$optname=" /etc/network/options`
    if [ -z "$opt" ]; then
        opt="$optname=$default"
    fi
    optval=${opt#$optname=}
    if [ "$optval" = "yes" ]; then
        eval $optname
    fi
}

case "$1" in
    start)
	doopt spoofprotect yes
        doopt syncookies no
        doopt ip_forward no

        echo -n "Configuring network interfaces..."
        ifup -a
	ethtool -s eth0 wol g
	echo "done."
	;;
    stop)
        if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts | 
          grep -q "^/ nfs$"; then
            echo "NOT deconfiguring network interfaces: / is an NFS mount"
        elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts |  
          grep -q "^/ smbfs$"; then
            echo "NOT deconfiguring network interfaces: / is an SMB mount"
	elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts | 
          grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then
            echo "NOT deconfiguring network interfaces: network shares still mounted."
        else
            echo -n "Deconfiguring network interfaces..."
            ifdown -a --exclude=lo
	    echo "done."
        fi
	;;
    force-reload|restart)
	doopt spoofprotect yes
        doopt syncookies no
        doopt ip_forward no
        echo -n "Reconfiguring network interfaces..."
        ifdown -a --exclude=lo
        ifup -a
	ethtool -s eth0 wol g
	echo "done."
	;;
    *)
	echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
	exit 1
	;;
esac

exit 0

Le uniche due modifiche che ho fatto sono le due aggiunte del comando ethtool -s eth0 wol g nella sezione di start e restart delle interfacce di rete. Copiate solo quel comando nel vostro file nel punto corrispondente; evitate di fare il copia e incolla dell'intero file.

Warning.png ATTENZIONE
gli utenti k/ubuntu hanno una versione leggermente diversa; il comando sopracitato va messo dopo il blocco "if"


Esempio estratto dal file networking di kubuntu:

        if [ "$VERBOSE" != no ]; then
            ifup -a
        else
            ifup -a >/dev/null 2>&1
        fi
	ethtool -s eth0 wol g

Metodo alternativo

Un metodo alternativo che non richiede la modifica dello script di avvio è quello di inserire l'abilitazione della funzione wake quando l'interfaccia di rete viene tirata su. Per fare questo si può inserire l'istruzione ethtool -s eth0 wol g direttamente in /etc/network/interfaces. Ad esempio:

auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.1

diventa

auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.1
        up ethtool -s eth0 wol g

Notare l'aggiunta della direttiva up per l'interfaccia eth0

Conclusioni

La tecnologia Wake-On-Lan si può rendere utile solo nei rari casi in cui si disponga di una LAN con postazioni molto distanti tra loro, tuttavia in tali situazioni si rivela una risorsa davvero preziosa che può aiutare tra le altre cose a risparmiare energia, spegnendo i computer non usati "perchè tanto poi ...".



Virtual DarKness 16:58, Giu 23, 2005 (EDT)