2019/02/16(土)Raspberry Pi Zero WからUSBケーブル1本でWindows PCをwakeupする(前編)

2019/02/22 14:59 PC(全般)
■やりたいこと
無線LANを経由して、屋内の離れた場所にあるPCをスリープないし休止からwakeupする。
できれば、外出先からVPN->自宅サーバを経由してwakeupもできるようにしたい。

■前提
wakeup対象のPCはWindows10 Pro。
USB無線LANドングルでホームネットワーク(仮に192.168.1.0/24とする)に接続されている。

このPCは「有線LANにはつながっていない」(重要)。

■検討
技術的には、
1) Intel AMT
2) WoWLAN
3) USB無線LANドングルを諦める。APを設置し、APを対象PCに有線LANで接続してAPからWOL
4) Raspberry Pi Zero Wなどの無線LANを備えたシングルボードコンピューターを対象PCにつないでそこからwakeup

が候補に上がる。

1)はIntel QXXXチップセットが要件だが、自作用にはほぼ出回っていないので却下。
2)は無線認証情報をスリープ・サスペンド時にどこにおいておくかという問題があって、WoWLANはハードウェアと技術的制約が厳しいという理解(実現できるケースもあるらしいがノートPC等のAll-in-One構成の場合だけ?)。
3)は消費電力がドングルよりかなり大きくなりそう。外部からのwakeupができるかが不明。
4)は技術的には問題なさそうだし、消費電力も抑えられそう。

ということで、4)コースをやってみることにした。

■購入&用意した機器
1) Raspberry Pi Zero W @8.00GBP
2) OTG LANケーブル(MicroUSB-USB TypeA) @120円
3) MicroSDカード 4GB @自宅に転がってたものを流用
4) MicroUSB-USB TypeA変換ケーブル @400円くらい
5) USB有線LAN変換アダプタ(PLANEX USB-LAN100R) @1200円くらい
6) Cat5e LANケーブル @自宅に転がってたものを流用
7) 専用公式ケース @5.00GBP

2)を電源ポートに、4)~6)をOTGポートに接続する。
3)はRaspberry Piのメインストレージ、7)はおまけ。

本体としては他にVoCore2などが候補に上がったが、入手性・価格・工作難易度等検討して、Raspberry Pi Zero Wに決めた。

購入当時は技適取ったばかりで国内の入手性が悪かったので、Pimoroniで頼んだが今はスイッチサイエンスやKSYで簡単に買えると思う。海外だと他にはMODMYPIとか。都度、必要なオプション類と値段・送料を見比べて判断すれば良し。

ヘッドレスインストールする前提なのでminiHDMI<->HDMI変換アダプタは調達しなかった。

本記事(前編)で作成する有線LANでのwakeupには1)~6)がマスト。
最終的に、次記事のUSBガジェットとしてwakeupする方法だとセットアップ含めて1)~3)がマストで、実は4)~6)は無しでいける。

■構成
PCを移動させるときに電源ケーブルが2本生えているのは気になるため、とりあえず[A構成]を目指す。
[A構成]
+----------+
|    PC    |有線LAN
|  Windows +--------------------+
+-----+----+                    |OTG Port
 USB  |                         |(USB-有線LAN変換アダプタ)
      |                  +-------------+
      +------------------+Ras Pi Zero W|
               Power Port|             |
                         +-------------+

休止状態でのUSBへの電源供給がうまくいかなかったら[B構成]。
[B構成]
+----------+
|    PC    |有線LAN
|  Windows +--------------------+
+----------+                    |OTG Port
                                |(USB-有線LAN変換アダプタ)
                         +-------------+
           +-------------+Ras Pi Zero W|
           |   Power Port|             |
           |             +-------------+
           |
     +-----+-----+
     |AC-MicroUSB|
     +-----+-----+
           |
       +-------+
       |AC100V |
       +-------+

■セットアップ方法(ログインまで)
基本下記サイトに従ってセットアップすれば良いと思う。
ラズパイ の OS イメージを焼くときは Etcher が 便利 & UI カッコいい | 験なきものを思はずは

