Windows PC を Raspberry Pi から遠隔操作してシャットダウン or スリープモードにします。
目次
Raspberry Pi から PC を起動 or スリープからの復帰をするには、Wake on LAN を使う方法がよく知られています。ですが、その逆、すなわち、PC をシャットダウン or スリープモードにする方法はあまり紹介されていません。恐らく需要があまりないからでしょう。需要があまりないのを承知の上で、備忘録としてこの記事を残しておきます。
今回は、Windows PC 側に OpenSSH サーバーを立てて、Raspberry Pi から Windows PC に SSH ログインしてシャットダウン or スリープコマンドを発行する方法を用いました。
OpenSSH サーバーを Windows PC で有効にする
以下の記事を参考に Windows に OpenSSH サーバーを導入して、公開鍵認証を使ってログインできるようにしてください。
Raspberry Pi で、秘密鍵と公開鍵のペアを作成する必要がありますが、パスフレーズの入力はEnter を連打してスキップしておくことをおすすめします。LAN内でのSSH接続でしょうし、パスフレーズが設定されてしまうとログインの度に入力が必要となり、コマンドの自動実行が不可能になってしまいます。
Raspberry Pi からシャットダウン or スリープコマンドを発出!
Raspberry Pi で以下のコマンドを実行すると、SSH ログイン先のWindows PC がシャットダウンします。
bash💩ssh XXXXX@192.168.X.X shutdown -s -t 0
また、Raspberry Pi で以下のコマンドを実行すると、SSH ログイン先のWindows PC がスリープモードに突入します。
ssh XXXXX@192.168.X.X PowerShell -Command "Add-Type -Assembly System.Windows.Forms;[System.Windows.Forms.Application]::SetSuspendState('Suspend', \$false, \$false);"
これらのコマンドは、公開鍵認証でのログインが可能かつ鍵のパスフレーズが設定されていないのであれば、パスワード等の入力なしに実行できます。
一応コマンドの解説
SSH 接続は、一般的に以下のコマンドでできます。
ssh ユーザー名@192.168.X.X 接続先で実行するコマンド
接続先で実行するコマンド
はオプションです。今回は、シャットダウン or スリープコマンドをここに書いています。
Windows のシャットダウンコマンドは、以下のとおりです。
bat💩shutdown -s -t 0
このコマンドはコマンドプロンプトでも PowerShell でも使えます恐らく。
コマンドプロンプトで使えるスリープコマンドは次のとおりです。
PowerShell -Command "Add-Type -Assembly System.Windows.Forms;[System.Windows.Forms.Application]::SetSuspendState('Suspend', $false, $false);"
このコマンドは、こちらのサイトで紹介されていました。
カンの良い人なら分かると思いますが、これはコマンドプロンプトから PowerShell のコマンドを呼び出しています。PowerShell でスリープモードにするには、以下のコマンドを使います。
Add-Type -Assembly System.Windows.Forms;[System.Windows.Forms.Application]::SetSuspendState('Suspend', $false, $false);