wake up on lan unter openSUSE Linux

«-- zurück zur DL6MFJ Homepage


Ausnahmsweise etwas Computer-Literatur.

Zum Thema wake up on lan findet man vergleichsweise wenig Infos speziell für openSUSE. Und obwohl man mittels Yast so ziemlich alles zusammen klicken kann, findet sich dort nix für eine wol Einrichtung. Nachdem nun openSUSE 10.3 'raus ist und hier auf einen Testrechner läuft, galt es die wake on lan Funktionalität einzurichten. Schliesslich bieten Remote-Rechner interessante Möglichkeiten.
Bitte nicht vom langen Text abschrecken lassen. Das ganze beschränkt sich im wesentlichen darauf, eine 2-zeilige Skript(=Text)-Datei anzulegen und in einer bestehenden config-Datei eine Zeile anzuhängen.
Voraussetzungen:

- Auf dem einzuschaltenden Rechner ist openSUSE installiert und eine Ethernet Netzwerkkarte eingerichtet.
- Die Netzwerkkarte samt Treiber unterstützt wake on lan.
- Der Rechner unterstützt wake on lan.

Um heraus zufinden, ob die Netzwerkkarte bzw. der Treiber wol unterstützt, gibt man als root (oder mit sudo)

ethtool eth0

ein.
Wobei eth0 die Karte bezeichnet, die den Rechner einschalten soll. Bei mehreren NICs könnte es z.B. auch eth1 sein. Man erhält eine Ausgabe ähnlich dieser:

rechnername:~ # ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: g
        Current message level: 0x00000007 (7)
        Link detected: yes

Entscheidend ist die Zeile

Supports Wake-on: g

Wenn diese Zeile fehlt oder nach dem "Supports Wake-on:" kein Buchstabe kommt, kann die Karte und/oder der Treiber kein wol. Das "g" besagt, dass es ein "magic packet" als Weckruf entgegen nimmt. Es gibt auch noch andere Methoden z.B. auf physikalische Aktivität hin aufwachen, dann würden im obigen Beispiel nach dem "g" weitere Buchstaben folgen. Die Zeile danach (ohne das "Supports") zeigt die momentane Einstellung der Karte an. Mittels

ethtool -s eth0 wol g

kann man wake on magic packet einschalten. Den Befehl könnte man natürlich in ein Start-Skript einbauen. Das Dumme ist nur, dass openSUSE beim Herunterfahren alle Einstellungen wieder zunichte macht und die Karte wieder zurücksetzt - sicher ist eben sicher. Daher überreden wir das System am Schluss die NIC doch nochmal zu reaktivieren. Hierzu basteln wir ein kleines Skript, dass nach der Dekativierung der Karte aufgerufen wird und den Reaktivierungs-Befehl enthält. Das Skript sieht im einfachsten Fall so aus:

#!/bin/bash
/usr/sbin/ethtool -s eth0 wol g

Sinnvollerweise wird es in /etc/sysconfig/network/scripts gespeichtert. Als Name kann man "reactivate-wol-eth0" verwenden. Im Verzeichnis /etc/sysconfig/network/ findet sich für jede Netzwerkkarte ein config-Skript "ifcfg-ethX". Für das Beispiel nehmen wir entsprechend "ifcfg-eth0", öffnen das Skript mit einen Editor und fügen eine neue letzte Zeile hinzu:

POST_DOWN_SCRIPT=reactivate-wol-eth0

Wobei "reactivate-wol-eth0" das zuvor angelegte Skript bezeichnet (das Unterverzeichnis /scripts braucht nicht weiter angegeben zu werden). Die Beispiel ifcfg-eth0 sieht so aus:

BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='192.168.17.11/24'
MTU=''
NAME='Intel EtherExpress PRO/100 S Desktop Adapter'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
POST_DOWN_SCRIPT=reactivate-wol-eth0

An dieser Stelle empfiehlt es sich die MAC-Adresse des einzuschaltenden Rechners (ggf. ifconfig bemühen) zu notieren. Im Rechner-BIOS muss wake on lan aktiviert sein, ggf. in der Bootreihenfolge nach oben geschoben werden. Zwischen Netzwerkkarte und Mainbord muss i.d.R. ein wol-Kabel gesteckt sein (kurzes 3pol. Kabel mit kleinen Stecker). Hierzu die Dokumentation des Mainboards und der Karte zu Hilfe ziehen.
Soweit zur Konfiguration des einzuschaltenden Rechners.

Um den Rechner nun per Netzwerk einzuschalten, verwendet man "ether-wake" auf einen anderen Rechner.

ether-wake 11:22:33:AA:BB:CC

schaltet den Rechner mit der MAC-Adresse 11:22:33:AA:BB:CC mittels magic packet ein. Sollte ether-wake fehlen, mittels Yast das Paket "netdiag" nachinstallieren. Standardmässig geht der Befehl über das eth0 Interface raus. Mit

ether-wake -i eth1 11:22:33:AA:BB:CC

kann man das magic packet über eth1 weg schicken - sofern vorhanden. Man beachte, dass die magic packet Methode auf Layer2 statt findet, d.h. nicht per ip routebar ist. Falls man einen Rechner via Internet einschalten möchte, müssten Karte und Treiber das unterstützen und vorallem bräuchte man eine Adresse die auch im ausgeschalteten Zustand erreichbar, sprich statisch ist. Als Alternative kommen wake on ring/on modem/on serial in Frage.

Eigentlich wars das schon.

Noch in paar Anmerkungen, falls es geklappt hat:
Wenn man den Remote-Rechner -so wie ich- ausschließlich als solchen betreibt , braucht man weder Eingabe-Geräte noch Monitor ("halt on all erorrs" im BIOS deaktivieren, wenn das keyboard f hlt). Dann sollte man den Rechner so einstellen, dass er in den runlevel 3 bootet (also ohne grafischen Login). Trotzdem kann man dann bei Bedarf auf dem Remote-Rechner KDE starten und sich die Oberfläche mit kdfb/kdrc herholen und bedienen.
have fun

PS:
Ausschalten geht mit "halt" oder dem shutdown-Befehl nachdem man sich auf dem Remote-Rechner eingeloggt hat.



«-- zurück zur DL6MFJ Homepage