2007年03月14日

2007年03月14日

 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 などでログインしている時には使えない。

タグ:
Posted at 2007年03月14日 23:43:29
email.png