從睡眠中醒來時,有時我的 Linux 筆記型電腦無法重新建立 Wi-Fi 網路連線。
有趣的是,重啟即可修復,儘管必須完全關閉/重新啟動有點痛苦。
換句話說,當我從睡眠中醒來時,有時我的 HP Debian Buster v10.4 筆記型電腦無法重新連接到我的家庭存取點。這種情況的發生率非常粗略,大約每 6 次過夜就有 1 次左右。
注意到 Wi-Fi 已關閉後,按一下rescan for wireless networks
並不能修復它。另外,iw wlan0 scan
(或明確地iw dev wlan0 scan
)給出:「命令失敗:網路已關閉(-100)」。
仔細研究輸出,journalctl -n 1000 -u NetworkManager -u wpa_supplicant
我可以看到,在“NetworkManager state is now ASLEEP”(即醒來時)行之後不久,第一個麻煩似乎出現在一行:“設備 (wlan0):請求方介面狀態:已完成 -> 已停用」。
我認為這應該是“...完成 -> 斷開連接”,它出現在工作喚醒中,即醒來後 WI-fi 再次正常工作時。
什麼不能解決這個問題:
- 登出並重新登入;
- 又睡又醒,
- 冬眠然後從冬眠中醒來
- 重新啟動網路管理員(使用
$ sudo systemctl restart NetworkManager.service
) - 跑步
$ sudo nmcli networking on
- 使用以下命令刪除並重新建立
wlan0
網路設備:iw dev wlan0 del
,然後iw phy phy0 interface add wlan0 type managed addr ca:xxx:4b
。儘管這看起來可行,但 Wi-Fi 仍然不行。
我還檢查過$ rfkill list
沒有報告任何阻塞。
這是 nmcli 處於以下狀態時的狀態報告:失敗的(網路關閉)狀態。注意將軍州以下。 (我混淆了真實地址。)
$ nmcli device show wlan0
GENERAL.DEVICE: wlan0
GENERAL.TYPE: wifi
GENERAL.HWADDR: 00:26:##:##:##:2A
GENERAL.MTU: 1500
GENERAL.STATE: 20 (unavailable) <-- this is not right
GENERAL.CONNECTION: --
GENERAL.CON-PATH: --
...
另外,這是來自普通的工作中的無線網路連線:
$ nmcli device show wlan0
GENERAL.DEVICE: wlan0
GENERAL.TYPE: wifi
GENERAL.HWADDR: 00:26:##:##:##:2A
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected) <--- this is when it works
GENERAL.CONNECTION: Auto NETGEAR14
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]: 192.168.1.128/32
IP4.GATEWAY: 192.168.1.1
IP4.ROUTE[1]: dst = 192.168.1.128/32, nh = 0.0.0.0, mt = 600
IP4.ROUTE[2]: dst = 192.168.1.1/32, nh = 0.0.0.0, mt = 600
IP4.ROUTE[3]: dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.ROUTE[4]: dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 600
IP4.DNS[1]: 192.168.1.1
IP6.ADDRESS[1]: fe80::...:7f2a/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 600
IP6.ROUTE[2]: dst = ff00::/8, nh = ::, mt = 256, table=255
有任何想法嗎?有沒有辦法重新初始化物理層0無線電驅動程式?
答案1
調試此問題的最佳方法是在連接消失時檢查系統日誌訊息:
journalctl -n 1000 -u NetworkManager -u wpa_supplicant
NetworkManager 不會直接使用核心 Wi-Fi API,它依賴 wpa_supplicant。可能是wpa_supplicant.service
被卡住了,或是一直崩潰,或是與其他Wi-Fi 工具(例如 iwd、connman 或由另一個應用程式意外啟動的不同 wpa_supplicant 實例)。
您可以透過執行以下命令來增加 NetworkManager 的詳細程度:
nmcli gen log level debug
和 wpa_supplicant 透過運行:
busctl set-property fi.w1.wpa_supplicant1 \
/fi/w1/wpa_supplicant1 \
fi.w1.wpa_supplicant1 DebugLevel s debug
另外,嘗試完全繞過 NM 和 w_s 並直接要求核心掃描網路 - 如果有效,則問題很可能出在用戶空間方面;如果沒有,則可能是在驅動程式/硬體方面:
iw wlan0 scan