お客人に自宅の WiFi を使ってもらいたいときがある。 パスワードを紙に書いて、渡して、打ち込んでもらって、と非常に手間である。 書く方は手書きの文字を披露する貴重な機会と考えれば良いかもしれない。 けれど入力する方はただただ手間だろう。
読み込むことで接続が完了するような QR コードを生成し、この手間をなくしたい。
QR コードにするデータについて
以下の書式の文字列を QR コード化することで実現できる。
WIFI:T:WPA;S:"mynetwork";P:"mypassword";;
文字列中の各キーと値については以下の通り:
キー | 例 | |
---|---|---|
T | WPA | 認証タイプ |
S | "mynetwork" | SSID |
P | "mypassword" | パスワード |
T
(認証タイプ) は次のいずれかを指定する:
WEP
WPA
WPA2-EAP
nopass
S
(SSID) と P
(パスワード) は例のように "
で囲わないと Hex として扱われる可能性があるらしいので注意が必要だ。
他にも E
, A
, I
, PH2
といったキーが存在するが、すべて WPA2-EAP
に関するオプションなので割愛する。 SSID が秘匿されている場合に付与するキー H
(値は true
/ false
) も存在するが、私の環境では H:true
を含めなくても秘匿された SSID に接続できた。
この文字列では :
;
"
\
に特別な意味がある。SSID・パスワードにこれらの文字を含める場合 \
でエスケープしなくてはならない。
例えば SSID が ho:ge;fu"ga
の場合、以下のようにエスケープする:
QR コードの生成
QR コードの生成には qrencode
という CLI ツールを利用した。
$ qrencode -s 8 -o wifi_pw.png 'WIFI:T:WPA;S:"mynetwork";P:"mypassword";;'
上のコマンドで下の画像が出力される。
あとがき
こんなに便利な方法があるとは。 もっと早く知りたかった。
Android は昔から、iOS は 11 以上で動作すると読んだが確認していない。 そもそもこの書式は誰が定義しているものなのだろうか。