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