How to use Raspberry PI as WOL (wake on lan) server

While you could wake up your PC from a mobile directly, having a dedicated server capable of doing so is the best solution. The reason is simple. You can hook up as many devices as you wish with a single endpoint. This is why Raspberry Pi is perfect for this.

Having your PC wired comes with many benefits, one of which is having the WOL functionality. Waking your computer remotely can be a great solution if you are lazy, or you need to access it remotely without keeping a 1000W machine running 24/7. What if your PC is not wired and the WIFI card does not support WOL services? You can use a Raspberry PI as a WOL  (Wake on LAN) server. If you want to know how to connect your Raspberry PI to the PC, and assign a static IP you will find a guide here (if you not connected to the PC just yet) and here (if you are already connected).

I switched since to NodeRED based setup. This tutorial is completely relevant, but I would strongly encourage you, to give the NodeRED a go. Take a look at this post to see how to achieve the same functionality with NodeRED.

Raspberry PI as WOL (wake on LAN)

You will need:

  • Raspberry PI
  • WiFi adapter if you are using RPI2
  • Ethernet cable

The idea is to have your Raspberry PI running 24/7 instead, as it is more power-friendly, and act as a wake on LAN server. This way when the command is received by the RPI, it will use the ethernet connection to wake up the computer in question (or any compatible device on the network). Before you start, please make sure that your LAN adapter supports the WOL. You will find the settings in both Windows and BIOS  depending on the computer you use.

The process of waking up the PC is fairly simple, we are going to use:

sudo apt-get install etherwake

This will take care of our needs.

Using etherwake

To wake up a PC simply use:

etherwake -i eth0 AA:BB:CC:DD:EE:FF

The (-i) interface is specified to push the magic packet via a correct interface. We want to force it through the eth0 rather than wlan0.

To use the old interface names you have to enable the pre-Stretch naming via boot config file. If you trying this on Raspbian Stretch, please read this first.

etherwake Usage [spoiler]
etherwake Usage
ether-wake needs a single dash ('-') in front of options. A summary of options is included below.
Send the wake-up packet to the broadcast address.
Increase the Debug Level.
-i ifname
Use interface ifname.
-p passwd
Append a four or six byte password to the packet.
Show the program version information.

The AA:BB:CC:DD:EE:FF is the MAC address of the device you want to wake up. The WOL packet will be sent as a broadcast to all devices on the network. You can execute this line in terminal, or use a simple bash script to open instead, that will do this for you

echo "Going to wake up your PC''
sudo etherwake-i eth0 AA:BB:CC:DD:EE:FF

And save it as then run it with sudo permissions:

sudo bash /path/to/file/

Sending WOL command to the Raspberry PI as WOL

Now the hard part. First, we have to make sure the Raspberry PI has a static IP. Fear not, I already have a handy guide in here. Once you have the static IP with your router and the PC time to get the Raspberry PI visible outside of the network (skip this if you interested in WOL functionality over the local network only).


If you have a static IP, you can take a note of it, or go ahead and assign a DNS too. It will be easier to remember than a set of numbers. DNS is a more user-friendly representation of your external IP. So instead of connecting to 132.465.789.123  you are typing in something like

Using services like you can create your own free DNS name – which will point to the external address. Service is free, but have to be refreshed every 30 days, a small price to pay. Check your current IP (google: my IP) and create an account, setup a DNS name that is easy to remember. If you have a dynamic IP, you will have to update it. The will provide you with the tools and an auto-updater. IP is likely to change every few days or a router reboot.

Port forwarding

To get the information from the internet to your Raspberry, you have to tell the router which device you are trying to address. I will assume that you have not changed the SSH port number (22 by default). Log in to the router admin page (usually or similar) and find the port forwarding settings. You want to forward the port 22 to an IP that has been assigned to the WIFI interface. Each time we will try to communicate with your IP or DNS through the port 22, the router will send us to the Raspberry PI.

Sending the WOL command

Here you have few choices, obviously, you can log into the terminal, and issue the command manually or run the script (which also needs a command). From the mobile, you could use a JuiceSSH app that lets you do the same thing but from the mobile. You can also use Tasker to issue the command to Raspberry PI as WOL. Tasker plugins AutoTools and AutoRemote will let you do this with a press of the button, or link a more specific trigger. There is also a full guide here that explain how to connect AutoRemote and AutoTools to a Raspberry PI.

Tasker profile

You can use AutoRemote or AutoTools  (or any other SSH client, that integrates with Tasker) to issue the command to the Raspberry Pi. The trigger is up to you really. You can link it to a button, you could use a voice command etc. Your imagination is the limit. I will show you how to wake up your PC from a local network and a remote location based on what network you are connected to.

Wake up task
Wake up PC (24)
	A1: AutoTools SSH [ Configuration:Server:
Port: 33
Username: pi
Password: *******
Command: sudo etherwake -i eth0 00:00:00:00:00
Command Variable: atsshresult Timeout (Seconds):60 ] If [ %Location !~ Home ]
	A2: AutoTools SSH [ Configuration:Server:
Port: 33
Username: pi
Password: *******
Command: sudo etherwake -i eth0 00:00:00:00:00
Command Variable: atsshresult Timeout (Seconds):60 ] If [ %Location ~ Home ]

The profile contains an AutoTool SSH action set up for the local network if we are connected to the local SSID, and the DNS name if the task is triggered from outside of your network. I already have a profile that assigns my %Location to a variable. So whenever I’m connected to my home WIFI – I’m home otherwise I’m not. This will decide if the SSH WOL command is sent via local IP or a DNS.

Support NotEnoughTech
A lot of time and effort goes into keeping NotEnoughTech alive! If my work helped you out, consider buying me a coffee or check out exclusive rewards available to Patreon supporters.