見出し画像

超簡単 遠隔でPCの電源を入れる Wake on LAN信号をPythonで送信してみた

皆さんこんにちは、Rcatです。
今回は遠隔でパソコンの電源を入れるWake on LANについてまとめていこうと思います。
最終的にはPythonを使ってこの信号を送信し、自宅にあるパソコンの電源を入れます。

電源を入れるところを撮ってUPしました。15秒程度の短い動画ですが、Wake on LANを搭載したDiscordのBOTを使って電源を入れています

BOTを作るためのテンプレートはこちら


概要

教育機関のパソコン室で、先生が全員分のパソコンの電源を一斉に入れているのを見たことはありませんか?
電源ボタンに触らなくてもパソコンの電源がリモートで入るなんて不思議ですよね?
でもそれは種も仕掛けもあります。それがWake on LANです。

Wake on LANは有線LANから特定の信号を受信することでパソコンの電源を入れる仕組みです。
製品にもよりますが、大抵は対応しています。

Wake on LANの仕組み

Wake on LANは"マジックパケット"と呼ばれる信号を送信することでパソコンの電源を入れます。
信号の仕組みは非常に単純です。
FF,FF,FF,FF,FF,FF + MACアドレスx16
このようにFF(255)が6回 + 起動したいパソコンのMACアドレスを16回繰り返したデータとなります。
そして、このデータをUDPでブロードキャストアドレスを使用して、LAN内すべての機械に無差別に送信することで電源を入れます。ポートは2304です。

例えば私の家の場合、送信先は以下のようになります。
192.168.0.255:2304
具体的なアドレスはご家庭によって変わってきますのでご自身でご確認ください。

Pythonを使ってマジックパケットを送信する

言葉で説明してもイメージがわかない思うので、さくっとPythonで書いちゃいましょう。

というわけでソースコードがこちら
この関数に":"区切りのMACアドレスを渡すことで、遠隔でパソコンの電源を入れることができます。

まず、最初の行が文字列としてのMACアドレスをバイナリに変換しています。
次の行でFF6個でヘッダーを作っています。
そして、forを使って後ろにMACアドレスを16個連結しています。超単純ですね。
最後にソケットライブラリを使ってudpのソケットを作成した後、ブロードキャストに送信できるように設定したのち、作ったバイナリデータを投げています。
たったこれだけです。こんなに簡単なプログラムで遠隔でパソコンの電源を入れることができます。

MACアドレスの確認方法

Windows11の場合はネットワーク設定から確認できます。
有線LANなのでイーサネットをクリック

一番下に物理アドレスというのがあります。これがMACアドレスです。

デバイス側の設定は?

さて、冒頭でお話ししましたが大抵の機器はWOLに対応していますが、デフォルトではこの機能がオフになっていることが多いです。
問題なのがここからで。この機能はパソコンの設定画面からオンオフできるものではなく、BIOSと呼ばれるさらに一歩踏み込んだ設定画面に入る必要があります。

Windows11の場合

一般的に、BIOS画面に入るにはF10キーやデリートキーなどを押しながら電源を入れるのですが、Windowsの場合で高速スタートアップが有効になっていると、これらの一般的な方法が通用しません。高速スタートアップは基本的にオンになっているので、全員がそうと考えて大丈夫です。
その場合の回避策としてWindowsの設定画面から再起動をすると1回だけBIOS画面に入ることができます。

設定画面でBIOSと検索

一番下の起動をカスタマイズするから再起動

パソコンが再起動すると、見慣れない青い画面になります。
トラブルシューティングをクリック

詳細オプションをクリック

UEFIファームウェアの設定を選択

再起動を押します。

もう一度パソコンが再起動し、BIOSが起動します。イマドキはUEFIですが、どっちも同じです。
そして、この画面はマザーボード(基盤)を作っているメーカーによって大きく違います。
私の場合は自作パソコンなので、こういうちょっとかっこいい感じのファームウェアが入ってます。
メーカー製のパソコンを購入した場合、大抵は真っ青な画面に白い文字だけということがほとんどです。また、この画面ではマウスが使えないことも多いです。キーボードのみで操作しましょう。

そしてどこに目的の項目があるかも、メーカーによってまちまちです。
根気よく探しましょう。
私の場合は以下の場所にありました。これ、項目からは絶対にわかんないですよ…。

設定が完了したら保存(多くの場合はF10)して再起動すれば、次回以降信号を受け取れるようになります。

まとめ

いかがでしたか?
パソコン電源を遠隔で入れる機能が、こんなに簡単に実現できるとは驚きですよね。
今回紹介した方法だと、電源を入れたいパソコンとは別に24時間稼働しているサーバー用のパソコン、ないしはこの信号を送ることができるマイコンなどが常駐している必要があります。
一応ポートを開放すればインターネット越しでも電源を入れることはできますが、セキュリティの都合上はあまりおすすめしません。
なので、今回の機能は24時間サーバーに搭載しにDiscordからチャットでパソコンの電源を入れられるシステムに組み込みたいと思います。
それではまたお会いしましょう。


情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。