🤹

Raspberry Pi OS Bookwormで複数Wi-Fi設定

2025/01/26に公開

背景

初期設定した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です。
https://wiki.archlinux.jp/index.php/Wpa_supplicant#wpa_passphrase_.E3.81.A7.E6.8E.A5.E7.B6.9A.E3.81.99.E3.82.8B

追加した設定を確認

nmcli connection showを実行して追加した設定が表示されればOKです。

ちなみに設定自体は/etc/NetworkManager/system-connections/<con-name>.nmconnectionファイルとして保存されています。
ファイル内容はこんな感じです。

wifi2.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に自動接続するようになります。

参考リンク

https://networkmanager.dev/docs/api/latest/nmcli.html
https://qiita.com/arakaki_tokyo/items/775c2963fb50ebf8038d#networkmanager-設定
https://qiita.com/ST_TzF/items/fce9f67c4afa3a8b4f0b

Discussion