[[Vorlage(Getestet, focal, jammy)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Bearbeiten von Paketquellen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Rechte: Rechte für Dateien und Ordner ändern] }}} [[Inhaltsverzeichnis()]] 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. [[Anker( eth0 ) ]] {{{#!vorlage 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: [[Vorlage(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 {{{#!vorlage Paketinstallation ethtool }}} nachinstalliert[1] werden muss. Mit '''ethtool''' können die Parameter und Einstellungen von Netzwerkkarten ausgelesen und verändert werden. Über den Befehl ([#eth0 hier beispielhaft: eth0]) {{{#!vorlage 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:Man-Page] zu ethtool. {{{#!vorlage Befehl 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 ([#eth0 hier beispielhaft: eth0]) {{{#!vorlage Befehl 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 ([#eth0 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 {{{#!vorlage Befehl sudo systemctl enable wol.service }}} aktiviert. Der Befehl {{{#!vorlage 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 === {{{#!vorlage 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 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 = {{{#!vorlage 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 [wikipedia:MAC-Adresse: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 ([#eth0 hier beispielhaft: eth0]) {{{#!vorlage 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 {{{#!vorlage Paketinstallation etherwake, universe }}} welches einfach über die Paketverwaltung installiert[1] werden kann. Der Aufruf erfolgt im Terminal[3] mit ([#eth0 hier beispielhaft: eth0]): {{{#!vorlage Befehl # Allgemein sudo etherwake -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 {{{#!vorlage Paketinstallation wakeonlan, universe }}} = 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 [user:fx-83:]: Eine Datei '''/etc/rc0.d/K99wol_poweroff''' erstellen und ausführbar machen. Folgender Inhalt ([#eth0 hier beispielhaft: eth0]): {{{ #!/bin/sh ifconfig eth0 down poweroff }}} == Nforce-4 Chipsätze == {{{#!vorlage 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 [bug:288053:einen] [https://bugzilla.kernel.org/show_bug.cgi?id=6604 Fehler] {en} , der bewirkt, dass die MAC-Adresse beim Herunterfahren in der falschen Reihenfolge auf die Netzwerkkarte geschrieben wird. Mittels des Befehls {{{#!vorlage Befehl 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 {{{#!vorlage Befehl 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 [https://lists.debian.org/debian-kernel/2012/05/msg00123.html helfen] {en}, 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: {{{#!vorlage Befehl 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 {{{#!vorlage 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. {{{#!vorlage Befehl 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:[mark]00:08.0[/mark] }}} Man erkennt, dass WOL für alle Geräte ("devices") deaktiviert ist! Ein Vergleich der Device-Nummern mit {{{#!vorlage Befehl lspci }}} {{{ [...] [mark]00:08.0[/mark] 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 {{{#!vorlage Befehl 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 {{{#!vorlage Befehl 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:Systemd-Unit] aufzunehmen, so dass sie bei jedem Neustart des Systems ausgeführt wird. == NIC-Module bei SUSPEND nicht entladen == {{{#!vorlage 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/50modules'''ins 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 [http://www.vdrportal.de/board/thread.php?postid=848345 diesem] {de} Beitrag entnommen sind. Diese Anleitung bezieht sich auf [:GRUB_2:]. {{{#!vorlage Warnung 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: {{{#!vorlage Befehl sudo update-grub }}} Der Rechner sollte dann mit folgendem Befehl heruntergefahren werden: {{{#!vorlage Befehl grub-set-default PowerOff ; shutdown -r now }}} = Links = * [http://www.vdr-wiki.de/wiki/index.php/WAKE_ON_LAN Ausführliches Wake-on-LAN Wiki] {de} # tag: Netzwerk