手上有塊古董 Raspberry Pi Model B+,偶爾拿來連 ssh 玩玩 Linux,由於是初代沒 Wifi 的型號,同樣用上老舊的 Wifi dongle(USB 無線網卡)。

然而不知從何開始,總是無法從分享器後台查到 IP,也就是連線失敗。無論刷了多少遍 image,貼上多少次 wpa_supplicant.conf 到 SD 卡也一樣,無奈當時身邊只有一台筆電,沒外接鍵盤、螢幕根本無從判斷問題。

最近剛 setup 好遠端工作環境,多了大螢幕跟機械鍵盤效率加倍,也順便來解決埋藏已久的 issue。

過程

從本機能順利登入、下指令也正常反應,但當我直接跑 raspi-config 工具設定無線網路時,卻只顯示 WPA Supplicant 失敗的錯誤。

於是再三檢查 .conf 檔,試著用指令手動設定 wpa_supplicant 時,得到了關鍵的錯誤訊息 - 驅動不支援:

nl80211: Driver does not support authentication/association or connect commands

拿這段去估狗後,找到 wiki 與可能解法。

測試

首先 kill 掉正在執行的無線網路:

1
sudo killall wpa_supplicant

帶上 -D wext 參數,降級用傳統的 wext 驅動,重新設定無線網路介面(-i 請參考 ifconfig 自行判斷介面名稱):

1
sudo wpa_supplicant -B -i wlan0 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf

dongle 燈號開始閃爍,順利連上 Wifi!就此確認是預設驅動的影響。

設定預設驅動

為了讓 Raspberry Pi 每次重開機後,都會自動以 wext 驅動無線網卡,不用再接螢幕鍵盤設定,我們只需編輯 /etc/dhcpcd.conf 檔案,寫入該介面的預設環境即可:

1
2
3
interface wlan0
env ifwireless=1
env wpa_supplicant_driver=wext

從此開心用 ssh 玩 Raspberry Pi,希望這篇對用老舊 dongle 的人有幫助。

Reference