Wake sleeping Mac with Applescript and Automator
June 26th, 2009

I have a Mac mini in my living room hooked up to my TV. I wanted to be able to control the mini from my iMac in my office. Using Screen Sharing built into Leopard, it’s a simple click of the mouse to do this. With a little Automator love, I created a simple workflow that turns the Screen Sharing step into a click of an icon in the dock.
However, even with the power efficiency of the 2009 Mac mini, I don’t want to leave it on 24/7. After searching through several solutions that used Python and Shell Scripting (neither of which I know or could make work), I found a nifty Applescript from Mark Muir that I adapted to solve my problem:
(*
Script adapted from Wake on WAN - by Mark Muir (2008-04-01)
http://forums.dealmac.com/read.php?4,2751523
*)
property MAC_address : "00:25:4b:9f:63:c8"
property WAN_IP_address : "255.255.255.255"
on run
set command to "/usr/bin/php -r " & quoted form of ("$mac = " & quoted form of MAC_address & "; $ip = " & quoted form of WAN_IP_address & "; " & "
$mac_bytes = explode(\":\", $mac);
$mac_addr = \"\";
for ($i=0; $i<6; $i++)
$mac_addr .= chr(hexdec($mac_bytes[$i]));
$packet = \"\";
for ($i=0; $i<6; $i++) /*6x 0xFF*/
$packet .= chr(255);
for ($i=0; $i<16; $i++) /*16x MAC address*/
$packet .= $mac_addr;
$port = 9;
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, TRUE);
socket_sendto($sock, $packet, strlen($packet), 0, $ip, $port);
socket_close($sock);
")
do shell script command
end run
Rolling that into my Automator workflow gives me one-click access from my dock to wake my Mac mini over the network and start screen sharing on Leopard. Here is the final Automator workflow:
wake-and-share-mac-mini.zip (68KB)