【WoL】ラズパイ経由で家の外からデスクトップPCを起動する


## はじめに
- 家の外でもデスクトップPCの環境で開発したい。
- sshでログインできればいい
- でも、デスクトップPCをずっと起動しておくと電気代がもったいないから、その都度起動できるようにしたい

上記の要望・問題点を解決したいと思って、この記事で紹介する環境を構築しました。

## やること

1. ラズパイにWakeOnLanをインストールする
1. デスクトップPCをWakeOnLanで起動できるように設定する
1. iPhone(or ノートPC)でラズパイにログインしてWakeOnLanを実行する
1. 起動したデスクトップPCにログインする

## 前提知識
- ssh
- 基本的なLinuxコマンド

上記二つの超基本的な知識があれば、誰でもできる内容です。

### 取り扱わない内容
- Lnuxのインストール方法
- WakeOnLanの詳しい仕組み
- ssh, vpnの説明
- ラズパイのこと
- Windows, MacOSでの方法

## 構成

![all_image_wol.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4064558/de9ae1f6-72b3-4b98-bed7-127f5ac95f16.png)

スイッチングハブ以外の機器がVPNに接続されています。

## 各種バージョン

### ラズパイ

本体: Raspberry Pi 3 Model B+
OS: 下記

```
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```

### デスクトップPC

OS: openSUSE
```
❯ cat /etc/os-release
NAME="openSUSE Leap"
VERSION="15.6"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.6"
PRETTY_NAME="openSUSE Leap 15.6"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.6"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
DOCUMENTATION_URL="https://en.opensuse.org/Portal:Leap"
LOGO="distributor-logo-Leap"
```

## WakeOnLanの簡単な説明

起動させる側と起動する側のPCを用意します。

それぞれ同じLANの有線に接続している状態です。

起動させる側は起動する側のMacアドレスを指定し、LAN経由で起動させるための信号(マジックパケット)を送信します。

起動する側のPCはマジックパケットを受信したら起動します。

この仕組みを使ってラズパイ経由でデスクトップPCを起動させていきます。　

## ラズパイにWakeOnLanをインストールする

sshでも直接でもラズパイにログインします。
Raspberry Pi OSはDebian系(というかDebianそのもの?)なのでパッケージマネージャは`apt`です。
よって、下記コマンドで`wakeonlan`をインストールします。

```bash
sudo apt install wakeonlan
```

wakeonlan実行時は以下のようにコマンドの後にデスクトップPCのMacアドレスをつけるとマジックパケットを送信できます。

```bash
wakeonlan <Macアドレス>
```

とりあえず、ラズパイ側の準備はこれだけです。

WakeOnLanの仕組みについては、下記サイトにて説明されています。

https://www.splashtop.co.jp/knowhow/30/

https://www.intercom.co.jp/remoteoperator/helpdesk/column/about-wake-on-lan/

## デスクトップPCをWakeOnLanで起動できるようにする

ハードウェア側の設定はBIOS/UEFIによって異なるので自分のPCに合わせて設定してください。

WakeOnLanに対応していない機器もあるかもです。

ハードウェアだけでなく、OS側でも設定が必要です。

sshでも直接でも、まずデスクトップPCにログインします。

そして、ethtoolというネットワークインターフェースの確認・設定ができるツールをインストールします。

今回使用しているOSはopenSUSEなので、`zypper`コマンドを使用します。

```bash
sudo zypper install ethtool
```

下記コマンドで現在のネットワークインターフェースの状況を確認します。

```
$ sudo ethtool eth0

Settings for eth0:
~~~省略~~~
    Supports Wake-on: pumbg
    Wake-on: d
~~~省略~~~
```

この`Wake-on`の部分が`d`であるとWakeOnLanが使えないので下記コマンドで`g`に変更します。

```bash
sudo ethtool -s eth0 wol g
```

ただ、上記のみであると再起動時に設定が戻ってしまうので`cron`を設定することで再起動時にもう一度`g`にさせるようにする

```
sudo crontab -e -u root
```

このコマンドでcronの設定ファイルがエディタによって開かれるので、下記を追記して保存する
```
@reboot /usr/bin/ethtool -s eth0 wol g
```

`@reboot`は再起動時に実行を意味し、`/usr/bin/ethtool`は`ethtool`コマンドを絶対パスでしていしています。

この設定をすると再起動時に毎回`Wake-on`を`g`に設定するコマンドが実行されます。

また、WakeOnLan時にこのPCのMacアドレスが必要になるので調べておきます。

`ip addr`コマンドの出力でlink/etherの

そして電源をオフにします。

以下が参考にしたサイトです。

https://vild.hatenablog.com/entry/2019/09/14/154813

## iPhoneでラズパイにログインしてWakeOnLanを実行する

iPhoneにsshクライアントをインストールします。

私が使っているのは`Termius`というサービスです。

https://termius.com/

それを使ってラズパイにログインします。

![IMG_0249.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4064558/58c48356-3adf-47b8-919e-4dc7661f2e85.png)

上記の環境でWakeOnLanを実行します。

```bash
~ $ wakeonlan <Macアドレス>
Sending magic packet to 255.255.255.255:9 with <Macアドレス>
```

その後デスクトップPCが起動されログインできるようになります。

![IMG_0250.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4064558/6fed936d-5d7d-4ce2-8afb-ae73c0aa6dcd.png)

**これで完了です！**

## 補足

- 使用しているVPNのサービスはTailscaleです。

https://tailscale.com/

- デスクトップPCの電源オフとログアウトは以下のコマンドを実行しています。

```bash
sudo shutdown -h now && exit
```

## さいごに

今回はラズパイ経由でデスクトップPCを起動する方法を紹介しました。

アレクサにWakeOnLanのスキルがあり、アレクサ経由でもデスクトップを起動できるらしいので試してみたいです。