Day After Day
tsurezure naru mamani...
ANOTHER DECADE

from 2021 when it's begining after/with CORONA Virus.

WiFi (wlan0) が上手く起動しない

2月
6
2026
Back
HOME


Raspterry Pi のイメージャでデフォルト設定した WiFi が起動しないときの地獄模様。今までも有りはしたが、割とある方法でさらっと解決した。今回は wlan0すら見えず、やっと見えたかと思いきや IPアドレスを取得してくれない。もう味わいたくないのでメモメモ(._.)φ

GUIでは便利な NetworkManager だが!?


これは、もう長年設定変更して使い慣れている systemd-networkd と wpa_supplicant@wlan0.service, systemd-resolved を使用することとする。 設定の詳細についてはテキストモードでWi-Fi接続を安定にするを開いて、いつもコピペで済ます。

これで、自宅、車、WiFiスポット(スマホ・テザリング)さえ有れば何処でも即接続出来る。

設定終了後再起動しても wlan0 が現れないとき


先ず、次のコマンドを打ってみる。

$ sudo rfkill unblock wifi

参考に、接続出来ていたとき、いつの間にか切断している場合は スリープを疑う。

unblock で動いたときの恒久化処理

次の様な、ユニットファイルを作成する。

$ sudo nano /etc/systemd/system/unblock-wifi.service
  GNU nano 7.2                 /etc/systemd/system/unblock-wifi.service
[Unit]
Description=Unblock WiFi Modem
DefaultDependencies=no
Before=sys-subsystem-net-devices-wlan0.device
Before=wpa_supplicant@wlan0.service
Before=systemd-networkd.service

[Service]
Type=simple
ExecStart=/usr/sbin/rfkill unblock wifi

[Install]
WantedBy=multi-user.target

これを再起動してチェックする

$ sudo systemctl daemon reload
$ sudo systemctl enable unblock-wifi.service
$ sudo reboot


wlan0 は無事現れたが IPアドレスを取得できない


前項のユニットファイルを見ても分かるようにサービスの起ちあげには順番が有り、IPアドレスを取得出来るタイミングずれているとこの現象が出る。

$ sudo nano /etc/systemd/system/wpa_supplicant@.service
  GNU nano 7.2                 /etc/systemd/system/wpa_supplicant@.service
[Unit]
Description=WPA supplicant daemon (interface-specific version)
After=unblock-wifi.service sys-subsystem-net-devices-%i.device
Requires=sys-subsystem-net-devices-%i.device
Before=network.target
Wants=network.target unblock-wifi.service

[Service]
Type=simple
ExecStart=/sbin/wpa_supplicant -i%i -c/etc/wpa_supplicant/wpa_supplicant-%i.conf

[Install]
Alias=multi-user.target.wants/wpa_supplicant@%i.service
この順番、After や Before、Requires に指定されるサービスについて ChatGPT 聞いてみた。しかし思い通りにはIPアドレスを取得出来なかった。 (今後もう少し練ってみて、上手く稼働したらここを修正したいと思う)

そこで特効薬的保険


本筋は、上述の順番を調整することであるが取り敢えず動かした上で、本来のサービスを稼働させる必要が有ったので保険的処理をする。

$ sudo nano /etc/systemd/system/wifi-restart.service
  GNU nano 7.2                 /etc/systemd/system/wifi-restart.service
[Unit]
Description=WiFi Restart Service

[Service]
Type=simple
ExecStart=systemctl restart wpa_supplicant@wlan0.service

[Install]
WantedBy=multi-user.target

更にこれを、指定したタイミングで起動させる為にタイマーを設定する。

$ sudo nano /etc/systemd/system/wifi-restart.timer
  GNU nano 7.2                 /etc/systemd/system/wifi-restart.timer
[Unit]
Description=WiFi Restart Timer

[Timer]
OnBootSec=2min

[Install]
WantedBy=timers.target
特に遅い昔の Raspberry Pi であったことと、常に再起動することも無いので 2m (2分) に設定した。30sec のような秒指定も出来る。

$ sudo systemctl enable wif-restart.timer
$ reboot
今回タイマを設定しているので、タイマのみ有効にして、サービスは無効のままとし、タイマに起動させる。 結果は IPアドレスを取得もでき一先ずOKとなった。

Back
HOME