Enable WOL on Ubuntu (HP Microserver build)



Out of the box I tend to find WOL under Ubuntu will not work, despite WOL being enabled in a PC's BIOS. The way I've often resolved this is to install ethtool which allows the querying settings of an ethernet device and the changing of settings. Read on...

To install ethtool either use the Ubuntu package manager or manually run:
sudo apt-get install ethtool

Then query your ethernet device to check it supports WOL :
sudo ethtool eth0 

If you see "Supports Wake-on: g" then you're supported

To enable WOL you will likely need to stick the following line into your /etc/rc.local file, this sets up the ethernet card to respond to WOL magic packets. The command does not appear to be persistent hence it needs to be run as part of every boot:
sudo ethtool -s eth0 wol g


Updated March 2012: As per rokafeller's comment below WOL can work on the Microserver under Ubuntu (10.04, 10.10 and 11.10, not sure about 11.04) with some simple tweaking. To get WOL to work the ethernet interface must be properly brought down as part of the system shutdown. This should be performed as part of run levels rc0 and rc6, noting that Linux typically has 7 different run levels (or operating modes):
  • rc0.d - System Halted
  • rc1.d - Single User Mode
  • rc2.d - Single User Mode with Networking
  • rc3.d - Multi-User Mode - boot up in text mode
  • rc4.d - Not yet Defined
  • rc5.d - Multi-User Mode - boot up in X Windows
  • rc6.d - Shutdown & Reboot
A simple script can be created to bring the ethernet interface down properly at shutdown:
sudo vi /etc/rc6.d/K99wol_poweroff


It may contain:
#!/bin/bash
ifconfig eth0 down
poweroff



Change the script's permissions to make it executable:

sudo chmod 755 /etc/rc6.d/K9ls /etc/rc0.d/K99wol_poweroff


Copy the script to work on system halt as well:

sudo cp /etc/rc6.d/wol_poweroff.sh /etc/rc0.d/K99wol_poweroff


Change permissions to make it executable:

sudo chmod 755 /etc/rc0.d/K99wol_poweroff


Job done. 


To test power down the machine, sudo shutdown now or sudo poweroff , and use your favourite WOL tool to send a magic packet. Thanks to rockafeller and everyone else who have commented with various solutions.

Note I've found in my case the script must start with K## where ## is the scripts priority number 99 means that it is one of the last script to run in the rc# directory.

Comment prior to the March 2012 update: Sadly on the HP Microserver this [working WOL] isn't currently the case. Wake On Lan has proven to be an issue on the Microserver despite making the appropriate setting changes I have been unable to get WOL working under *nix and have not been able to find anyone on the internet with a solution on people with similar issues.The Microserver uses a Broadcom BCM5732 ethernet chipset which uses the Broadcom maintained Tg3 drivers these are now the only drivers that Broadcom maintain for *nix.
It's apparent that this is a common issue for the BCM5732 under *nix, under Windows people are reporting success with WOL depending on the flavour of Windows. So it looks like I'll be hanging on for a driver update from Broadcom that will enable WOL under *nix.

