Tech Nuggets (15)

WiFi に接続できる QR コードを生成する

Posted:

お客人に自宅の WiFi を使ってもらいたいときがある。 パスワードを紙に書いて、渡して、打ち込んでもらって、と非常に手間である。 書く方は手書きの文字を披露する貴重な機会と考えれば良いかもしれない。 けれど入力する方はただただ手間だろう。

読み込むことで接続が完了するような QR コードを生成し、この手間をなくしたい。

QR コードにするデータについて

以下の書式の文字列を QR コード化することで実現できる。

WIFI:T:WPA;S:"mynetwork";P:"mypassword";;

文字列中の各キーと値については以下の通り:

キー
TWPA認証タイプ
S"mynetwork"SSID
P"mypassword"パスワード

T (認証タイプ) は次のいずれかを指定する:

S (SSID) と P (パスワード) は例のように " で囲わないと Hex として扱われる可能性があるらしいので注意が必要だ。


他にも E, A, I, PH2 といったキーが存在するが、すべて WPA2-EAP に関するオプションなので割愛する。 SSID が秘匿されている場合に付与するキー H (値は true / false) も存在するが、私の環境では H:true を含めなくても秘匿された SSID に接続できた。


この文字列では : ; " \ に特別な意味がある。SSID・パスワードにこれらの文字を含める場合 \ でエスケープしなくてはならない。

例えば SSID が ho:ge;fu"ga の場合、以下のようにエスケープする:

SSID を " で:文字列
" で囲うS:"ho:ge;fu\"ga";
" で囲わないS:ho\:ge\;fu\"ga;

QR コードの生成

QR コードの生成には qrencode という CLI ツールを利用した。

$ qrencode -s 8 -o wifi_pw.png 'WIFI:T:WPA;S:"mynetwork";P:"mypassword";;'

上のコマンドで下の画像が出力される。

Picture: wifi_pw.png wifi_pw.png

あとがき

こんなに便利な方法があるとは。 もっと早く知りたかった。

Android は昔から、iOS は 11 以上で動作すると読んだが確認していない。 そもそもこの書式は誰が定義しているものなのだろうか。