wpa_supplicant.confは手元のdebian環境で作成したので、そのときだけこちらを参考に。
Debian で WPA-PSK(AES) 方式で無線接続 - wpa_supplicant 編 - Qiita

ログイン時はこっち。
Raspberry Pi zero W のヘッドレスインストール(キーボードやマウスなしでRaspbianをインストールする方法)

やったことを一応まとめると、https://www.raspberrypi.org/downloads/raspbian/からLITEイメージをダウンロードして、Windows機でetcherを使用してmicroSDにイメージを書き込み。

一度アンマウント->マウントし直して、ファイルマネージャでsshファイル(空ファイル)とwpa_supplicant.confをWindowsから見えるドライブのルート直下に置いた。

この状態で、Raspiberry Pi自体を電源につないで起動。初期化を待ち、DHCPで割り当てられたIPアドレスをなんとか探してsshでログインする。

なお、実は今回USB有線LAN変換アダプタを自動認識してくれたの有線でセットアップした。有線でセットアップする場合、wps_supplicant.confは後で置いても良い。

Ras Pi Zero Wに関しては無線セットアップで問題ないと思うが、自分はRasPi初めてで最初は暗中模索だった。

無線認証が1ハードルあるので、不安な人・あとから調達がめんどくさい人は、有線LAN用意しといたほうが安心感があるかも。

DHCPはある前提なので無い人は別の情報を探してほしい。

[参考]
[メモ] Raspberry Pi ZeroをUSB COMポートデバイスとして使う - Qiita
RaspberryPi Zero Wのワイヤレスセットアップ - Qiita
raspberry pi + 無線LANアダプタでWPA接続 - Qiita
Raspberry Pi ZeroをUSBケーブル1本で遊ぶ | Japanese Raspberry Pi Users Group
[メモ] Raspberry Pi ZeroをUSBケーブル一本でインターネット接続!(キーボード・マウス・モニター必要なし) - Qiita
Raspberry Pi Zero(W)のセットアップ - Qiita

なお、解説サイトにはCOMポート認識でセットアップさせる方法がよく載っているが、自分はうまくいかなかった(win7 SP1 64bit環境)。これは後述の電源断が悪かったかもしれない。とはいえ、有線/無線LAN+sshでセットアップする方がハマりが少ないと思う。

また、RasPiをネットワークから探すのにBonjourを使う方法もよく載っているがこれも入れるのに失敗(Apple不慣れなせい?)。ネットワーク内の有効IPアドレスをリストアップするソフト(nmapでもSoftPerfect Network Scannerでも)でなんとか探せるので無理していれる必要はないと思う。

つまづいたこと。

最初、RasPiの状態把握の方法がわからずに、パーティショニングが終わらない状態で電源断をしてしまったらしく、IPアドレスは取れてるのにsshアクセスが出来ない現象が発生した。

Ras Pi Zero Wには小さいLEDが付いており、これが常時点灯になってない状態でケーブル引っこ抜きとかをしてはまずいようだ。

特に初回はパーティショニングをしているとのこと。

LITEイメージをSDカードに焼き直して、最初から手順をなぞったらsshログインできるようになった。

■セットアップ(sshログインして作業)
▼piユーザのパスワード変更
$ passwd

▼パッケージ更新
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
ここまではやったほうが良い。

もちろん、アップグレード後に
$ sudo reboot
する。

sudo rpi-updateは安定版ではない最新版が入ってしまうとのことなのでやらない。

Ras Piの無線LANドライバは古いとパワーマネジメントとぶつかるのか、しょっちゅうハングアップするという問題があるらしくセキュリティの問題以上に一定のバージョンに上げる必要がある模様。

[参考]
wlan freezes in raspberry pi 3/PiZeroW (Not 3B+) · Issue #1342 · raspberrypi/linux · GitHub

logにこういうのが出てきたときはこれ。
brcmfmac: brcmf_sdio_hostmail : Unknown mailbox data content: 0x40012
今の所安定しているが、場合によってはパワーマネジメントを切る方法も試みる。

