外出先からiPhoneのホームスクリーンのアイコン一押しでおうちのPCを起動させたいと思ったお話

　#タイトルは若干詐欺ですね… VPN接続はiphoneでは自動化出来ません…:imp:

# はじめに
　クラウドになんでも上げちゃう昨今、それでも「お家のPCのあのファイル、クラウド同期忘れちゃったー」とか、「移動中の車内でお家のPC立ち上げて、さっき調べた設定やアプリ試したいわー」とかあると思うんです…おもうんです（迫真）

　……私はそんな人なので家にVPNサーバー立ち上げて、WOL設定したPCを用意して、お外からやおらiPhoneでVPNでおうちに繋いでWOLで起動させてリモートデスクトップ接続してちこちことやってたりします。

# 現状
　ただひとつ厄介というか毎回面倒くさい作業があって。WOLパケットってVPNで接続した側から発してもセキュリティ上ルータがフィルタリングしてて通らないんです。でもこれだけのために穴を開けるのはイヤ。仕方なくお家の常時稼働中のラズパイにSSHでログインしてそっからスクリプトでWOLパケットを投げて立ち上げてたんですが、手数が多くって面倒くさい。なんとかならへんのか？

![我が家のPC起動シーケンス(old).png](https://qiita-image-store.s3.amazonaws.com/0/149049/bbf919d9-5da7-c896-eb56-3a3072942167.png)

[websequencediagrams.com](https://www.websequencediagrams.com/?lz=dGl0bGUg5oiR44GM5a6244GuUEPotbfli5Xjgrfjg7zjgrHjg7Pjgrkob2xkKQoKaXBob25lLT5WUE4gc2VydmVyOiBjb25uZWN0aW5nIAANCgpvcHQg54Wp6ZuR44Gq5omL6aCG44GM5b-F6KaBAD4JU1NIADMUAA0KABUVc2VuZGluZyBXT0wgcGFja2V0IHRvIG1hcmsncyBQQwoATAotPgANCQAjFAplbmQAgUoJAB8LAIFHC1JlbW90ZSBEZXNrdG9wCg&s=napkin)

1. iPhoneのVPN設定開いてVPN接続
1. iPhoneAppのSSHクライアント開ける
1. 常時稼動のサーバに接続する
1. WOLコマンド使って、閉じる
1. ちょっと待つ（なんならPINGで導通確認）
1. RDPで立ち上げたPCに接続

# 改善
　2～4の手順を削減したい。
　いろいろ考えて、こうした。

![我が家のPC起動シーケンス(update).png](https://qiita-image-store.s3.amazonaws.com/0/149049/15d08d20-5e80-9ccb-cf70-d0a068869acc.png)

[websequencediagrams.com](https://www.websequencediagrams.com/?lz=dGl0bGUg5oiR44GM5a6244GuUEPotbfli5Xjgrfjg7zjgrHjg7PjgrkodXBkYXRlKQoKaXBob25lLT5WUE4gc2VydmVyOiBjb25uZWN0aW5nIAANCgpvcHQg44Ob44O844Og44K544Kv44OqAAoFs-OBruODnOOCv-ODs-S4gOeZuu-8gQBTCUhUVFAAVAlyZXF1ZXN0IHRvIHNlbmRpbmcgV09MIHBhY2tldAoAIAstPm1hcmsncyBQQzoAFxRlbmQAgTUJAB8LAIEyC1JlbW90ZSBEZXNrdG9wCg&s=napkin)


　ローカルLAN内にlighttpdを立てておいて、CGIにリクエストを投げるとWOLコマンド実行してくれるようにする。ログインもコマンド打つのもない。リクエストはページのショートカットをホームスクリーンに置くなどすればいけるだろう。完璧。

必要なもの

1. VPN設定済みのVPNサーバー
1. VPN設定済みのiPhone
1. WOL設定済みのPC
1. WOL設定済みのPCと同じローカルネットワーク内にいるHTTP+PHPサーバー
1. WorkFlowっていうiPhoneApp

　上の3つはこの記事読んでいるということはすでにご家庭にありますよね？っということで割愛。
　4番目は手持ちの常時稼動サーバがラズパイなのでラズパイにlighttpd+PHPを入れました。この記事を参考にしました。

[[メモ] らずぱい WebUIでシャットダウン (セキュリティ考慮無し)](https://qiita.com/mt08/items/7ee309466f9fc6e0506a)

　5番目はかつて有料でしたが今は無料です。実際はurlをたたくだけなのでWorkFlowは実質不要ですがアイコンが手軽に使えるのと、通知を出してくれるので採用しました。

# 実装
## サーバサイド
　lighttpd+PHPの導入はmt08さんのそのまんまです。
　ちがうのはコマンドラインの部分くらい。
### html
```wol.html
<html>
    <form action="wol_spectre.php ">
        <input type="submit" value="Wake on Spectre" style="height: 240px; width: 50% ;font-size: 32px;" />
    </form>
</html>
```
最終的にphpのurlを直に叩くだけなので要らないっちゃいらないのだけどテスト用です。

### PHP
```wol_spectre.php
<script>
    setTimeout(function(){ history.go(-1); }, 3000);
</script>
<?php system("wakeonlan aa:bb:cc:dd:ee:ff"); ?>
<br/>
Now wake up the spectre...
```
wakeonlanコマンドはapt-getでインスコしています。history.go(-1)で三秒後に前のページに戻ります。

## クライアントサイド
safariとかで
http://192.***.***.***/wol_spectre.php?
と打ち込むだけで実行出来るので、クライアント部分はURL型をGETして通知に文字列を出力する単純なものです。
<img width="375" alt="IMG_6864_2.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/149049/663015aa-d8e4-ed87-716e-16297a8715a4.jpeg">

出来たらこの子を「ホーム画面に追加」してあげれば完了です。
<img width="375" alt="IMG_6863.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/149049/526c565a-10e4-0a8f-20d6-bcce82ce790b.jpeg"><img width="375" alt="IMG_6888.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/149049/cbb04a0d-a9a2-6988-e356-1a00cc68cffa.jpeg">


# さいごに
　httpからlinuxコマンド叩けるので、ping投げるとか自作サービスの状態を返すとかそういう応用が利いて色々使えそうだと思いました。
　phpでping返すコマンド作って、その文字列をworkflowで受け取って起動してたらリモートデスクトップのアプリを立ち上げる、とかもう一歩踏み込んだ自動化が出来そうです。その辺はまだ作ってないので気が向いたら後日ってことで。