2025-01-26T16:00:00+09:00 追記 完全に理解した

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=wlp4s0wpa_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 する ifupwpa_supplicant を起動するため、後に設定する wpa_supplicant@.service とプロセスが衝突するのを防ぐ必要がある。ついでに、ifup は dhclient も実行するようだ。

つぎに、/etc/wpa_supplicant/wpa_supplicant-${IFNAME}.conf を作成する。man を参考に、ctrl_interfaceudpate_config だけ書いておき、具体的な AP の設定は wpa_cli でやることにする。

最後に wpa_supplicant@${IFNAME}.service を有効化・開始する。これで wpa_cli 経由で複数の AP を登録することができる。

ifup@.service を止めると dhclient を手動で発行しないといけない。適当に新たにサービスを作るか、またはすでになにか用意されていないか確認する。