Um einen PC mittels W(ake)O(n)L(an) zu starten, muss die Netzwerkkarte diesen Modus beherrschen und entsprechend konfiguriert sein. Manche BIOSse bieten hierfür eine Konfigurationsmöglichkeit, ebenso kann dies auch auf der Kommandozeile mit ethtool geschehen.

Zunächst benötigt man den Namen des Netzwerkdevices, welches man u. a. wie folgt ermitteln kann:

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 44:37:e6:87:87:98 brd ff:ff:ff:ff:ff:ff
    altname eno1
    altname enp0s25

In diesem Beispiel wäre eth0 das Netzwerkdevice, welches im weiteren beispielhaft genutzt wird. Auf eisfair werden auch von udev vergebene Devicenamen nach dem Schema enx<mac> also z. B. enx1257a68bc79a benutzt.

Die aktuellen Einstellungen der Netzwerkkarte werden mittel ethtool ermittelt:

# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Auto-negotiation: on
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        MDI-X: on (auto)
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

Die Zeile Wake-on: g zeigt an, dass die Karte auf WakeOnLan über MagickPacket konfiguriert ist, was die übliche Vorgehensweise darstellt. Wäre WOL deaktiviert, würde dies durch Wake-on: d angezeigt.

Folgende Modi für die Wake-on-Option sind möglich:

wol p|u|m|b|a|g|s|f|d...
   Sets 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™
   s   Enable SecureOn™ password for MagicPacket™
   f   Wake on filter(s)
   d   Disable (wake on nothing).  This option
       clears all previous options.

Die gewünschte Wake-on-Option wird mit ethtool gesetzt, z. B.:

ethtool -s eth0 wol g

Wie ich selbst feststellen musste, gibt es Netzwerkkarten/Mainboards, die die Wake-on-Option nach jedem Boot wieder auf deaktviert zurücksetzen. Hier hilft dann eine Systemd-Unit, die einmalig nach dem Boot aktiv wird und den gewünschten Modus wieder herstellt. Hierzu legt man in /etc/systemd/system eine Datei z. B. mit dem Namen wol.service und folgendem Inhalt ab:

[Unit]
Description=Configure Wake-up on LAN
After=ip-eth.service

[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s eth0 wol g

[Install]
WantedBy=basic.target

Nun gilt es noch diese Unit dauerhaft zu aktivieren:

# service daemon-reload
# service enable wol
# service start wol

Hat man mehrere Netzwerkkarten im Server, kann mit einer „Wildcard“-Unit gearbeitet werden. Diese erhalten am Ende des Unit-Namens ein „@“, also würde in unserem Beispiel wol@.service heißen. Im Unitfile wird anstelle der direkten Angabe des Netzwerkdevices der Platzhalter %i angegeben:

[Unit]
Description=Configure Wake-up on LAN on %i
After=ip-eth.service

[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s %i wol g

[Install]
WantedBy=basic.target

Wenn nun eine solche Systemd-Unit genutzt werden soll, ist hinter dem @ das Netzwerkdevice anzugeben:

# service daemon-reload
# service enable wol@eth0
# service start wol@eth0

Soll der Server über verschiedene Netzwerkkarten aufgeweckt werden können, wiederholt man die Unitaktivierung für eine weitere Netzwerkkarte, z. B.:

# service daemon-reload
# service enable wol@eth1
# service start wol@eth1

Hinweis: Der Befehl service daemon-reload ist nicht notwendig, wenn vor jedem anderen service-Befehl service enable … ausgeführt wird.