ubuntuusers.de

Wake on LAN

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


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.

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.

⚓︎

Hinweis:

Dieser Artikel verwendet für die Netzwerkschnittstelle stets beispielhaft den Namen eth0. Dies muss in allen Befehlen natürlich entsprechend angepasst werden.

Eine Liste der vorhandenen Adapter zeigt der Befehl:

ip link 

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.

Über den Befehl (hier beispielhaft: eth0)

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 (hier beispielhaft: eth0)

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.

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 (hier beispielhaft: eth0) zum Aktivieren von WOL ein:

[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

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 (hier beispielhaft: eth0)

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 (hier beispielhaft: eth0):

# Allgemein
sudo etherwake <mac-adresse> -i eth0
#Beispiel
sudo etherwake 00:0c:5e:17:23:7a -i eth0 

Standardmäßig wird davon ausgegangen, dass die Netzwerkschnittstelle als eth0 vorhanden ist, andernfalls wird die Meldung „SIOCGIFHWADDR on eth0 failed: No such device“ ausgegeben. Die Option -i mit angepasstem Namen darf also nicht fehlen.

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 (hier beispielhaft: eth0):

#!/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 

Diese Revision wurde am 30. Januar 2024 12:36 von manuels erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk