Ubuntu Linux 8.04 – Wake on LAN

:: linux, network, ruby, sysadmin, utility

Now that I’ve switched to a Macbook Pro with OSX Leopard as my primary desktop, I’ve located my Ubuntu machine in another part of the house to be accessible to my children. Not wanting to walk to the room where it’s located just to flip the power switch, I researched how to get “wake on LAN” working, so I could power it up remotely.

  1. Enable the appropriate setting in your BIOS. Mine had something to do with wake on PCI device.
  2. Install ethtool if you don’t already have it.

    sudo apt-get install ethtool
    cd /etc/init.d
    sudo vim wakeonlanconfig

    Add the following lines to that file:

    #!/bin/bash
    ethtool -s eth0 wol g

    Install the script:

    sudo update-rc.d -f wakeonlanconfig defaults

    Run the script:

    sudo /etc/init.d/wakeonlanconfig

  3. Keep the network interface alive after shut down.

    sudo vim /etc/init.d/halt

    Change the following line:

    halt -d -f -i $poweroff $hddown

    to the following line (i.e. remove the -i)

    halt -d -f $poweroff $hddown

  4. Get the MAC address

    ifconfig | grep HW

  5. Send the magic packet via the following Ruby program:
require 'socket'
mac_addr = "x21x53x39xB3x90x42"
s = UDPSocket.new
s.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
s.send("xff"*6 + mac_addr*16, Socket::SO_BROADCAST, '10.0.0.255', 7)