Deep in Deep

プログラミング勉強中。遠回りですが、ゆっくり深く学んでいきたい。

ラズパイを使って自宅のデスクトップPCを遠隔操作で起動する!

最近、自宅のメインのデスクトップPCをリモートデスクトップのホストにして、thinkpadをクライアントとして使用し、外部から自宅のPC上で作業できるような環境を作りました。( 別途記事作成しようかと思ってます )

この環境を作ったおかげで、外出先でも結構快適に作業ができるようになったので、かなり気に入っています。

メインPCがMacBookの人なら関係ないと思いますが、自宅ではデスクトップPCで作業しているけど、外出先ではしかたなくラップトップ上の環境で作業をしている方にはかなりお勧めできます。

一点不安なことが

この素晴らしい環境ですが、一点不安なことがありました。

「これ、ホストPCの電源落ちたら、詰むやん」

この点だけが怖くて、こうなった場合は急いで帰宅するしかないのかな、、、なんて思っていました。

このことを会社の先輩に相談したところ、「Wake on LAN( WOL )」について教えてくださいました。

Wake on LANとは

Wake on LANというのは、

コンピュータネットワークに特定のパケットを送信させることにより、そのパケットの内容に該当するコンピュータが自ら電源を投入させる仕組みである。自明に、ネットワークの特性を生かしたコンピュータの電源操作が可能となる。 ( 引用: ウィキペディア Wake-on-LAN )

という技術だそうです。会社とか学校などで大量のPCを一括で電源onにしたり、遠隔地のPCの電源を入れるような用途で使われるみたいです。

今回やってみたこと

  • ラズパイを使ってホストPCにマジックパケットを送り、遠隔地からホストPCの電源を投入
  • ラズパイにはクライアント用のthinkpadからsshで接続して、wakeonlanコマンドを使用
  • ラズパイによるホストPCの死活監視 -> 電源がoffになってしまったときに自動で再起動するようにする、というのは今回は設定しておりません。( またいつかやる )

環境

  • ホストPC: Windows10Pro( マザボ: ASROCK B450 Steal Legend ) => ルーターに有線接続
  • クライアントPC: ThinkPad E14Gen4 Windows11Home => 外部でリモートデスクトップ接続作業
  • ラズパイZero2w -> ルータとは無線接続。ホストPCと同一ネットワークに所属

クライアントPCからラズパイへは、外部からでもSSH可能な状態

準備

今回行う作業の準備は大きく分けて3つ。BIOS/UEFIの設定とホストPC( Windows )の設定、ラズパイ側の準備です。

BIOS/UEFI

BIOS/UEFIの設定の中で、Wake on LANを有効にするかどうかの項目があるようで、そちらの設定を行う必要がある。

自分の場合は、マザボがASROCK B450 steal legendだったので、UEFIAdvanced > ACPI Configuration > PCIE Devices Power OnEnabledに変更。

Advanced > ACPI Configuration > Deep SleepDisabledにするようだが、defaultでDisabledなのでそのままでOKでした。

Save and ExitでUEFI終了

Windows( host )側

  • Win + Xで開かれるメニュー( 左下Windowsマークを右クリックしても開かれるよ )から「デバイスマネージャー」を選択
  • 「ネットワークドライバ」 > 「Realtek PCIe GbE Family Controller」(これは人それぞれ違う可能性あり。)を右クリック > 「オプション」
  • 「詳細設定」タブ内にwake on lan とか ウェイクオンラン、みたいな設定項目があるか確認
    • ある場合 -> それらを「有効」/ 「Enable」に変更
    • ない場合 -> ドライバの更新が必要と思われる。
      • 自分の場合はドライバの更新、WindowsUpdateをして最新状態にしたはずだが、NICのドライバのバージョンが古いままだった
      • Realtekのページに行き、最新版のドライバをダウンロードし、インストール。
      • 先ほど開いていたオプションの「ドライバ」タブの更新履歴を確認し、最新版が当たったことを確かめる
  • オプション内、「電源の管理」タブ > 「このデバイスで、コンピュータのスタンバイ状態を解除できるようにする」、「Magic Packetでのみ、コンピュータのスタンバイ状態を解除できるようにする」をチェック
  • コントロールパネルを開く
  • ハードウェアとサウンド >> 電源オプション >> 電源ボタンの動作の変更 >> 「現在利用可能でない設定を変更します」クリック >> 「高速スタートアップを有効にする」のチェックをはずす
  • MACアドレスを調べる
ipconfig /all

ラズパイ側

クライアントPCからSSH接続できるのは大前提としておきます。

wakeonlanのpackageをinstallする。

sudo apt install wakeonlan

以上

動作確認

  • クライアントPCを携帯のテザリングなどを使用して、外部ネットワークに接続させておく
  • クライアントPCからホストPCにリモートデスクトップ接続を行い、その中でホストPCの電源をシャットダウンさせる
  • リモートデスクトップ接続は解除され、ssh接続も当然切れます。
  • クライアントPC -> ラズパイ へssh
  • ラズパイにて以下を実行
wakeonlan XX:XX:XX:XX:XX:XX<先ほど控えておいたホストPCのMACアドレス>
  • ホストPC起動しました( やった~ )

おわりに

今回はWake on LANの技術を使用して、PCの電源を遠隔で投入する方法を試してみました。

遠隔でoffにすることもできるそうですが、それにはリブーターという機械がいる? みたいで、今回は見送りました。

また、ラズパイに自宅PCの死活監視をさせて、必要に応じてWake on LANを使用し、電源投入する方法についても調べてみたいと思います。

一つ言えるのは、「マジでラズパイ買ってよかった」です。

勢いと気分でなんとなく買ってみたラズパイだけど、現在の自分の作業環境の中で、結構なくてはならないアイテムになりつつあります...

これからもどんどんラズパイを活用できたらいいな!!