PowerMac G5 を何台か計算に使っていて、終日起動しっぱなしにしてある。最近省エネをうるさく言われるし、機械の寿命も短くなるだろうから、不要なときは電源を落とすか、せめてスリープさせておこうと思った。いざ計算させようと思った時に Wake-on-LAN で叩き起こせばよい。少し調べてみると、どうやら Mac は Wake-on-LAN で電源を入れることはできないようだが、スリープから起こすことはできる。そのためのツールもいろいろあるけど、わざわざコマンドをインストールしなくても、こんなのでいいみたい。
#!/usr/bin/perl
use Socket;
$hwaddr = "xx:xx:xx:xx:xx:xx"; # MAC address
$ipaddr = "xxx.xxx.xxx.xxx"; # IP address or hostname
# Create a "magic packet"
foreach (split /:/, $hwaddr) {
$pkt .= chr(hex($_));
}
$pkt = chr(0xff) x 6 . $pkt x 16;
$port = 9;
$raddr = gethostbyname($ipaddr);
$them = pack_sockaddr_in($port, $raddr);
$proto = getprotobyname('udp');
# Generate a socket for UDP connection
socket(SOC, AF_INET, SOCK_DGRAM, $proto) || die "socket failed: $!";
# Send the packet
send(SOC, $pkt, 0, $them) || die "send failed: $!";
close SOC;
スリープさせる方は、SleepNow を使うことにした。ネットで検索すると osascript -e 'tell application "Finder" to sleep' というのがよく紹介されているが、これは ssh などでログインしている時には使えない。
タグ: