Macとかの雑記帳

遠隔操作でMacやUbuntuを起動させるWakeOnLanの使い方

WakeOnLan(以後wol)とは、スリープやシャットダウン状態のパソコンに「マジックパケット」と呼ばれる特殊な信号を送信して復帰させる機能です。

パソコンを複数所有していると一台ずつ電源を入れなければならないので面倒ですが、wolで復帰できるようにしておくと一台のパソコンから操作するだけで済みます。

wolを使う場合はハードがwolに対応していなければなりませんが、2000年以降に作られた機種であれば大概対応しています。ですので最近のパソコンなら問題なく使えるはずです。

BIOSの設定を変更

MacはBIOSが無いので関係ありませんが、PC機はBIOSの設定を変更してwolのマジックパケットを受信したら起動/復帰できるようにする必要があります。

工場出荷時の時点でwolが有効になっている場合がほとんですが、一応確認しておいてください。

もう一つ気をつけてほしいのが起動順序です。今回Thinkpad R60eというIBMのノートパソコンをwolで復帰できるようにしたのですが、この機種、普通に電源をONにした際の起動順序とは別に、ネット回線越しに起動させた時の起動順序を、設定する項目がありました。

wol01

そっちはPXEブートを優先するようになっており、起動に成功したと思ったら上のような画面を表示してくれました。

有りもしないPXEサーバーを探されたのでは起動に時間がかかってしまうので、BIOSの設定画面を開いたらよく確認してください。

Ubuntuをwolで復帰できるようにする

まず、OS側のwol設定の確認/変更に必要なethtoolをインストールします。

$ sudo aptitude install ethtool

 

インストールしたら現在の設定を確認します。

$ sudo ethtool eth0
「eth0」の部分は環境によって違う場合がありますので、$ ifconfig等で確認してください。

wol_03

上のように Wake-on: g となっている場合はwolで復帰できる状態です。そのままでOKです。

「g」以外になっている場合は、下記を実行して設定を変更すればいいのですが…

$ sudo ethtool -s eth0 wol g

これを実行しても再起動後には元に戻ってしまいます。ですので、起動時に上のコマンドを実行させるスクリプトを作成し、常に「Wake-on: g」になるようにします。

wolを有効にするスクリプトの作成

wakeonlanconfig という名のスクリプトを/etc/init.d/に作成します。

$ cd /etc/init.d/
$ sudo vi wakeonlanconfig

ファイルを開いたら下記を記入します。

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

 

ファイルを保存したら下記を実行して実行可能なファイルにします。

$ sudo chmod +x wakeonlanconfig

次にスタートアップでスクリプトを走らせるようにします。

$ sudo update-rc.d -f wakeonlanconfig defaults

スクリプトの設定を終えたらubuntuを再起動し、$ sudo ethtool eth0を実行してwolが有効になっているかどうか確認します。

MACアドレスを調べる

wolで復帰させる際に、MACアドレスを入力する必要があるので予め調べておきます。

$ ifconfig

wol_04

「ハードウェアアドレス」となっているのがMACアドレスです。忘れないようにメモっておきます。

Macをwolで復帰できるようにする

Macをwolで復帰できるようにしたい場合は「システム環境設定」「省エネルギー」と進み、下のように「ネットワークアクセスによってスリープを解除」を有効にするだけです。

wol_02

ただ、PC機のようにシャットダウンしている状態からの起動はできません。スリープからの復帰のみとなります。

もう一点注意してもらいたいのが、「ネットワークアクセスによってスリープを解除」を有効にすると、夜中の3時とか4時くらいに画面が真っ暗の状態でスリープから復帰することがあります。

1分程放置しておくと、またスリープ状態に戻ります。これはメンテナンススクリプトと言って、1日、一週間、一ヶ月ごとの決まった時間に自動で実行される、一時ファイル等を削除する機能が実行されるために起こる現象です。異常ではありません。

MACアドレスを調べる

Ubuntuと同様に$ ifconfigで調べる事もできますが、Macの場合は「システム環境設定」「ネットワーク」と進み、ネット接続に使用しているネットワークサービスを選び、右下の「詳細」をクリックします。

wol_05

 

ハードウェア」タブを選ぶと下のようにMACアドレスを見ることができます。有線接続とWi-Fi接続とではアドレスが違うので、ネット接続に使っている方のアドレスを控えておいてください。

wol_06

wol_07

スリープ/OFF状態のパソコンを復帰させる

Mac、Ubuntuともに$ wakeonlanコマンドを使った方法で説明していきます。

Macにwakeonlanをインストール

$ brew install wakeonlan

MacPortsを使っている場合は下記。

$ sudo port install wakeonlan

 

Ubuntuにwakeonlanをインストール

$ sudo aptitude install wakeonlan

 

このコマンドは、下のように$ wakeonlan MACアドレスと入力して使用します。例としてMacからUbuntuを起こす場合は下記になります。

$ wakeonlan 00:11:22:33:44:56

wol_08

 

UbuntuからMacを起こす場合も全く同じです。$ wakeonlan MACアドレスを実行します。

wol_09

Macにログインしたら自動でwolを実行させる

せっかくなので、Macにログインした際にwolを実行させ、Ubuntuを自動で起こす方法を考えてみました。

1 「ログイン項目」を使う

wolを実行させるアプリを作り、それをログイン項目に登録する方法です。

まず、AppleScriptエディタを起ち上げ下のような内容を記入します。

do shell script "/usr/local/bin/wakeonlan 00:11:22:33:44:56"

wolのパスとMACアドレスは環境にあわせて変更してください。

wol_010

 

そしたら、ファイルフォーマットを「アプリケーション」にして適当なところに保存して…

wol_011

 

「システム環境設定」→「ユーザーとグループ」→「ログイン項目」に登録すれば、Macにログインした際にwolが実行され、Ubuntuが自動で復帰してくれます。

wol012

2 .plist を使う

UNIX的なやり方(?)がお好みの方は、~/Library/LaunchAgentsにwol用の.plistファイルを作成して、ログイン時に自動で実行させるやり方もあります。

まず~/Library/LaunchAgentsに移動します。

$ cd ~/Library/LaunchAgents

 

例としてcom.wakeonlan.plistというファイル名で作成します。

$ vi com.wakeonlan.plist

 

開いたファイルに下記を記入していきます。9行目のwolのパスと、10行目のMACアドレスは環境にあわせて変更してください。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.wakeonlan</string>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/local/bin/wakeonlan</string>
		<string>00:11:22:33:44:56</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
	<key>ServiceDescription</key>
	<string>WakeOnLan</string>
</dict>
</plist>

xml形式で書くとごちゃごちゃしてますが、Xcodeで開くとこれだけです。

wol_013

 

ファイルを作成し終えたら下を実行して、このファイルを有効にします。

$ launchctl load com.wakeonlan.plist

 

無効にしたい場合は下を実行します。

$ launchctl unload com.wakeonlan.plist

Ubuntuにログインしたらwolを自動で実行させる

Ubuntuログイン時に自動でwolを実行したい場合は…いくつか方法がありますが、下のように「システム」「設定」「自動起動するアプリケーション」で設定してしまうのが一番簡単だと思います。

wol_014

サーバー版を使っている場合は、wolを有効にするスクリプトを作成した際に用いた方法が使えると思います。

スポンサード リンク