スマートフォンなどのカメラで読み取ると無線 LAN に接続できる 2 次元バーコードがある。 これは ZXing ("zebra crossing") という OSS のプロジェクトが提案したのが発祥のようだ。 現在では Android や iOS といったプラットフォームが対応しており、デファクトスタンダードになっている。
仕様は ZXing のリポジトリに記載されている。 といっても難しいことはなくて、特定の形式の文字列を 2 次元バーコードにエンコードするだけで作れる。
今回は macOS で実際に作る方法を紹介する。
もくじ
下準備
まずは Homebrew を使って必要なパッケージをインストールしておく。 これは文字列を 2 次元バーコードにエンコードするのに使う。
$ brew install qrencode
仕様について
仕様では、以下のような形式の文字列が定義されている。 このような文字列を 2 次元バーコードにエンコードすると、読み取ったシステムが解釈した上で無線 LAN に接続できる。
WIFI:T:WPA;S:<SSID>;P:<Password>;;
まず、文字列は必ず WIFI: というプレフィックスで始まる。
これで、無線 LAN に接続するための情報が以降に記載されていることを示している。
プレフィックス以降はコロンを挟んだキーバリュー形式になっている。 それぞれのキーバリューはセミコロンで区切られ、文字列の末尾もセミコロンで終端される。 つまり、次のような形式になる。
WIFI:<key1>:<value1>;<key2>:<value2>;...;<keyN>:<valueN>;;
一般的な環境で使うキーは T と S と P だろう。
それぞれ T が認証形式 (WPA など)、S が SSID、P がパスワードを示している。
たとえば WPA 認証で、SSID が TEST、パスワードが PASSWD の場合は次のような文字列になる。
WIFI:T:WPA;S:TEST;P:PASSWD;;
T:WPA を指定した場合、WPA のどのバージョンが使われているかはシステム側で判断することになるようだ。
それ以外にも、特定の状況で使われるキーがいくつか定義されている。 詳しくは先述のリポジトリの内容を確認してもらいたい。
作ってみる
仕様が分かったところで、実際に 2 次元バーコードを作ってみよう。
先述の文字列を qrencode コマンドを使って実際にエンコードする。
$ qrencode -o wifi-qr-code.png "WIFI:T:WPA;S:TEST;P:PASSWD;;"
これで wifi-qr-code.png というファイルに 2 次元バーコードが書き出される。
実際に出力された 2 次元バーコードは以下のとおり。

ただし、上記の手順だとパスワードがターミナルのログに残ってしまう。
気になるときは read コマンドを介してシェル変数にパスワードを読み込むと良いだろう。
read コマンドに -s オプションをつけるとエコーバックされないのでログには残らない。
まあ、結局のところ読み取る 2 次元バーコードに平文で書き込まれるんだけどね。
たとえば、以下は WIFI_PASSWORD という名前のシェル変数に入れる場合の例になる。
$ read -s WIFI_PASSWORD
SSID も read コマンドで読み込む場合には -s はつけなくても良いだろう。
$ read WIFI_SSID
シェル変数に読み込んだ内容を元に 2 次元バーコードを作るには以下のようにする。
$ qrencode -o wifi-qr-code.png "WIFI:T:WPA;S:${WIFI_SSID};P:${WIFI_PASSWORD};;"
いじょう。
