Raspberry Pi OS Bookwormで複数Wi-Fi設定
背景
初期設定したWi-Fiの他にサブのWi-Fi設定を追加したいことありますよね。
bookwormではWi-Fi設定の方法が変わり、従来のwpa_supplicant.confファイルが無くなってNetworkManagerでの管理になりました。
古い記事がまだ多いので設定手順の覚え書き。
環境
- Raspberry Pi Zero2W rev 1.0
- Raspberry Pi ImagerでOSをインストール
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
現在のWi-Fi設定を確認
NetworkManagerのCLIツールであるnmcliを使って確認します。
nmcli connection show
$ nmcli connection show
NAME UUID TYPE DEVICE
preconfigured b5e53ca9-4cda-48e2-9a88-d0ee4d9c9eaf wifi wlan0 # <- これが初期設定したWi-Fi
lo 7b8827bd-5c68-46be-8f56-bc5f15d2d3a5 loopback lo
Wi-Fi設定を追加
設定の追加
いきなり1コマンドにまとめるとこうなります。
# 変数を設定
CON_NAME="wifi2"
SSID="ssid-2"
PASSWORD="ssid2password"
PRIORITY=100 # 大きい方が優先度高
# 設定の追加
sudo nmcli connection add type wifi \
con-name "$CON_NAME" \
ifname wlan0 \
ssid "$SSID" \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk $(wpa_passphrase "$SSID" "$PASSWORD" | grep "psk=" | grep -v "#" | awk -F= '{print $2}') \
connection.autoconnect yes \
connection.autoconnect-priority $PRIORITY \
802-11-wireless.hidden false
変数の値は実際に設定したい値に書き換えてください。
CON_NAMEは設定ファイル名と設定のidになります。一意かつわかりやすければ大丈夫です。
SSIDはWi-Fiの識別名です。
PASSWORDはWi-Fiのパスワードです。
autoconnect-priorityは-999~999を指定可能で、大きい方が優先度高くなります。初期設定のWi-Fiは0(設定なし)です。
The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0.
https://networkmanager.dev/docs/api/latest/settings-connection.html
そのほか設定できるプロパティはこちらを参考。
正常に実行するとConnection 'wifi2' (UUID) successfully added.
と表示されます。
パスワードの部分何やってるの
平文パスワードでも動作するようですがセキュリティ的なお気持ちで、wpa_passphrase "SSID" "password"
コマンドでパスワードのhashを生成しています。
仮にSSID: ssid-2, password:ssid2passwordでwpa_passphraseコマンドを実行するとこうなります。
$ wpa_passphrase ssid-2 ssid2password
network={
ssid="ssid-2"
#psk="ssid2password"
psk=9af9dd7bbb0dc71fcdf36e3d0b57f9c3935a2625adfd60447ae561b36cf19a70
}
pskがパスワードのhashです。
追加した設定を確認
nmcli connection show
を実行して追加した設定が表示されればOKです。
ちなみに設定自体は/etc/NetworkManager/system-connections/
に<con-name>.nmconnection
ファイルとして保存されています。
ファイル内容はこんな感じです。
[connection]
id=wifi2
uuid=19e8b185-adf2-46ef-8a71-54d0fbb2bdc9
type=wifi
autoconnect-priority=100
interface-name=wlan0
[wifi]
hidden=false
mode=infrastructure
ssid=ssid-2
[wifi-security]
key-mgmt=wpa-psk
psk=9af9dd7bbb0dc71fcdf36e3d0b57f9c3935a2625adfd60447ae561b36cf19a70
[ipv4]
method=auto
[ipv6]
addr-gen-mode=default
method=auto
[proxy]
直接編集すればnmcliを使わずに設定できますが、設定ミスや権限に気をつけてください。
設定の編集・削除
sudo nmcli connection modify "$CON_NAME" プロパティ名 値
で編集できます。
sudo nmcli connection delete "$CON_NAME"
で削除できます。
$CON_NAMEは設定のidかuuidかpathで指定できるようです。
The connection is identified by its name, UUID or D-Bus path.
https://networkmanager.dev/docs/api/latest/nmcli.html
接続可能なWi-Fiアクセスポイントを確認
nmcli device wifi rescan
で接続可能なWi-Fiを再検索→list表示することで確認できます。
rescanしないと現在接続中のアクセスポイントしか出てこないので注意。
sudo nmcli device wifi rescan
nmcli device wifi list
$ nmcli device wifi list
IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY
* XX:XX:XX:XX:XX:XX ssid-1 Infra 11 540 Mbit/s 100 ▂▄▆█ WPA2
XX:XX:XX:XX:XX:XX ssid-2 Infra 11 130 Mbit/s 100 ▂▄▆█ WPA2
XX:XX:XX:XX:XX:XX ssid-3 Infra 6 130 Mbit/s 78 ▂▄▆_ WPA2 WPA3
あるはずのWi-Fiが出てこない場合はルーターを再起動するなどしてみてください。
ちなみにiPhoneのネットワーク共有の場合、何のデバイスも繋がずに90秒経過するとアクセスポイントが検出できなくなるようなので、一旦ネットワーク共有をオフ→再度オンにして一覧に出てくるか確認します。
接続する
追加したWi-Fiアクセスポイントにnmcli connection up
で手動で接続してみます。
sudo nmcli connection up "$CON_NAME"
接続できたら現在のSSHセッションの反応がなくなるので、ローカル側も同じWi-Fiに切り替えます。
新しいWi-Fiに接続した状態でラズパイのホスト名を検索します。
arp raspberrypi.local
IPアドレスが出てくれば接続成功です🎉
autoconnect-priorityを設定した場合はsudo reboot
などで再起動すると優先度が高いWi-Fiに自動接続するようになります。
参考リンク
Discussion