あんパン

こしあん派

iPhoneとRaspberry PiでWOLのパケットを送ってWindows端末を起動する

最近iPhone 14 Pro Maxを購入した。写真を撮るためだとかマンガを読むためだとかいろいろ理由をつけて買ったが実のところRemote DesktopでWindowsに繋いで適度なサイズの画面でノベルゲームをしたかったのだった。

Remote Desktopで接続することはできたが、しばらく放置しているとスリープ状態になってしまい、わざわざ机の下にあるWindows端末の電源ボタンを押さないといけない。布団でぬくぬくゲームをしようというときにわざわざ出るのは面倒なのでiPhoneから起動できるようにした。いまも昔もこういう操作をシュッとやるならWake-on-LANと相場が決まっている。この記事はWake-on-LANをiPhoneからやろうという話。

iOS向けのアプリとしてWOLのマジックパケットを送出できるものはあるけれど、得体の知れないものを入れるのはやや抵抗がある。最近のiOSには純正のショートカットアプリがあり、SSHで任意のコマンドを発行できるので、これを利用してRaspberry Pi上からマジックパケットを送出するのがよかろうと考えた。いまやRaspberry Piはどこにも在庫がないけど、手元にいくつか余っているのでこれを利用した。Raspberry PiでなくてもNano PiやOrange Piとかでもだいたい同じことができるはず。

WOLの設定

Windows上で、まずはIPをDHCPではなく固定にしておく。続いてデバイスマネージャから利用している有線LANのインターフェースのプロパティを開き、WOLを有効にしておく。加えて、UEFIの設定でもWOLを有効にする。このあたりはマザーボードによって違いそう。最後にインターフェースのMACアドレスを控えておく。マジックパケットはこのMACアドレス宛に送ることになる。

この状態で動くかどうかを確認しておくと良い。Arch Linuxであれば wol コマンドでマジックパケットを送出できる。

$ wol MAC_ADDR

スリープや休止状態であれば復帰できたが、完全に止めた状態から起動することはできなかった。そういうものだった気がする。

Raspberry Piの初期設定

masawada.hatenablog.jp

以前書いた通りRaspberry Pi用のSDカードはRaspberry Pi Imagerで作ることができる。最近はSSH用のパスワードの設定などもできて便利。できあがったSDカードの / 直下に touch ssh などでsshという名前の空ファイルを作っておけば立ち上げ時にsshdも起動する。

Raspberry Piは起動するとDHCPでIPを取得しにいくので、 arp-scan でこれを確認してsshする。

$ sudo arp-scan -l
Interface: eno1, type: EN10MB, MAC: **:**:**:**:**:**, IPv4: 192.168.0.101
Starting arp-scan 1.9.8 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.0.1     **:**:**:**:**:**       YAMAHA CORPORATION
192.168.0.10    **:**:**:**:**:**       ASRock Incorporation
192.168.0.102   **:**:**:**:**:**       Raspberry Pi Foundation

こういう調子。このIPにSSHで接続して、さらにIPを固定にする。 /etc/dhcpcd.conf を編集しつつ再起動すればOK。最後にWOLのマジックパケットを送出するアプリケーションを入れておく。

$ sudo apt install wakeonlan

iOSの設定

ショートカットアプリを開いて新規ショートカットを作成し、以下のように設定を行う。

MACアドレスやホストなどは環境に応じた値を入れる

SSH用の鍵はiOS側が生成してくれるので、公開鍵をコピーしてRaspberry Pi側に登録しておく。

あとはこのショートカットを実行すれば、Windowsが起動する。

SSHで任意のコマンドを実行できるので応用の幅が広くて便利そう。