Setting Up Wake On LAN in Ubuntu
Wake On LAN (WOL) allows you to turn on the computer from another device in the same network.
Determining Network Interface Card (NIC) name
sudo lshw -c network
Under the Ethernet Interface
copy the logical name
.
Enabling WOL in the BIOS
Using Integrated NIC
In the BIOS enable "Wake up on PCI event", "Wake up on LAN" or similar option.
Using Non-Integrated NIC
In the BIOS enable the option to allow USB and/or PCI devices to wake-up the computer.
Determining WOL support in NIC
sudo ethtool <name>
where <name>
is the logical name
you copied.
The output would contain a line similar to Supports Wake-on: <letters>
where <letters>
contains the letter g
, the NIC should support the WOL Magic Packet.
Enabling WOL in the NIC
The above output would also contain a line similar to Wake-on: <letters>
and if <letters>
contains g
and not d
, then Magic Packet is enabled. However, if
sudo ethtool -s <name> wol g
Enabling WOL on every boot
Find the path to ethtool
running the following and copy the output.
sudo which ethtool
Create a file named wol.service
at /etc/systemd/system/
.
sudo nano /etc/systemd/system/wol.service
Paste the following
[Unit]
Description=Enable Wake On Lan
[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s <name> wol g
[Install]
WantedBy=basic.target
Ctrl+S
to save and Ctrl+X
to exit.
Restart and enable the service.
sudo systemctl daemon-reload
sudo systemctl enable wol.service
Check whether the service is running.
systemctl status wol
Testing WOL
Installing gWakeOnLan
Download gwakeonlan
on a different computer running Ubuntu or use WSL.
Navigate to the downloads folder and run
sudo dpkg -i ~/<downloads>/<filename>.deb
where <downloads>
is the folder with the downloaded file and <filename>
is the name of the file.
Finding MAC address
To find the MAC address of the target computer run
ip addr show
Against your NIC name you should find a sequence of the format FF:FF:FF:FF:FF:FF
. Copy this.
Listening for the MagicPacket
On the computer you want to turn on, run the following
sudo tcpdump -UlnXi <name> ether proto 0x0842 or udp port 9 2>/dev/null | grep -P '((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\.(?!$)|$)){4}'
where <name>
is the name of the NIC. You should see 1 line of output per Magic Packet received with IP address of the device sending the packet.
Note: If your router supports sending Magic Packets you can send it on startup of the router and skip the following.
Setting up WOL on ESPHome
Paste the following to you ESPHome's yaml
file.
Adding a Button
# HA Server
button:
- platform: wake_on_lan
id: "start_server"
name: "Start the Server"
target_mac_address: <MAC>
where <MAC>
is the MAC address of the computer you want to turn on.
Configuring ESPHome to press the button on Startup
esphome:
# ...
on_boot:
priority: 800
then:
- wait_until:
wifi.connected:
- button.press: "start_server"
where ...
represents additional configuration you may already have.
Save and install the code.
You can now test by listening for the Magic Packet by pressing the button manually and then by turning off and on both the server and ESPHome (turn off and on the main supply).