概要
有線接続できないパソコンを、RaspberryPiを使ってWake on LAN(WoL)で起動してリモートデスクトップ接続します。
背景
こちらの記事の派生です。
せっかくVPNを設置したので、外出先からパソコンを起動してリモートデスクトップ接続します。
私の環境ではパソコンはWifiでLANに接続しているので、Wake on Wireless LAN (WoWLAN) で起動させないといけないのですが、試したところあまり安定しなかったので、余っていたRaspberryPiとパソコンを直接LANケーブルで繋いでRaspberryPiからWoLのマジックパケットを投げることにしました。
やりかた
RaspberryPiとパソコンを直結する
WoWLANも可能なパソコンのはずなのですが安定しませんでした。
有線ポートが空いているので、RaspberryPiとパソコンを直接LANケーブルで繋いで常時起動させているRaspberryPiからWoLさせます。
中継器を買う財力のある方は買ったほうがいいと思います。
中継器買いました。
Wake On Lanを有効にする
マザーボード側とOS側で設定する必要があります。
お使いのBIOSによりけりですが、大概、詳細設定モード(Advanced mode)のAPM Configurationとかにあります。
私の使っているマザーボードでは[Power On By PCI-E]という名前でありました。
OS(Windows)での設定は、NICのドライバでWoLを有効にする、高速スタートアップを無効にする、の2つです。
デバイスマネージャを開き、[ネットワークアダプター]配下のNICを選択します。
[詳細設定]タブの[Wake On Magic Packet]を[有効]にします。
[コントロールパネル]を開きます。[システムとセキュリティ]をクリックします。
[電源ボタンの動作の変更]をクリックします。
[現在利用可能ではない設定を変更します]をクリックします。
[高速スタートアップを有効にする]のチェックを外します。
RaspberryPiからWoLのマジックパケットを送る
RaspberryPiの初期設定については省略します。
WifiでLANに接続しており、SSHで繋げられ、常時起動していることを前提とします。(外出時だけ起動するでもいいですがラズパイの電気代はたかがしれているのでそのうち常時起動になると思います)
今回の構成ではパソコンとRaspberryPiを直結させているので、有線で通信できるように固定IPを設定します。
まずWindowsの方から設定します。
コントロールパネルを開き、[ネットワークとインターネット]をクリックします。
[ネットワークと共有センター]をクリックします。
[アダプターの設定の変更]をクリックします。
RaspberryPiと繋がっているNICをダブルクリックします。
[プロパティ]をクリックします。
[インターネットプロトコル バージョン4]をダブルクリックします。
[次のIPアドレスを使う]を選択し、LAN内で使われていない適当なレンジのIPを振ります。
デフォルトゲートウェイは設定しないほうがいいです。DNSも使わないので空白で大丈夫です。
[OK]で設定を保存したら、ついでにMACアドレスも調べておきます。
[詳細]をクリックします。
[物理アドレス]と書かれている行の値がWoLの時に使用するMACアドレスです。
次はRaspberryPiで設定します。
/etc/dhcpcd.conf を編集することでIPアドレスの設定をします。
viなどでdhcpcd.confを開き、eth0にパソコンに設定したIPアドレスと同じネットワークのIPアドレスを振ります。
interface eth0
static ip_address=192.168.200.2/24
これでパソコンとRaspberryPiで192.168.200.0/24のネットワークで通信できるようになりました。
RaspberryPi用のOSにはだいたいPythonが付属しているので、WoLはPythonで行ないます。適当なツールをダウンロードしてきても大丈夫です。
ホームディレクトリなどに次のファイルを配置します。
“MACADDR”は先手順で調べたパソコンのMACアドレス、BCADDRはWoL用ネットワークのブロードキャストアドレスを設定します。
import socket
import binascii
MACADDR = 'AA:BB:CC:11:22:33'
BCADDR = '192.168.200.255'
PORT = 7
macstr = ''.join(MACADDR.split(':'))
magicp = 'FF' * 6 + macstr * 16
magicp = binascii.unhexlify(magicp)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(magicp, (BCADDR, PORT))
sock.close()
動作確認
外出先から手持ちのスマートフォン(Android)でリモートデスクトップ接続することを想定しているので、スマートフォンに必要なアプリをインストールします。
OpenVPNクライアント、SSHクライアント、RemoteDesktopの役割をこなせるものであれば、紹介するもの以外を使っていただいて問題ありません。
VPN接続した後、SSHクライアントでRaspberryPiにログインします。
ホームディレクトリに配置したwol.pyを実行してパソコンを起動します。
Remote Desktopアプリでパソコン接続できれば完了です。
おまけ
Microsoft純正のRemote Desktopは入力を直接パソコンに送ってくれないので、物理キーボードを使っての操作はしにくいです。私は物理キーボードを使う場合は下のアプリ、仮想マウス等で十分な場合はMicrosoft純正のRemote Desktopアプリを使っています。
コメント