How to get Wake-on-LAN (WOL) to work in Fedora Core

Recently I've been wrestling with WOL for one of my linux servers. I found a WOL client called etherwake, which installs just fine in OpenDebianSlug using the command apt-get install etherwake.

However, I found that I was having problems on the other end. I noticed that if I switch off the computer using the front power switch at the GRUB boot menu, I could wake the machine using etherwake, whereas if I use shutdown -h now from within linux, nothing happens. The tell-tale sign is that the port light on my 3Com router/switch is lit in the first instance, and dark in the second.

A bit of googling around suggested that this is a common problem. The explanation was something along the lines of "linux shuts down your network card on OS shutdown". (For the pedantic, this should be rephrased as "most linux distributions shutdown the network card on shutdown"). The Gentoo Wiki's page on WOL suggested removing the -i option from halt.

Starting from this, I managed to get my machine to shutdown and be WOL'able!

Server config

My machine is running Fedora Core 4, though these change would likely work for other versions of Fedora and Redhat/CentOS. I changed the script /etc/init.d/halt so that the last few lines were changed from

 HALTARGS="-i -d"
 [ -f /poweroff -o ! -f /halt ] && HALTARGS="$HALTARGS -p"

 exec $command $HALTARGS

to

HALTARGS="-d"
[ -f /poweroff -o ! -f /halt ] && HALTARGS="$HALTARGS -p"

/usr/sbin/ethtool -s eth0 wol g
sleep 5 # this pause seems to be important!

exec $command $HALTARGS

Note the removal of -i from HALTARGS and the extra ethtool invocation before the last exec command.

Client config

This is the easy part. I created a file called /etc/ethers to map names to my MAC addresses:

00:20:ED:5A:00:2B fried
00:11:09:24:1C:8B white

Now to wake up fried, all I need to do is type the following command:

sudo etherwake fried

and fried.rice wakes up!

Last modified: 30.v.2006