Wake on LAN
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Mit Wake-ON-LAN (WOL) ist es möglich einen Rechner im lokalen Netzwerk (LAN) ferngesteuert einzuschalten. Dies erfolgt meist durch das Versenden eines sogenannten Magic Packet.
Zum Wecken braucht man einen zweiten Rechner mit einem Programm, das ein "Magic Packet" erzeugt und an die MAC-Adresse der Netzwerkkarte des aufzuweckenden Rechners schickt. Auch beherrschen einige handelsüblichen Router diese Funktion. Damit WOL funktioniert, muss der Rechner dafür vorbereitet werden. Sowohl im BIOS als auch im System müssen die richtigen Einstellungen vorgenommen werden.
WOL im BIOS aktivieren¶
Im ersten Schritt sollte man im BIOS des Rechners überprüfen, ob Wake-On-LAN überhaupt aktiviert ist. Die in Rechnern verbauten BIOS-Arten sind zu vielfältig, um detaillierte Tipps geben zu können. Doch unter den Bezeichnungen "Wake on LAN" oder "Power on PCI/PCIE Devices" sollte man fündig werden.
Eventuell muss man auch einen Schraubendreher in die Hand nehmen. Ältere PCI-Netzwerkkarten wurden oft mit einem kleinen Kabel mit dem Mainboard verbunden. Fehlt dieses Kabel, so geht eventuell WOL gar nicht. Moderne PCI-Netzwerkkarten brauchen dieses Kabel nicht mehr. Auf dem Mainboard integrierte Netzwerkadapter benötigen das Kabel mit Sicherheit ebenfalls nicht.
Ubuntu für WOL vorbereiten¶
Die meisten Kernelmodule für Netzwerkkarten aktivieren beim Hochfahren Wake-On-LAN nicht. Dieses muss extra nach oder während des Starts des Systems durchgeführt werden. Dies geschieht über das Programm ethtool, das erst über das Paket
ethtool
Befehl zum Installieren der Pakete:
sudo apt-get install ethtool
Oder mit apturl installieren, Link: apt://ethtool
nachinstalliert [1] werden muss. Mit ethtool können die Parameter und Einstellungen von Netzwerkkarten ausgelesen und verändert werden.
Hinweis:
Im Laufe des Wikis wird nur das Gerät "eth0
" behandelt. Sollte man ein anderes Netzwerkgerät zu Wake-On-LAN benutzen wollen, so müssen die Befehle natürlich entsprechend angepasst werden.
Eine Liste der vorhandenen Adapter kann man sich mit dem Befehl
ip link
anzeigen lassen.
Über den Befehl
sudo ethtool eth0
Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full [...] Auto-negotiation: on Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000001 (1) Link detected: yes
im Terminal [3] bekommt man angezeigt, wie die Optionen derzeit gesetzt sind. Besonders die Zeilen "Supports Wake-on" und "Wake-on" sollte man hier im Auge behalten. Die Bedeutung der einzelnen Buchstaben findet man in der Man-Page zu ethtool.
man ethtool
[...] wol p|u|m|b|a|g|s|d... Set Wake-on-LAN options. Not all devices support this. The argument to this option is a string of characters specifying which options to enable. p Wake on phy activity u Wake on unicast messages m Wake on multicast messages b Wake on broadcast messages a Wake on ARP g Wake on MagicPacket(tm) s Enable SecureOn(tm) password for MagicPacket(tm) d Disable (wake on nothing). This option clears all previous options. [...]
Mittels des Befehls
sudo ethtool -s eth0 wol g
aktiviert man nun das Wake-On-LAN beim Eintreffen eines "MagicPacket". Allerdings überdauert diese Einstellung einen Neustart des Rechners nicht. Sie muss bei jedem Start des Rechners neu gesetzt werden.
WOL dauerhaft aktivieren¶
Um diese Einstellung bei jedem Start des Rechners zu setzen, bieten sich verschiedene Wege an. Am einfachsten und zuverlässigsten ist sicherlich die erstgenannte Methode.
Methode 1: systemd Netzwerkkonfiguration¶
Mit Erstellung einer Konfigurationsdatei /etc/systemd/network/50-wired.link lässt sich Wake-On-LAN aktivieren. Man trägt mit einem Editor mit Root-Rechten [4] die Zeilen:
[Match] MACAddress=aa:bb:cc:dd:ee:ff [Link] NamePolicy=kernel database onboard slot path MACAddressPolicy=persistent WakeOnLan=magic
Wobei aa:bb:cc:dd:ee:ff durch die MAC-Adresse der Netzwerkkarte ersetzt werden muss und kernel database onboard slot path durch den Bezeichner des Netzerk-Interfaces, den man mit ifconfig bekommt (z.B. enp3s0).
Methode 2: systemd Service¶
Mit Erstellung einer Konfigurationsdatei /etc/systemd/system/wol.service lässt sich Wake-On-LAN aktivieren. Man trägt mit einem Editor mit Root-Rechten [4] die Zeilen:
[Unit] Description=Configure Wake-up on LAN After=network-online.target [Service] Type=oneshot ExecStart=/sbin/ethtool -s eth0 wol g [Install] WantedBy=basic.target
zum Aktivieren von WOL ein.
Anschließend wird der Service mit
sudo systemctl enable wol.service
aktiviert. Der Befehl
sudo systemctl daemon-reload
veranlasst systemd dazu, alle Konfigurationsdateien neu zu laden und alle Units neu zu starten.
Weitere Informationen finden sich im entsprechenden Wiki Artikel zu systemd.
Methode 3: /etc/network/interfaces¶
Hinweis:
Seit Ubuntu "Intrepid Ibex" 8.10 ist die /etc/network/interfaces üblicherweise bis auf das loopback-Device "lo" leer. Der Network-Manager übernimmt bei einer Desktop-Installation vollständig die Verwaltung der Netzwerke. Daher bietet sich hier besonders die erste Methode an, da es keine graphische Oberfläche mehr gibt, um die interfaces Datei zu bearbeiten.
Hier ist ebenfalls mit Root-Rechten [4] die Datei /etc/network/interfaces zu bearbeiten. Für jedes Interface, auf dem Wake-On-Lan aktiviert werden soll, muss die Zeile pre-down /usr/sbin/ethtool -s <netzwerkdevice> wol g
ergänzt werden. Ein so konfiguriertes Netzwerkgerät sieht dann beispielsweise so aus:
auto eth0 iface eth0 inet static address 192.168.0.97 netmask 255.255.255.0 gateway 192.168.0.1 pre-down /usr/sbin/ethtool -s eth0 wol g
Dabei ist zu beachten, dass manuell über die /etc/network/interfaces konfigurierte Netzwerk-Geräte nicht mehr im Network-Manager erscheinen. Diese Konfiguration bietet sich daher im Endeffekt nur für Serversysteme an.
halt-Skript anpassen (ab Ubuntu 20.04 nicht mehr notwendig/möglich)¶
Unglücklicherweise reicht das noch nicht aus, damit der Rechner wieder aufwacht. Schuld daran ist das Skript /etc/init.d/halt, das beim Herunterfahren des Systems ausgeführt wird. Es schaltet von Haus aus alle Netzwerkschnittstellen aus und macht damit die bisherige Arbeit wieder zunichte.
Um das Deaktivieren der Netzwerkkarten beim Herunterfahren zu verhindern, öffnet man die Datei /etc/default/halt in einem Editor mit Root-Rechten [4] und fügt die Variable "NETDOWN" mit dem Wert "no" ein:
NETDOWN=no
Danach bleiben die Karten aktiviert. Änderungen des Init-Skriptes "/etc/init.d/halt" werden bei Ubuntu-Updates überschrieben!
WOL nach Standby oder Suspend¶
Wer seinen Rechner nicht richtig herunterfährt, sondern lediglich Standby oder den Ruhezustand benutzt, der stellt eventuell fest, dass WOL nach dem Tiefschlaf nicht funktioniert. Hier hilft es, WOL wie oben beschrieben einzurichten und anschließend in der Datei /etc/default/acpi-support die Option
# Add services to this list to stop them before suspend and restart them in # the resume process. STOP_SERVICES=""
um den Eintrag networking zu erweitern, so dass die Option danach so
# Add services to this list to stop them before suspend and restart them in # the resume process. STOP_SERVICES="networking"
aussieht. Eventuell stehen hier schon andere Einträge. Hier muss man "networking" mit einem Leerzeichen abgetrennt einfügen. Welche weiteren Einträge dort vorhanden sind, hängt von den auf dem System installierten Programmen ab - die Zeile sieht beispielsweise so STOP_SERVICES="mysql lirc networking" aus.
Aufwecken¶
Hinweis:
Das Aufwecken eines Rechners ist nur innerhalb des eigenen lokalen Netzwerkes möglich, da die "Magic Packets" nicht routingfähig sind. Es ist daher nicht möglich, einen Rechner direkt über das Internet aufzuwecken. Möchte man dies tun, so benötigt man einen Router oder Rechner im LAN, den man vom Internet aus erreichen kann. Manche Hardware-Router bieten in ihren Web-Frontends sogar Wake-On-LAN-Funktionen an.
Hat man dies alles gemacht, kann man den zu weckenden Rechner herunterfahren. Von einem zweiten Rechner im lokalen Netzwerk aus kann man versuchen, den Rechner aufzuwecken. Dazu benötigt man die MAC-Adresse des aufzuweckenden Rechners. Man findet sie beispielsweise auf der Netzwerkkarte oder eventuell auf der Rückseite des Rechners. Alternativ kann man sie über den Befehl
ifconfig eth0 | grep "Hardware Adresse"
eth0 Link encap:Ethernet Hardware Adresse 00:0c:5e:17:23:7a
herausfinden. Die MAC-Adresse wäre in diesem Fall die Zeichenfolge "00:0c:5e:17:23:7a". Zum Aufwecken stehen verschiedene Programme zur Verfügung.
etherwake¶
Für Ubuntu gibt es ein Programm im Paket
etherwake (universe )
Befehl zum Installieren der Pakete:
sudo apt-get install etherwake
Oder mit apturl installieren, Link: apt://etherwake
welches einfach über die Paketverwaltung installiert [1] werden kann. Der Aufruf erfolgt im Terminal [3] mit
# Allgemein sudo etherwake <mac-adresse> #Beispiel sudo etherwake 00:0c:5e:17:23:7a
wakeonlan¶
Mit diesem Befehl ist es komfortabler möglich, verschiedene Rechner per LAN aufzuwecken. Unter anderem lassen sich die Hardwareadressen in Dateien speichern. Das benötigte Paket [1] heißt
wakeonlan (universe )
Befehl zum Installieren der Pakete:
sudo apt-get install wakeonlan
Oder mit apturl installieren, Link: apt://wakeonlan
Problemlösungen¶
Selbst wenn man all diese Einstellungen vorgenommen hat, kann man über eine Reihe von Problemen stolpern. Im Folgenden sind weitere Problemlösungen gesammelt. Man sollte diese nicht wahllos durchprobieren und "eingebaut" lassen, sondern die einzelnen Tipps nach und nach probieren. Einige der genannten Tipps haben Nachteile, wie z.B. das Deaktivieren des modernen Stromsparmechanismus ACPI zugunsten des veralteten APMs.
BCM5723-Chipsatz¶
Bei einer Broadcom NetXtreme Netzwerkkarte mit dem BCM5723-Chipsatz, Treibermodul: tg3 Version 3.128 funktioniert folgender Weg lt fx-83: Eine Datei /etc/rc0.d/K99wol_poweroff erstellen und ausführbar machen. Folgender Inhalt:
#!/bin/sh ifconfig eth0 down poweroff
Nforce-4 Chipsätze¶
Hinweis:
Die umgekehrte MAC-Adresse kommt nur vor, wenn man den Rechner "richtig" heruntergefahren hat. Fährt man den Rechner in den Standby- oder Ruhezustand, so kann er nur mit der MAC-Adresse in der richtigen Reihenfolge geweckt werden.
Im Kernel gibt es einen Fehler 🇬🇧 , der bewirkt, dass die MAC-Adresse beim Herunterfahren in der falschen Reihenfolge auf die Netzwerkkarte geschrieben wird. Mittels des Befehls
lsmod | grep forcedeth
forcedeth 68112 0
findet man heraus, ob die eigene Hardware diesen Treiber benutzt. Wer nun Hardware besitzt, die den forcedeth-Treiber verwendet, und das Aufwecken über die "richtige" MAC nicht klappt, kann man versuchen, seine MAC-Adresse verkehrt herum einzugeben. Also statt 01:02:03:04:05:06 dreht man die Folge um: 06:05:04:03:02:01.
3c905c Chipsatz¶
Netzwerkkarten mit dem 3C905C Chipsatz von 3Com brauchen eine Option, die beim Laden des Kernelmoduls "3c59x" geladen werden muss. Dazu fügt man [4] in der Datei /etc/modprobe.d/options die Zeile
options 3c59x enable_wol=1
ein und startet den Rechner neu. Ob solch eine Netzwerkkarte im eigenen Rechner verbaut ist, kann man mittels
lsmod | grep 3c59x
3c59x 46248 0 mii 6400 1 3c59x
überprüfen. Sollte die Ausgabe leer sein, so wurde das Kernelmodul nicht geladen. Daher wird auch keine Netzwerkkarte im Rechner verbaut sein, die solch einen Chipsatz benutzt.
Marvell Yukon (Modul "sky2")¶
Bei diesem Ethernetadapter kann es helfen 🇬🇧, den Modul-Parameter "legacy_pme" auf "1" zu setzen. Der Parameter wurde ist jedoch erst ab Kernel 3.2.14-1 vorhanden. Dazu muss dem Kernel der Parameter
sky2.legacy_pme=1
übergeben werden. Alternativ ist auch ein Eintrag in modprobe.d möglich:
sudo sh -c 'echo "options sky2 legacy_pme=1" >> /etc/modprobe.d/sky2.conf'; sudo update-initramfs -u
Kernel-Parameter¶
Bei diversen Serversystemen hilft es, auf ACPI zu verzichten und APM zu benutzen (z.B.: HP Server tc2110). Dazu bearbeitet man die Datei /boot/grub/menu.lst mit einem Editor mit Root-Rechten [4] und fügt in der Zeile mit den "defoptions" die Kernel-Parameter "apm=on apm=power-off" hinzu. Die Zeile
[...] # defoptions=quiet splash language=de_DE [...]
muss dann beispielsweise so
[...] # defoptions=quiet splash language=de_DE apm=on apm=power-off [...]
aussehen. Damit diese Optionen in die Kernelzeilen geschrieben werden, muss noch der Befehl
sudo update-grub
ausgeführt werden. Nun sollte man den Rechner neu starten und Wake-On-LAN testen.
/proc/acpi/wakeup¶
Sollte WOL nach wie vor nicht funktionieren, so kann man sich den Inhalt der "virtuellen" Datei /proc/acpi/wakeup ansehen.
cat /proc/acpi/wakeup
Device S-state Status Sysfs node HUB0 S5 disabled pci:0000:00:06.0 XVR0 S5 disabled pci:0000:00:0f.0 [...] AZAD S5 disabled pci:0000:00:06.1 MMAC S5 disabled pci:0000:00:08.0
Man erkennt, dass WOL für alle Geräte ("devices") deaktiviert ist! Ein Vergleich der Device-Nummern mit
lspci
[...] 00:08.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a2) [...]
lässt hier die Zugehörigkeit von MMAC zum kabelgebundenen Netzwerkinterface erkennen. Zum Testen aktiviert man mittels des Befehls
echo -n MMAC | sudo tee /proc/acpi/wakeup
WOL für das gerade herausgefundene Gerät. Auf dem eigenen Rechner muss man die Angabe des "device" sicherlich anpassen. Den Erfolg kann man nun mittels
cat /proc/acpi/wakeup
Device S-state Status Sysfs node [...] MMAC S5 enabled pci:0000:00:08.0 [...]
überprüfen. Sollte ein Wake-On-LAN nun funktionieren, so bietet es sich an, die Zeile
echo -n MMAC | tee /proc/acpi/wakeup
in eine Systemd-Unit aufzunehmen, so dass sie bei jedem Neustart des Systems ausgeführt wird.
NIC-Module bei SUSPEND nicht entladen¶
Hinweis:
Dies gilt für Ubuntu 8.04 und eventuell auch spätere Versionen! Das ist ein Workaround, der überprüft werden muss.
Die Datei /usr/lib/pm-utils/sleep.d/50modulesins Verzeichnis /etc/pm/sleep.d/ kopieren. Dadurch wird nicht mehr der pm-utils-Hook aus /usr/lib/pm-utils/sleep.d/ sondern der angepasste aus dem Verzeichnis /etc/pm/sleep.d/. Ausserdem wird dadurch das angepasste Skript nicht beim nächsten Update des Pakets pm-utils durch die Standard-Version ersetzt.
sudo cp /usr/lib/pm-utils/sleep.d/50modules /etc/pm/sleep.d/ sudo chmod +x /etc/pm/sleep.d/50modules
Im Skript /etc/pm/sleep.d/50modules den Inhalt der Funktion unload_network() kommentieren. Das sollte so aussehen:
unload_network() { # for x in /sys/class/net/*; do # if [ -e $x/device/driver ]; then # NETMODULES="$NETMODULES $(basename $(readlink $x/device/driver) | tr [:upper:\] [:lower:])" # fi # done # for x in $NETMODULES; do # modunload $x; # done # if [ -d /sys/module/ndiswrapper ]; then # modunload ndiswrapper; # fi }
Anschließend sollte WOL funktionieren!
Für ältere Versionen von Ubuntu, müsste eine Datei 60-generate-modules-list.sh und 55-down-interfaces.sh unter /etc/acpi/sleep.d/ sein, welche wahrscheinlich das gleiche tut. Konnte ich bis jetzt aber nicht testen!
Neustart als provisorische Lösung¶
Möglicherweise lässt sich der Rechner trotz allem nicht aufwecken, wenn er aus Ubuntu/Linux heraus heruntergefahren wurde. In manchen Fällen befindet sich der Computer aber in einem aufweckbaren Zustand, wenn er aus einem anderen Betriebssystem oder aus dem Bootloader heraus heruntergefahren wurde. In diesem Fall hilft es nach jedem Linux-Herunterfahren einmal kurz neu zu starten und wieder aus zu schalten. Dies lässt sich bequem über die folgenden Befehle erledigen, die diesem 🇩🇪 Beitrag entnommen sind. Diese Anleitung bezieht sich auf GRUB 2.
Achtung!
Bei Änderungen am Bootloader sollte man immer mit Bedacht vorgehen und Sicherheitskopien anlegen.
Zunächst muss ein neuer Boot-Eintrag erstellt werden. Dazu wird die Datei /etc/grub.d/40_custom wie folgt angepasst:
#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry "PowerOff" { saved_entry=0 save_env saved_entry halt }
In der /etc/default/grub muss folgende Zeile angepasst werden:
GRUB_DEFAULT=saved
Nach jeder Änderung an der Datei /etc/default/grub muss die Grubkonfiguration aktualisiert werden:
sudo update-grub
Der Rechner sollte dann mit folgendem Befehl heruntergefahren werden:
grub-set-default PowerOff ; shutdown -r now
Links¶