37 comments:

  1. just stumbled across your post as I googled for help on the exact same topic (i.e. Ubuntu 11.04 on HP N36L microserver). Like you, I have no luck after making all the documented changes. :(

    ReplyDelete
  2. Please post back if you find a solution, Thanks

    Some people have reportedly managed to get this working on Ubuntu following this post. I've no idea as to why it works for some and not me.

    ReplyDelete
  3. What's odd on mine is that it was working fine, so I know Ubuntu 11.04 and it's driver supported it without any tweaking on my part, but it simply stopped working suddenly despite being enabled in the BIOS. Even stranger is that I have a second Microserver with an identical installation and it continues to wake up without issue.

    ReplyDelete
  4. Finally got it working in 11.10....

    I had to add this line to /etc/rc.local

    echo PCE6 > /proc/acpi/wakeup

    I also have NETDOWN=no in /etc/init.d/halt, not sure if this is needed, but probably.

    ReplyDelete
  5. Thanks will give that a try and report back.

    ReplyDelete
  6. Just wanted to say that I had hibernate working, then it stopped, but I added the two lines posted by Anonymous above and it is now working again so thanks for that!

    ReplyDelete
  7. Further to Finally got it working in 11.10...

    The final bug I found causing problems with wol is network-manager in Gnome.

    The solution (in addition to adding the lines three posts back), is to remove network-manager entirely and use a static IP address. Or you can install an alternative network manager like 'wicd' which doesn't interfere with wol.

    To remove network-manager:

    sudo apt-get --purge remove network-manager gnome-network-manager

    (sudo apt-get --purge remove modemmanager won't hurt either)

    To setup a static IP address, add your IP configuration choice to /etc/network/interfaces, for example:

    auto eth0
    iface eth0 inet static
    address 10.0.0.3
    netmask 255.255.255.0
    network 10.0.0.0
    broadcast 10.0.0.255
    gateway 10.0.0.2

    /etc/resolv.conf should have something like:

    nameserver 10.0.0.2
    (or possibly your ISPs nameservers)

    Make sure you have added the static ip address with your MAC address to the router (outside the DHCP range), then issue the following command to reload the network with the new IP address:

    sudo /etc/init.d/networking restart

    For WOL over the internet, configure your router to forward the WOL port (usually port 9 UDP) to your static IP address if you use NAT.

    If you use a firewall make sure that the same port is open too.

    Use http://wakeonlan.me to test.

    ReplyDelete
  8. Thanks for this, it's very helpful I've yet to play about with the fixes for this - as soon as I do I'll comment back.

    ReplyDelete
  9. I cannot get WOL to work at all. WOL is enabled in the BIOS and I've tired everything in this post. I've used a packet sniffer to check that the magic packet is reaching the server - it is.

    I wonder whether I need to update the NW device driver. I see there are drivers on the HP site (link below) for Red Hat and SUSE... does anyone know if these will work with Ubuntu? I'm a noob to linux so am not sure how to go about trying / rolling back if things break.

    http://h20000.www2.hp.com/bizsupport/TechSupport/DriverDownload.jsp?lang=en&cc=uk&prodNameId=3811493&taskId=135&prodTypeId=329290&prodSeriesId=3811492&lang=en&cc=uk

    ReplyDelete
  10. WOL now working on Ubuntu 11.10 on microserver.

    I couldn't get WOL working as well with microserver and ubuntu 11.10 with tricks posted here, and i did what suggested on this other website:
    http://www.bios-mods.com/forum/Thread-HP-Proliant-Microserver-AMI-BIOS-MOD?page=3

    The forum refers to a modded bios which I DIDN'T flash; mine is plain factory HP bios. The trick still works.

    The point is that when turning off the server, the poweroff helper apparently doesn't properly shut down the interface, losing the wol setting.

    the interface, to preserve wol capability, must be turned off with 'ifconfig eth0 down' command.
    I simply created a wol_poweroff.sh script that
    1) shuts properly down interface eth0
    2) powers off the system

    #!/bin/sh
    ifconfig eth0 down
    poweroff

    when the server is shut this way, wol works.

    to be sure eth0 is brought back online with wol capability at boot time, I also added the following two lines to my /etc/rc.local

    ifconfig eth0 up # turn the interface on
    ethtool -s eth0 wol g # enable wol

    Probably there are smarter ways to do this, ie. avoiding the custom poweroff script, ie. tweaking some other files ubuntu runs during shutdown.. if you have any suggestions on this they're very welcome.

    ReplyDelete
    Replies
    1. Sorry your original post seemed to have been caught by a spam filter, now retrieved and restored thanks for your input.

      Delete
  11. I managed it to get it working on Microserver + Ubuntu 11.10.
    The trick is to force a proper shutdown of the ethernet interface before system shutdown.

    you can create a trivial "wol_poweroff.sh" like this, and use it to shutdown the microserver:
    #!/bin/bash
    ifconfig eth0 down

    otherwise you can force the ifconfig eth0 down command in the shutdown routines, by putting in a script file inside /etc/rc6.d/ and /etc/rc0.d/. This way the normal poweroff command will allow you to enjoy wol as well.

    ReplyDelete
    Replies
    1. the "wol_poweroff.sh" is

      #!/bin/bash
      ifconfig eth0 down
      poweroff

      Delete
  12. Thanks rokafeller, confirmed this works on Ubuntu 10.04 LTS.

    ReplyDelete
  13. Firstly, thank you for this post. I've just spent about 3 hours trying to figure out why "ifconfig eth0 down" allowed my WOL to work and the answer is so obvious now.... for some reason my start up/shutdown scripts didn't have the right priorities. My "/etc/init.d/halt" script was set as "/etc/rc0.d/S03halt" and my "/etc/init.d/networking" script was set to "/etc/rc0.d/S03networking" meaning that the system would run the halt script before (or in parallel to) the networking script (given both have a priority of 03). I checked on both my laptop and another PC and the their halt scripts are set to "S90halt" so it'd be the last thing to run.

    After changing the halt script to "/etc/rc0.d/S90halt" my WOL now work without the need for an "ifconfig eth0 down" script.

    It might be worth checking this on your system to see if it's a bug with Ubuntu server version (both my other PC's are the desktop version).

    ReplyDelete
    Replies
    1. I actually have the same situation on Ubuntu server 11.10.
      /etc/rc0.d/S01halt and /etc/rc0.d/S01networking have the same priority. I'll try to move the halt priority to 90 as you suggest and let you know

      Delete
    2. If that's the case you might, if you haven't already, want to check the other script priorities. I found that almost everything was set to priority 03, meaning S03networking would execute before S03umountnfs (umounting network filesystems), which obivously isn't want you want. The logical order of these scripts seems to have been messed up somewhere along the line. I've changed my rc0.d and rc6.d scripts to the following (which is the same order as they are on my laptop and desktop machines):

      /etc/rc0.d/:
      K01apache2
      K01webmin
      K01winbind
      K02mdadm
      README
      S10unattended-upgrades
      S20sendsigs
      S30urandom
      S31umountnfs.sh
      S35networking
      S40umountfs
      S48cryptdisks
      S59cryptdisks-early
      S60umountroot
      S90halt

      /etc/rc6.d/:
      K01apache2
      K01webmin
      K01winbind
      K02mdadm
      README
      S10unattended-upgrades
      S20sendsigs
      S30urandom
      S31umountnfs.sh
      S35networking
      S40umountfs
      S48cryptdisks
      S59cryptdisks-early
      S60umountroot
      S90reboot

      This seems to work fine and if anything boot up time has decreased (probably because everything's being shutdown properly now!).

      P.S. I only changed the priorities on the start scripts, however, having given this another look I might change the kill scripts too as it seems to be shutting down apache before webmin!

      Delete
  14. Dude, on my ubuntu server all the Sxx script priorities in /etc/rc.0 and /etc/rc.6 were messed up. I followed your precious suggestions and now everything's running fine with wol as well without any additional eth down commands/scripts.
    I don't have apache running, but everything in the Kxx looks overlapping.. anyway not a big deal here - independent p2p services mainly
    thanks

    ReplyDelete
  15. My halt script has always been S90halt my networking script is S35networking and I still have issues with WOL. I'll keep the custom eth down script for the time being as a solution. It's strange that with seemingly correct shutdown script priorities I still need the custom eth down commands, hey ho at least it now works.

    ReplyDelete
  16. THANK YOU!!!!!! I've searched all over the internet for this...stumbling across the craziest solutions, that never worked. So a few things

    1) Thank you...seriously...you have no idea how badly I needed this

    2) I don't believe this is NetworkManager related, as some have speculated, because Ubuntu Server doesn't install it. However, both Desktop and Server install the ifupdown package for controlling the network interfaces, so I suspect that's the application causing the issue.

    3) I work for Canonical as the Director of Engineering for Ubuntu Server, so I should be able to help get this fixed. I've opened a bug:
    https://bugs.launchpad.net/ubuntu/+source/ifupdown/+bug/981461
    and flipped the necessary switches to keep it on the radar.

    ReplyDelete
  17. I was struggling for 2 hours to setup 12.04 with WOL on D945GSEJT (mini-itx) and none of these tricks worked. Finally I found some other thread on instability of built-in NIC driver so I decided to give a try to the receipt from that blog:
    http://djlab.com/2010/10/fixing-rtl8111-8168b-driver-debian-ubuntu/
    and wakeup-on-lan WORKS NOW without any hocus-pocus changes to system configuration :)

    ReplyDelete
    Replies
    1. Good to hear you solved your problem, although I think it's slightly different to the one experienced in this post. The driver you refer to is for a Realtek chipset whilst the N36L and N40L use Broadcom chipset and TG3. That said thanks for posting and I hope anyone with issues on an Realtek 8168/8169 chipset are enlightened with your link.

      Delete
    2. You are right, sorry for offtopic in this context; part of discussion was quite generic and I just wanted to say that sometimes problem may be release+driver specific.

      Delete
  18. I also got now WOL working on the HP Proliant Microserver under Ubuntu 11.10.

    I think I'm getting the bigger picture now. One main problem is that the network interface is not disabled at shutdown.

    Usually it gets disabled at entering runlevel 0 and executing /etc/rc0.d/S35networking. This script calls "ifdown -a". Which means it would go through all networking interfaces specified in /etc/network/interfaces and shut them down.

    One error cause is an incorrect priority of this script as described by [Anonymous18 March 2012 22:08]. However, in my Ubuntu 11.10 installation the priority is correct.

    My error cause was the one described by [Anonymous18 November 2011 14:13]: Because Ubuntu uses the (Gnome) network manager, the ethernet interface eth0 does not show up in /etc/network/interfaces. That is why ifdown -a cannot work. That is, however, why ifconfig eth0 down will work. But this command is not used in S35networking.

    A workaround is to use the wol_poweroff.sh script as described originally. However, I think the cleanest solution is to deinstall the network manager and configure the network through /etc/network/interfaces, as [Anonymous18 November 2011 14:13] described. This is what I did, and it works!

    Thanks to everybody, this seemed the only thread of 100 that contained the relevant information.

    ReplyDelete
  19. Wow, this is by far and away the thread with the most information on the subject than any other I have found, and believe me I have visited a lot.
    Thanks so much for helping me to get it working.
    Props for being awesome :D

    ReplyDelete
  20. I have Ubuntu 12.04 LTS installed on my N40L and WOL works out of the box.

    ReplyDelete
    Replies
    1. Argh that should say "Ubuntu 12.04 Server LTS"

      Delete
  21. N40L + Ubuntu 12.04 LTS Server
    WOL works.

    ReplyDelete
    Replies
    1. With the script or without any modifications? I am waiting for the fix to be implemented.

      Delete
    2. I have N40L with Ubuntu 12.04 LTS Server and WOL is configured however it doesn't work...

      I had to create script mentioned above and then it works.

      It is very strange that it works for some of you on the same enviroment.

      Delete
  22. Excellent tips.... THANKS. My N40L works with Ubuntu server 12.04 again... !!!

    ReplyDelete
  23. Will these same instructions work on debian?

    ReplyDelete
  24. great post. work on N54L after sudo poweroff in few minutes. However, if try to wake on the next day after sudo poweroff. It does not work. any hints?

    ReplyDelete
    Replies
    1. Sorry nearly a year late... that sounds like an ARP cache issue with the router / switch. Try setting a static IP address with the router. If that doesn't help try using a different switch / router to isolate the issue, as it could be the N50L where the network interface goes into a power saving mode.

      Delete
  25. This comment has been removed by the author.

    ReplyDelete
  26. Sorry, after trying this solution the reboot command not works more.

    It's normal ? how can possible to solve?

    WOL works.

    Thank you

    ReplyDelete