Debian Bookworm のインストールウィザードに従って Wi-Fi の設定をすると、/etc/network/interfaces にアクセスポイントに関する具体的な設定が直接書かれ、/etc/wpa_supplicant/*.conf は何も読まれない。
これだと一つしかアクセスポイントを設定できなく (できる?)、また wpa_cli で save_config ができず不便なので、wpa_supplicant の設定ファイルを読むように設定する。
まず、/etc/network/interfaces は ifup/ifdown によって読まれる (INTERFACES(5))。
ifup はこれを読んでネットワークインターフェースを UP したりプロトコルデーモンを起動したり wpa_supplicant を起動したり (今回はこれをやめてほしい) dhclient を実行したり (これはやってほしい) する。
ということは、/etc/network/interfaces を適当に記述して ifup (systemd unit ifup@.service により呼び出し) が *.conf を読まない wpa_supplicant を起動しないようにすればよい。
具体的には、Debian install wizard によって /etc/network/interfaces に
# The primary network interface
allow-hotplug wlp4s0
iface wlp4s0 inet dhcp
wpa-ssid "your_ssid"
wpa-psk "your_psk"
と書かれたとすれば、wpa-* なる行を削除してやればいい。
# The primary network interface
allow-hotplug wlp4s0
iface wlp4s0 inet dhcp
これで、ifup@.service を start しても意図しない wpa_supplicant は起動しなくなった。
続いて、プリインストールされており便利だが初期インストール時では無効化されている wpa_supplicant@${IFNAME}.service を有効化する。
上記の interfaces ファイルを仮定すれば IFNAME=wlp4s0。
wpa_supplicant@.service を見るとわかるが、これ (instantiate された サービステンプレート) はテンプレート部分の suffix をつけた wpa supplicant config file /etc/wpa_supplicant/wpa_supplicant-${IFNAME}.conf を読むので、同 wpa_supplicant-${IFNAME}.conf の初期設定を書く。オンラインマニュアルの wpa_supplicant.conf を参考に、
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
とした。あとは wpa_cli で設定をし save_config を発行してもいいし、同コンフィグファイルを手動で編集してもよい。
以下過去の記述
ます、ifup@.service を止めて無効化する。このサービスが ExecStart する ifup が wpa_supplicant を起動するため、後に設定する wpa_supplicant@.service とプロセスが衝突するのを防ぐ必要がある。ついでに、ifup は dhclient も実行するようだ。
つぎに、/etc/wpa_supplicant/wpa_supplicant-${IFNAME}.conf を作成する。man を参考に、ctrl_interface と udpate_config だけ書いておき、具体的な AP の設定は wpa_cli でやることにする。
最後に wpa_supplicant@${IFNAME}.service を有効化・開始する。これで wpa_cli 経由で複数の AP を登録することができる。
ifup@.service を止めると dhclient を手動で発行しないといけない。適当に新たにサービスを作るか、またはすでになにか用意されていないか確認する。