ubuntu, systemd, Wily Werewolf, notebook, battery power drain
In some cases, Wake on LAN is enabled by default and you cannot disable it in your BIOS/UEFI because the setting is not available. On notebooks/ultrabooks, WOL can drain/discharge your battery even your device is powered-off!
There are a several guides out there, which didn’t even work. The general mistake is, that the WOL settings can only be changed as root user. Additionally they have to change on every system boot! Therefore you need a simple startup script which will do the job.
Note: this guide in only valid for Ubuntu >= 15 with systemd enabled!
Identify your network interfaces#
First of all, run
ifconfig as normal user. The output will look like this:
andi@epic:/home/andi# ifconfig enp0s25 Link encap:Ethernet HWaddr .... lo Link encap:Local Loopback ... wlp6s0 Link encap:Ethernet HWaddr 0 ...
In this case, the wired-interface is enp0s25 (this will deviate from your setup!). Normally the device-name starts with eth – e.g. eth0, eth1.
Check the current WOL State#
As root user or with sudo privileges run the following command to obtain the current WOL state of the device. Run
root@epic:/home/andi# ethtool enp0s25 Settings for enp0s25: 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 Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Speed: Unknown! Duplex: Unknown! (255) Port: Twisted Pair PHYAD: 2 Transceiver: internal Auto-negotiation: on MDI-X: Unknown (auto) Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000007 (7) drv probe link Link detected: no
In this case, “Wake-on: g” means that WOL is enabled for incomming MagicPakets – “d” would mean that it is already disabled.
Create a systemd Startup Service#
Create a file named wol.service in /etc/systemd/system/ with your favourite text-editor, e.g. nano and add the following content:
[Unit] Description="Disable WOL" [Service] Type=oneshot ExecStart=/sbin/ethtool -s <devicename> wol d [Install] WantedBy=multi-user.target
The placeholder <devicename> has to be replaced by the identified interface name.
Enable the Service#
systemctl enable wol.service – it will enable the service file
Reboot Your System for Verification!#
ethtool <devicename> again. Now it should show the “d” flag for “Wake-on”. This indicated that WOL is disabled for this interface! FOREVER.
root@epic:/home/andi# ethtool enp0s25 Settings for enp0s25: .... Transceiver: internal Auto-negotiation: on MDI-X: Unknown (auto) Supports Wake-on: pumbg Wake-on: g ....