▼dhcpcd.confの編集
ifconfigして有線がeth0、無線がwlan0で認識されていることを確認。

eth0,wlan0用の固定IPアドレス設定を追加してやる。
下記設定例は、

無線LAN: 192.168.1.0/24ネットワーク(ホームネットワーク。デフォルトゲートウェイ192.168.1.1)
有線LAN: 192.168.2.0/24ネットワーク(wakeup対象のPC(192.168.2.1)とRasPiの有線だけ)

の例。

/etc/dhcpcd.confに下記設定を追加。
interface eth0
metric 50
static ip_address=192.168.2.2/24

interface wlan0
metric 100
static ip_address=192.168.1.99/24
static routers=192.168.1.1
static domain_name_servers=8.8.4.4 8.8.8.8

▼wakeonlanを導入
$ sudo apt-get install wakeonlan

▼sshの設定
piユーザ用のssh用のキーペアを2セット作って公開鍵をauthorized_keysに書く。

片方はログイン作業用、片方はwolコマンド発行用。

/home/pi/.ssh/authorized_keys
ssh-rsa XXXXXXXXXXX work_user
command="/usr/bin/wakeonlan -i 192.168.2.255 MM:MM:MM:MM:MM:MM" ssh-rsa YYYYYYYYY wol_user
MM:MM:MM:MM:MM:MMはwakeup対象PCのNICのMACアドレス。

.ssh/authorized_keysはなければ作成。
いつもどおりパーミッションに注意(.ssh ⇒ 700, authorized_keys ⇒ 600)。

ネットワーク環境によってはfromをつけてもいいかも。

必ず、1回sshでログインできることを確認してから、/etc/sshd/sshd-configを変更して下記を追加。
PermitRootLogin no
PasswordAuthentication no
$ sudo reboot
より気にするならpiユーザ以外にしたほうがいいかも。

■wakeup方法
例えば、192.168.1.0/24のWindows機からwakeupする場合、
> ssh.exe -i pi_wol_key(wolコマンド発行用の秘密鍵) -o StrictHostKeyChecking=no pi@192.168.1.99
とかで、RasPiが有線側から192.168.2.0/24にブロードキャストして対象PCがwakeupする。

なお、Windows側でUSBセレクティブサスペンドをOFFにする、でサスペンド中の電源供給もうまく行ったため、上の[構成]は[A構成]にできた。

■消費電力
REX-BTWATCHで測定。

ちなみに購入機器を含め、USB-有線LAN変換アダプタは100BASEのものを2種類試した。
(1) UtechSmart USB 2.0-10/100 Fast Ethernet
(2) PLANEX USB-LAN100R

・ACアダプタのみ; 0.15~0.2W程度
・ACアダプタ + RasPi Zero W: 0.7~1.0W
・ACアダプタ + RasPi Zero W + (1): 2.0~2.2W
・ACアダプタ + RasPi Zero W + (2): 0.9~1.2W

ということで、各デバイスの消費電力は、
・Ras Pi Zero W: 0.5~0.8W
・UtechSmart USB 2.0-10/100 Fast Ethernet: 1.2W前後
・PLANEX USB-LAN100R: 0.2W前後
となる。

(1)はLEDありで、(2)はLEDなしなのでその差も大きい気がするがUSB-有線LAN変換アダプタは想像以上に消費電力差があるようだ。

気にする人は選んだほうが良いと思う。

■まとめ
Raspberry Pi Zero Wを使って、PCからのUSB電源で完結するwol装置を作れた。消費電力はUSB-有線LAN変換アダプタを選べばなんとか1W前後。ただ、変換アダプタやらなんやらがつながってる関係上、思ったよりケーブル周りがすっきりしなかった。

ここで一応目的は達成したがケーブルがPCと2本もつながってるのが如何にも非効率な感じである。

ケーブル1本構成を実現したRaspberry Pi Zero WからUSBケーブル1本でWindows PCをwakeupする(後編) - 色々日記(ざ・めも)に続く。
OK キャンセル 確認 その他