網絡配置/無線網絡配置
網絡配置的主頁面是網絡配置。
配置無線網絡一般分兩步:第一步是識別硬件、安裝正確的驅動程序並進行配置,安裝盤中已經包含驅動,但是通常需要額外安裝;第二步是選擇一種管理無線連接的方式。這篇文章涵蓋了這兩方面,並提供了無線管理工具的連結地址。
#iw 段落描述了如何使用 iw包 來手動管理你的網絡接口/無線局域網連接。網絡配置#網絡管理器段落介紹了幾個可以自動管理您無線網絡接口的程序。這些程序中的某些會包含一個圖形界面,而所有的程序都支持網絡配置文件(在頻繁切換網絡時有用,比如使用筆記本電腦的場合)。
設備驅動[編輯 | 編輯原始碼]
默認的 Arch Linux 內核是模塊化的,硬件的設備驅動作為內核模塊保存在硬盤上。啟動時,udev 會根據硬件加載不同的驅動模塊,從而允許創建網絡接口。
除了相應的驅動程序之外,某些無線晶片組還需要固件。linux-firmware包 提供了很多固件,然而專有固件並不包含在內,需要另行安裝。這部分指南請參考 #安裝 driver/firmware。
檢查驅動狀態[編輯 | 編輯原始碼]
根據設備的連接方式是 PCI(e) 或 USB,對應地執行 lspci -k
或 lsusb -v
可以檢查設備驅動是否已經加載:
$ lspci -k
06:00.0 Network controller: Intel Corporation WiFi Link 5100 Subsystem: Intel Corporation WiFi Link 5100 AGN Kernel driver in use: iwlwifi Kernel modules: iwlwifi
grep usbcore
的輸出應當類似於 usbcore: registered new interface driver rtl8187
。
同時也要通過 ip link
命令來查看無線接口是否已經創建。通常來説,設備名以字母「w」開頭,例如wlan0
或 wlp2s1
。確認之後,使用以下命令使設備上線:
# ip link set <设备名> up
例如,接口設備名是 wlan0
,此命令就是 ip link set wlan0 up
。
- 如果你從命令中得到如下錯誤:
RTNETLINK answers: Operation not possible due to RF-kill
錯誤,請確保設備沒有被 軟鎖定 或 硬鎖定,詳情請參考 Rfkill 説明。 - 如果你從命令中得到如下錯誤:
SIOCSIFFLAGS: No such file or directory
, 那麼大概率您的無線晶片組需要額外的固件來運行。
檢查內核信息中關於已加載固件的信息:
# dmesg | grep firmware
[ 7.148259] iwlwifi 0000:02:00.0: loaded firmware version 39.30.4.1 build 35138 op_mode iwldvm
如果沒有相關的輸出,那麼需要在消息中查找關於您之前指定的模塊的完整輸出(本示例中的模塊是iwlwifi
),然後查找對應的錯誤信息:
# dmesg | grep iwlwifi
[ 12.342694] iwlwifi 0000:02:00.0: irq 44 for MSI/MSI-X [ 12.353466] iwlwifi 0000:02:00.0: loaded firmware version 39.31.5.1 build 35138 op_mode iwldvm [ 12.430317] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEBUG disabled ... [ 12.430341] iwlwifi 0000:02:00.0: Detected Intel(R) Corporation WiFi Link 5100 AGN, REV=0x6B
如果需要的內核模塊已經加載且網絡接口已經上線,您可以跳過下一節的內容。
安裝驅動程序/固件[編輯 | 編輯原始碼]
根據獲得的信息,在下面網址查找硬件支持:
- 參閱表格 Linux 支持的無線驅動並轉到特定驅動程序頁面,其中包含受支持設備的列表。
- Ubuntu Wiki 維護了一個設備被內核和用户空間驅動支持狀況的列表。
- Linux 無線支持頁面和硬件兼容性列表(HCL)也維護了一個內核友好的設備列表。
注意有些廠商的產品名稱相同,實際使用的晶片組卻不同。usb-id (USB設備) 或 pci-id (PCI設備)才是唯一識別名稱。
如果您在上述列表裏找到了您的無線網卡,請按照驅動與固件排錯中的指示操作,這一節中包含有關安裝某些特定無線網卡所需的驅動程序和固件的信息。完成後,再次檢查驅動程序狀態。
如果您的上述列表裏沒有找到您的無線網卡,那麼大概率您的網卡僅在windows作業系統下受支持。對於這些設備,您可以嘗試使用 #ndiswrapper。
工具[編輯 | 編輯原始碼]
同其他網絡設備一樣,無線網絡接口可以通過 iproute2包 包提供的 ip 命令來管理。
管理一個無線網絡連接需要一套基本的工具。可以使用一個網絡管理器或直接使用以下表格中的一個:
軟件 | 軟件包 | WEXT | nl80211 | WEP | WPA/WPA2/WPA3 | Archiso [1] |
---|---|---|---|---|---|---|
wireless_tools1 | wireless_tools包 | 是 | 否 | 是 | 否 | 是 |
iw | iw包 | 否 | 是 | 是 | 否 | 是 |
wpa_supplicant | wpa_supplicant包 | 是 | 是 | 否 | 是 | 是 |
iwd | iwd包 | 否 | 是 | 否 | 是 | 是 |
- 過時,不推薦使用.
- 一些老驅動只支持WEXT
iw 與 wireless_tools 的對比[編輯 | 編輯原始碼]
下面表格給出了 iw
和 wireless_tools
命令的對比(更多示例參閱這裏)。
iw 命令 | wireless_tools 命令 | 描述 |
---|---|---|
iw dev wlan0 link | iwconfig wlan0 | 獲取連接狀態。 |
iw dev wlan0 scan | iwlist wlan0 scan | 掃描可用接入點。 |
iw dev wlan0 set type ibss | iwconfig wlan0 mode ad-hoc | 設置操作模式為 ad-hoc。 |
iw dev wlan0 connect your_essid | iwconfig wlan0 essid your_essid | 連接到開放網絡。 |
iw dev wlan0 connect your_essid 2432 | iwconfig wlan0 essid your_essid freq 2432M | 連接到開放網絡的特定頻道。 |
iw dev wlan0 connect your_essid key 0:your_key | iwconfig wlan0 essid your_essid key your_key | 用16進制密匙連接到 WEP 加密網絡。 |
iw dev wlan0 connect your_essid key 0:your_key | iwconfig wlan0 essid your_essid key s:your_key | 用 ASCII 密匙連接到 WEP 加密網絡。 |
iw dev wlan0 set power_save on | iwconfig wlan0 power on | 啟用省電功能。 |
iw[編輯 | 編輯原始碼]
本章節的示例會假定您的無線接口設備名稱是 interface
, 您想要連接到的WiFi接入點名稱是 your_essid
。請將這兩個字段作相應替換。
獲取接口名[編輯 | 編輯原始碼]
獲取您無線網卡的名稱,運行:
$ iw dev
接口的名稱會在 "Interface" 單詞後顯示。比如,常見的無線網卡設備名是 wlan0
。
檢查連接狀態[編輯 | 編輯原始碼]
用下面的命令檢查連接狀態:
$ iw dev interface link
獲取統計數據[編輯 | 編輯原始碼]
獲取一些統計數據,比如上傳下載的數據量,信號強度等:
$ iw dev interface station dump
激活接口[編輯 | 編輯原始碼]
一些無線網卡在使用 iw
或 wireless_tools
前需要先激活內核接口:
# ip link set interface up
RTNETLINK answers: Operation not possible due to RF-kill
, 請確保硬件開關已經打開。參閱 #Rfkill 説明。如果出現錯誤 RTNETLINK answers: Operation not possible due to RF-kill
, 請確保硬件開關已經打開。參閱 #Rfkill 説明。
要驗證接口確實打開:
$ ip link show interface
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000 link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
<BROADCAST,MULTICAST,UP,LOWER_UP>
中的UP
顯示接口已經打開,不要和後面的 state DOWN
混淆。
掃描接入點[編輯 | 編輯原始碼]
查看可用的接入點:
# iw dev interface scan | less
iwlist
也會產生這個問題。無線網絡也可能被軟鎖定,請運行 rfkill list all
進行檢查。
需要關注的信息:
- SSID: 網絡的名稱.
- Signal: 用 dbm (-100 to 0) 報吿的無線信號強度。數值越接近零,信號越好。觀察高質量連接和低質量連接的數值差異可以了解設備的信號範圍。
- Security: 沒有直接報吿, 檢查
capability
開頭的行,如果有Privacy
信息,例如capability: ESS Privacy ShortSlotTime (0x0411)
, 表示網絡具有某種程度的保護,- 如果有
RSN
信息,網絡被 Robust Security Network(WPA2) 協議保護。 - 如果有
WPA
信息,網絡被 Wi-Fi Protected Access 協議保護。 - 在
RSN
和WPA
信息塊中,可能看到如下信息: - 如果沒有看到
RSN
或WPA
,但是看到了Privacy
, 表示使用的是 WEP.
- 如果有
運行模式[編輯 | 編輯原始碼]
設置無線網卡的操作模式,如果連接到漫遊網絡,需要設置操作模式為 ibss
# iw dev interface set type ibss
ip link set interface down
)才能修改模式。連接到接入點[編輯 | 編輯原始碼]
根據加密方式不同,需要使用密碼將無線設備關聯到接入點。
假設要使用的接入點 ESSID 為 MyEssid
:
無加密[編輯 | 編輯原始碼]
# iw dev interface connect "your_essid"
WEP[編輯 | 編輯原始碼]
使用十六進制或 ASCII 密碼(格式是自動識別出來的,因為 WEP 密碼長度是固定的):
# iw dev interface connect "your_essid" key 0:your_key
使用十六進制或 ASCII 密碼,第三個是默認 (從0計數,共四個):
# iw dev interface connect "your_essid" key d:2:your_key
其它[編輯 | 編輯原始碼]
- iw 只能處理 WEP。要使用其他加密方案登錄, 請查看下文中的 #認證章節。
無論您使用什麼認證方法,都可以使用以下命令來確認連接是否成功:
# iw dev interface link
認證[編輯 | 編輯原始碼]
WPA2 個人模式[編輯 | 編輯原始碼]
WPA2 個人(模式), 又名 WPA2-PSK, 是一種 受保護Wi-Fi訪問(Wi-Fi存取保護)的模式。
您可以通過 wpa_supplicant 或 iwd 來連接, 或者直接使用網絡管理器. 如果您只進行了認證,那麼要獲取功能齊全的連接,您仍然需要進行手動連接或使用 DHCP 客户端。
WPA2 企業模式[編輯 | 編輯原始碼]
WPA2 企業模式也是一種 受保護Wi-Fi訪問(Wi-Fi存取保護)的模式,提供了比 WPA2 個人版更好的安全性和密鑰管理,並支持其他的企業型功能,例如 VLAN 和 NAP。然而,與個人模式不同,此種加密需要額外的 RADIUS 認證伺服器來處理用户的認證。個人模式不需要除無線路由器/接入點以外的設備,對所有用户也只要求一個密碼或密碼短語。
企業模式允許用户使用用户名和密碼或者數字證書來登錄 Wi-Fi。因為每個用户都擁有一個動態唯一的加密密碼,因此企業模式可以防止通過無限網絡的用户探聽,並提高加密強度。
本章節描述如何使用網絡管理器來連接到使用 WPA2 企業模式的無線接入點。
查看軟件接入點#RADIUS 來獲取關於設置接入點自身的相關信息。
協議間的對照可以參照此表格。
MS-CHAPv2[編輯 | 編輯原始碼]
有時,除了原配的 ppp包 (Point-to-Point Protocol) 之外,要求 MSCHAPv2 type-2 with PEAP 的 WPA2 企業級接入點有時會需求 pptpclient包。netctl包 似乎能在缺少 ppp-mppe 的情況下開箱即用。雖然其他認證實現方式通常都並不可用,由於其高度脆弱的特性,用户在任何情況下都不被鼓勵使用 MSCHAPv2。
eduroam[編輯 | 編輯原始碼]
eduroam 是一項面向科研,高等教育與繼續教育領域人員的國際漫遊服務。
- 存儲未加密的連接配置文件時,建議用 root 用户運行以下命令以限制 root 帳户對此文件的的讀取訪問權限:
chmod 600 配置文件
手動/自動配置[編輯 | 編輯原始碼]
- wpa_supplicant 可以直接通過其配置文件或使用其 CLI/GUI 前端進行配置,並與 DHCP 客户端結合使用。 請參閱
/usr/share/doc/wpa_supplicant/wpa_supplicant.conf
中的示例來結合您的詳細連接信息。 - iwd#WPA Enterprise
- NetworkManager 可以使用 nmcli 或 graphical front ends 來創建 WPA2 企業級配置文件。nmtui 不支持此功能 (NetworkManager issue 376), 但可以使用現有配置。
- ConnMan 需要在連接至網絡之前配置一個單獨的配置文件。詳情請參閱 connman-service.config(5) 和 ConnMan#連接到 eduroam (802.1X)。
- netctl 可以通過填寫配置中的
WPAConfigSection=
字段來支持 wpa_supplicant 配置文件。詳情請參閱 netctl.profile(5)。
- 注意:特殊引用規則適用: 參考 netctl.profile(5) § SPECIAL QUOTING RULES.
- 提示:自定義證書可通過在
WPAConfigSection
中添加字段'ca_cert="/path/to/special/certificate.cer"'
來配置。
WPA3 個人[編輯 | 編輯原始碼]
WPA3 Personal, 又名 WPA3-SAE, 是一種 受保護Wi-Fi訪問(Wi-Fi存取保護)的模式。
wpa_supplicant 及 iwd 都支持 WPA3 個人認證模式。
WPA3 企業模式[編輯 | 編輯原始碼]
WPA3 企業模式 是一種 受保護Wi-Fi訪問(Wi-Fi存取保護)的模式。
wpa_supplicant (自版本起 2:2.10-8) 支持 WPA3 企業模式。 參見 FS#65314。
提示和技巧[編輯 | 編輯原始碼]
遵循監管區域要求[編輯 | 編輯原始碼]
監管區域用於配置無線驅動,確保對無線硬件的使用符合由 FCC、ETSI 及其他組織制定的當地法規。監管區域使用ISO 3166-1二位字母國家代碼。例如,美國的監管區域代碼是「US」,中國則是「CN」,等等。
監管區域影響無線信道的可用性。在2.4GHz波段,美國允許使用1-11信道,日本是1-14,世界上多數其它地區則是1-13。在5GHz波段,允許使用信道的規則要複雜得多。這兩種情況的更詳細信息見這一WLAN信道列表。
監管區域也影響對來自無線設備的等效各向同性輻射功率(EIRP)所作的限制。這衍生自發射功率(tx power)並以dBm/mBm(1dBm=100mBm)或mW(對數尺度)衡量。在2.4GHz波段,美國和加拿大最大限制30dBm,歐洲大部分是20dBm,世界上其他地區則是20dB-30dBm。在5GHz波段,最大值通常更低。更詳細的信息請參考 wireless-regdb(EIRP dBm 值在每行第二對括號裡)。
錯誤設置監管區域可能會有用——例如,在其他信道擁擠時可以使用未用信道,或者提升發射功率以擴大傳輸範圍。然而不推薦這種做法,因為可能會違反當地法規以及造成與其他無線電設備的干擾。
要配置監管區域,安裝 crda包[損壞的連結:replaced by wireless-regdb包] 並重啟(以重新加載 cfg80211
模塊及所有相關驅動)。檢查啟動日誌以確認 cfg80211
正在調用CRDA:
# dmesg | grep cfg80211
以下命令可將當前監管區域設為美國:
# iw reg set US
用以下命令查詢:
$ iw reg get
- 你的設備國家代碼可能為「00」,它是包含了通用設置的「世界監管區域」。如果無法解除此設置,則CRDA可能配置有誤。
- 根據 CRDA 的 README,從內核版本4.15開始就不再需要它,因為內核會自動從固件加載監管數據庫。然而也有説法稱這一加載操作需要特定的內核設置。
然而設置監管區域可能不會改變您的設置。有些設備在固件/EEPROM中設置了一個監管區域,為設備規定了限制,這意味着通過軟件設置監管區域只能增加限制而不能減少。例如,一個 CN(中國)設備可以用軟件設置為 US(美國)監管區域,但由於中國的 EIRP 最大值為20dBm,設備將無法以美國的最大值30dBm進行發射。
例如,查看一個 Atheros 設備的固件中是否設置了監管區域:
# dmesg | grep ath:
對於其他晶片組,搜索「EEPROM」、「regdomain」或設備驅動的名字可能會有用。
要查看監管區域更改是否成功,以及查詢可用信道數和允許發射功率:
$ iw list | grep -A 15 Frequencies:
監管區域的持久設置可以通過編輯 /etc/conf.d/wireless-regdom
並解除相應區域的註釋實現。 wpa_supplicant
也可以在 /etc/wpa_supplicant/wpa_supplicant.conf
中的 country=
行應用監管區域。
也可以通過添加模塊參數(如 options cfg80211 ieee80211_regdom=EU
),配置 cfg80211 內核模塊,從而使用指定的監管區域。然而這是一種老舊的監管實現。
更多信息請閱讀 wireless.kernel.org 監管文檔。
Rfkill 説明[編輯 | 編輯原始碼]
許多筆記本都有一個硬件按鈕或開關用於關閉無線網卡,然而無線網卡也可以通過內核來屏蔽。這一任務可由 rfkill 處理。顯示當前狀態:
$ rfkill
ID TYPE DEVICE SOFT HARD 0 bluetooth hci0 unblocked unblocked 1 wlan phy0 unblocked unblocked
如果網卡處於硬件屏蔽(hard-blocked)狀態,請使用硬件按鈕或開關來開啟它。 如果無線網卡並沒有被硬件屏蔽但處於軟件屏蔽(soft-blocked),請使用以下命令:
# rfkill unblock wifi
rfkill
內核模塊的一些選項改變這一現象。切換無線網卡的硬件按鈕是廠商專用的內核模塊處理的,經常是 WMI 模塊。特別是非常新的硬件型號,可能還沒有得到最新穩定內核的完全支持。這種情況下,在內核 bug 跟蹤系統搜索信息,並將型號報吿給對應廠商內核模塊的維護者(如果還沒有報吿的話)經常會有幫助。
參見 https://askubuntu.com/questions/62166/siocsifflags-operation-not-possible-due-to-rf-kill 。u
節能[編輯 | 編輯原始碼]
排錯[編輯 | 編輯原始碼]
這個單元包含一般性的錯誤排除提示, 目的並非是排除與設備或固件驅動有關的錯誤。 對於驅動與固件上的問題, 請看 #驅動與固件排錯.
臨時上網[編輯 | 編輯原始碼]
如果您的網絡設備出了問題但需要網絡訪問,例如, 下載一些軟件或向社區尋求幫助, 您可以利用安卓的內置功能來通過USB端口共享網絡。 詳見 Android Tethering#USB tethering。
觀察日誌文件[編輯 | 編輯原始碼]
分析系統日誌文件是排錯的良好切入點。在進行操作(如嘗試連接到無線網絡)的同時,打開第二個終端/控制台窗口並用以下命令監看內核消息:
# dmesg -w
這樣,您就不需要手動一行一行的瀏覽這些消息了。
當您使用網絡管理器時,同樣的,可以用 systemd 提供的日誌命令:
# journalctl -f
通常來説,無線網絡錯誤都伴隨着具有特定理由代碼(reason code)的取消驗證(deauthentication)。例如:
wlan0: deauthenticating from XX:XX:XX:XX:XX:XX by local choice (reason=3)
對照原因代碼表可能會給出解決問題的第一個提示。
獲取IP位址失敗[編輯 | 編輯原始碼]
- 如果你使用有線接口可以獲得IP位址而無線接口不能, 嘗試禁用無線網卡的省電功能(指定
off
而非on
).
- 如果由於等待網絡連接而導致超時錯誤,可能要將特定網卡設備的信道模式改為自動:
auto
# iwconfig wlan0 channel auto
在將wifi信道更改為自動之前,請確保無線接口已關閉。成功地更改後,再次打開無線接口並繼續。
IP位址有效但無法接解析主機名[編輯 | 編輯原始碼]
如果你正在使用公共無線網絡,可能會有認證門户, 確保在瀏覽器查詢認證頁面時使用HTTP 而不是HTTPS, 因為有些認證門户會重定向到HTTP. 如果不是這個導致的問題, 檢查你是否可以解析域名, 可能有必要使用通過DHCP方式得到的DNS伺服器。
設置 RTS 和靜態幀分段閾值[編輯 | 編輯原始碼]
無線網卡默認禁用了 RTS 和 分段機制 。這兩種方法都以犧牲帶寬來換取吞吐量 (i.e. 以速度為代價提高可靠性)。在由於無線干擾和有多個相鄰接入點,從而導致連接超時或失敗的環境中,這兩個設置非常有用。
數據包分段通過將超過閾值的包分割,從而提高吞吐量。最大值(2346)實際上禁用了分段,因為沒有任何包可以超過這個值,最小值(256)最大化了吞吐量,但帶寬成本很會大。
# iw phy0 set frag 512
RTS 通過在與接入點傳輸超過RTS閾值的分組之前來進行握手,從而提高吞吐量。最大值(2347)實際上禁用了RTS,沒有分組可以超過這個值。最小值(0)意味着所有分組都啟用RTS,但這很極端。
# iw phy0 set rts 500
phy0
是用iw phy
命令 列舉出的無線網卡的名稱隨時可能斷開連接[編輯 | 編輯原始碼]
Cause #1[編輯 | 編輯原始碼]
如果你在 日誌 裡看到:wlan0: deauthenticating from MAC by local choice (reason=3)
並且 Wi-Fi 斷開連接, 很可能是你的無線網卡的電源節能設置太激進。嘗試禁用無線網卡的 省電功能 。
如果你的網卡不支持 啟用/禁用 節能模式, 看看 BIOS 的電源管理選項。 比如,在 聯想 W520 的BIOS中禁用PCI-Express電源管理就解決了這個問題。
Cause #2[編輯 | 編輯原始碼]
如果你經常斷連,並且在 日誌 看到如下信息:
ieee80211 phy0: wlan0: No probe response from AP xx:xx:xx:xx:xx:xx after 500ms, disconnecting
在你路由器設置面板裡把頻道帶寬改成 20MHz
。
Cause #3[編輯 | 編輯原始碼]
有些筆記本有硬件 rfkill 開關(如Thinkpad X200系列),因為磨損或有問題,開關(或與主板的連接)可能會隨時間的推移而變松,不小心觸摸開關或移動電腦時就可能出現斷連。這問題沒有軟件解決方案,除非開關是電子式的,BIOS提供了禁用開關的選項。如果開關是機械式的(大部分機型都是),就有很多解決方案,其中大多數都是要禁用開關:在主板/無線網卡上的接觸點進行焊接,用膠水封堵或阻擋,使用螺絲來擰緊開關,或者直接拆除開關。
Cause #4[編輯 | 編輯原始碼]
導致隨時斷連或完全無法連接的其他原因,比如路由器質量差,配置不完整,其他無線設備干擾,或信號質量差。
為了排錯, 首先要靠近路由器,並且在不需要身份驗證的情況下進行連接
如果有效,那重新啟用 WPA/WPA2 ,但是選擇固定/有限的路由器配置,比如:
- 如果路由器比你用的無線設備客户端老的多,把路由器設置為單一無線模式進行測試。
- 禁用混合驗證模式 ,(e.g. 只啟用 WPA2 with AES, o如果是老路由器,則是TKIP)
- 使用固定頻道而不是自動頻道 (因為附近的路由器可能老舊而且存在干擾)
- 禁用 WPS
- 把路由器的 5 GHz 頻道切換為 non-DFS (Dynamic Frequency Selection) 頻道. 在這種頻道的連接 突然被丟棄或者切換 ,這是因為附近天氣雷達的干擾。
- 只使用2.4 GHz ,而不是自動在 5 GHz 和2.4 GHz 切換。 (後者吞吐量低,但是遠距離連接更穩定)
- 禁用
40MHz
頻道帶寬 (吞吐量低,但衝突更少) ,用cfg80211.cfg80211_disable_40mhz_24ghz=1
- 如果路由器有 Qos功能, 檢查設置的完整性。(e.g. Wi-Fi 多媒體 (WMM) 是 QoS 流控制中可選的功能, 損壞的路由器固件可能會表明他已經存在,即使沒有啟用這個功能)
Cause #5[編輯 | 編輯原始碼]
對於一些無線網卡適配器 (e.g. Qualcomm Atheros AR9485), 隨時斷連可能會伴隨一個 DMA 報錯:
# journalctl -xb
ath: phy0: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x02000020 DMADBG_7=0x0000a400 wlp1s0: authenticate with 56:e7:ee:7b:55:bc wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 1/3) wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 2/3) wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 3/3) wlp1s0: authentication with 56:e7:ee:7b:55:bc timed out
可行的方案是禁用 Intel IOMMU driver (DMA), 把intel_iommu=off
加入 kernel parameters [2].
Cause #6[編輯 | 編輯原始碼]
如果你用的是帶 iwlwifi
或 iwlmvm
的設備進行無線連接,使用電池電源的時候,無線網卡似乎消失了,(可能是重啟或從休眠中恢復後),可以通過 iwlmvm 裡的節能模式設置修復。
創建 /etc/modprobe.d/iwlmvm.conf
,再添加以下行:
/etc/modprobe.d/iwlmvm.conf
options iwlmvm power_scheme=1
power_scheme
為 1 表明把 iwlmvm 設置為總是活躍。可選項如下:
值 | 描述 |
---|---|
1 | 總是活躍 |
2 | 平衡 |
3 | 節能 |
這個修複方法是在 [3]被找到的。
Cause #7[編輯 | 編輯原始碼]
若設備長期不使用 (e.g. 文件伺服器), 可能會因為節能模式導致無法連接,節能模式會阻止流量傳入和建立連接。嘗試為接口禁用節能模式:
# iw dev interface set power_save off
可以創建udev規則,讓開機時自動執行它。參閱 Power management#Network interfaces.
Cause #8[編輯 | 編輯原始碼]
如果你連接 Mesh 網絡時 (e.g., WiFi6) ,會偶爾中斷連接,並且你看到了如下日誌信息:
# journalctl -b
kernel: wlan0: disconnect from AP aa:bb:cc:dd:ee:ff for new auth to 11:22:33:44:55:66
你遇到的是漫遊問題,可採取以下措施:
- 如果不需要漫遊,在 NetworkManager中鎖定BSSID (如上面的
aa:bb:cc:dd:ee:ff
) (參閱 NetworkManager#Regular network disconnects, latency and lost packets (WiFi)). - 在 Wpa_supplicant#Roaming 中調整
bgscan
Wi-Fi 由於錯誤的信道設置而變得不可見[編輯 | 編輯原始碼]
若電腦 Wi-Fi 信道不符合用户所處國家之規定,部分Wi-Fi即使處於信號覆蓋範圍內,也可能因信道默認不被允許而不可見。參閱 #Respecting the regulatory domain.
驅動與固件排錯[編輯 | 編輯原始碼]
這一部分包含了關於特定晶片組安裝內核模塊與固件的方法與規範,不同於一般的方法。
參閱內核模塊了解通用的模塊操作方法。
Ralink[編輯 | 編輯原始碼]
rt2x00[編輯 | 編輯原始碼]
Ralink 晶片組的統一驅動,代替了 rt2500
、rt61
、rt73
等。Linux 內核從 2.6.24
開始包含此驅動,但是有些設備可能需要額外固件。可以使用標準 wpa_supplicant包 和 iwconfig
工具配置。
有些晶片組需要固件文件,可以安裝軟件包 linux-firmware包。
參見: Using the new rt2x00 beta driver。
- 從內核 3.0 開始,rt2x00 也包含了這些驅動程序:
rt2800pci
、rt2800usb
。 rt2860sta
被主分支驅動 rt2800pci
替代,rt2870sta
被 rt2800usb
替代。
- 通過
iwpriv
可以配置很多參數,文檔在 Ralink 原始碼包中。
rt3090[編輯 | 編輯原始碼]
對於使用 rt3090 晶片組的設備, 應該使用的驅動是rt2800pci
; 然而, 它並沒有非常好的適配這個晶片組 (例如:有時候網速甚至不能到 2Mb/s).
rt3290[編輯 | 編輯原始碼]
rt3290 晶片組是由內核模塊 rt2800pci
識別的。一些用户遇到這些問題,他們選擇恢復到打了補丁的 Ralink 驅動,這樣效果更好。
rt3573[編輯 | 編輯原始碼]
2012年新出的晶片組,需要 Ralink 的閉源驅動,有不同的廠商使用他們,參閱 Belkin N750 示例。
mt7612u[編輯 | 編輯原始碼]
2014年新發佈的晶片組,以新的商用名稱聯發科發佈。這是一款 AC1200 或 AC1300 級別的晶片組。製造商提供了 Linux 驅動程序在支持頁面。從內核 5.5 版本開始,該晶片組應該已被包含的 mt76
驅動所支持。
Realtek[編輯 | 編輯原始碼]
參見 [4][失效連結 2022-11-10] 查看 Realtek 晶片組和規範列表
rtl8192cu[編輯 | 編輯原始碼]
這個驅動已經被包含在內核裡了, 但很多用户報吿指出即使掃描到了 wifi 也無法連接。
8192cu-dkmsAUR 包含了很多補丁;如果內核裡的驅動並沒有很好的起效果可以嘗試這個。
rtl8723ae/rtl8723be[編輯 | 編輯原始碼]
rtl8723ae
和 rtl8723be
模塊已經被包含在 Linux 內核主線。
一些用户使用此網卡時可能會遇到省電方面的問題. 這表現為可能偶爾斷開連接,但高級網絡管理器無法識別 (netctl、NetworkManager)。以 root 身份執行 dmesg -w
可以驗證這個錯誤 ,或以 root 身份執行 journalctl -f
查找與 powersave 和rtl8723ae
/rtl8723be
模塊相關的輸出. 如果你遇到了這個問題,使用 fwlps=0
內核選項,這樣可以防止無線網卡自動休眠或停止連接。參閱內核模塊#配置模塊參數。
如果你信號很差,可能你只有一個物理天線連接了,並且天線的自動選擇損壞了。可以用 ant_sel=1
或 ant_sel=2
內核選項強制選擇天線[5]。
rtl88xxau[編輯 | 編輯原始碼]
Realtek 晶片組 rtl8811au、rtl8812au、rtl8814au 和 rtl8821au 被設計為用於各種 USB 適配器,範圍從 AC600 到 AC1900。有幾個包提供對應的內核驅動,需要 DKMS 和內核頭文件:
C | P | N |
---|---|---|
rtl8811au、rtl8812au、rtl8821au | rtl88xxau-aircrack-dkms-gitAUR | Aircrack-ng 給 8811au、8812au、8821au 提供了監控模式和注入支持。 |
rtl8812au | rtl8812au-dkms-gitAUR | Realtek 最新官方驅動版本,僅適用於 rtl8812au。 |
rtl8811au、rtl8821au | rtl8821au-dkms-gitAUR | 用於 rtl8821au 的新一代驅動版本 |
rtl8814au | rtl8814au-dkms-gitAUR | rtl8813au 可能也適用 |
rtl8811cu/rtl8821cu[編輯 | 編輯原始碼]
rtl8821cu-dkms-gitAUR 提供了一個內核模塊給 Realtek 8811cu 和 8821cu 晶片組。
需要 DKMS, 確保安裝了內核頭文件。
如果安裝並加載了 8821cu
模塊,無線接口還是沒有顯示,需要手動指定 rtw_RFE_type
選項[6][7]。試試例如 echo "options 8821cu rtw_RFE_type=0x26" | sudo tee /etc/modprobe.d/8821cu.conf
,其他值可能也可以,比如 1 或 2 等等。詳見內核模塊#配置模塊參數
rtl8821ce[編輯 | 編輯原始碼]
rtl8821ce-dkms-gitAUR 為華碩 X543UA 中的 Realtek 8821ce 晶片組提供了一個內核模塊。
它需要 DKMS,所以應確保已安裝內核頭文件。
rtl8821ce
無線模塊是破損的,會導致連接弱,應該優先使用上面的 AUR 版本。詳見在 github 上的討論,使用 lspci -k
檢查是否在用默認的 (rtw88_8821ce
)模塊。如果是,把它加入黑名單。rtl8822bu[編輯 | 編輯原始碼]
rtl88x2bu-dkms-gitAUR 給 Edimax EW7822ULC USB3、Asus AC53 Nano USB 802.11ac 和 TP-Link Archer T3U adapter 的 Realtek 8822bu 晶片組提供了內核模塊。
確保安裝了 DKMS 和內核頭文件。
rtl8xxxu[編輯 | 編輯原始碼]
可以通過安裝 linux-firmware包 來獲得 rtl8xxxu
的驅動程序。
rtl8xxxu
主線內核模塊的問題可通過編譯特定晶片組的第三方模塊來解決。原始碼可在 GitHub 存儲庫中找到。
某些驅動程序可能已存在於在 AUR 中,例如 rtl8723bu-dkms-gitAUR。
RTW88[編輯 | 編輯原始碼]
一份 RTW88 內核模塊補丁集最近被發到內核郵件列表中,有望被添加進內核主線。
如果正確配置和編譯的話,上游內核以及帶有補丁集的內核將會支持大部分 RTW88 晶片設備。linux-zen包 和 linux-zen-gitAUR 均包含了這些補丁,其中已打包的版本已經內置了該模塊。
驅動支持型號有:882BE、8822BU、8822CE、8822CU、8723DE、8723DU、8821CE 與 8821CU。
Atheros[編輯 | 編輯原始碼]
MadWifi 開發團隊維護了三個模塊:
madwifi
是最老的驅動,Arch 內核 從 2.6.39.1 開始已經不再包含。ath5k
將逐步替代ath_pci
,有些晶片組使用效果很好,但有些還不能很好工作(後面有説明)ath9k
是新的官方驅動,適用於新 Atheros 硬件。
還有一些驅動適用於其他的 Atheros 設備. 詳見 Linux Wireless 文檔。
ath5k[編輯 | 編輯原始碼]
參考:
若網頁有時加載緩慢或設備無法獲取 ip 地址,嘗試從硬件加密切換為軟件加密,使用 nohwcrypt=1
內核選項加載 ath5k
模塊。詳見內核模塊#配置模塊參數
有些筆記本的 LED 指示燈有問題,可以:
echo none > "/sys/class/leds/ath5k-phy0::tx/trigger" echo none > "/sys/class/leds/ath5k-phy0::rx/trigger"
ath9k[編輯 | 編輯原始碼]
外部文檔資源:
截至 Linux 3.15.1,一些用户可能會遇到網絡帶寬下降的問題,這種情況可以為 ath9k
模塊設置 nohwcrypt=1
的內核選項。 詳見內核模塊#配置模塊參數.
lsmod
查看正在使用的模塊,如果名稱不同(例如 ath9k_htc
),請更改 ath9k
。節能/省電模式[編輯 | 編輯原始碼]
雖然 Linux 無線工具表明對於比 AR9280 更新的 Atheros ath9k 單晶片設備已經啟用了動態電源節能功能,雖然 Linux Wireless 指出比 AR9280 更新的 Atheros ath9k 單晶片設備已啟用動態節能功能,但一些設備仍 (例如 AR9285) powertop包 被指出省電被禁用,這種情況需手動開啟。
一些設備 (例如 AR9285),啟用省電功能可能會有如下報錯:
# iw dev wlan0 set power_save on
command failed: Operation not supported (-95)
解決方法:為 ath9k
模塊設置 ps_enable=1
內核選項,詳見內核模塊#配置模塊參數.
Intel[編輯 | 編輯原始碼]
iwlegacy[編輯 | 編輯原始碼]
iwlegacy 是 Intel 3945 和 4965 網卡的無線驅動。linux-firmware包 已經包含此驅動。
udev 會自動加載驅動,否則要手動加載 iwl3945
或 iwl4965
。詳見內核模塊。
如果連不上網或者連接很弱,嘗試啟用 802.11n:
/etc/modprobe.d/iwl4965.conf
options iwl4965 11n_disable=1
若啟動過程中一直失敗,且你正在使用 Nouveau 驅動, 嘗試啟用早期 KMS 避免衝突 [9]。
iwlwifi[編輯 | 編輯原始碼]
iwlwifi 是適用於 Intel 當前網卡的無線驅動,例如 5100AGN、5300AGN、和 5350AGN。查看所有受支持的文件列表。該固件已包含在 linux-firmware包 裡。linux-firmware-iwlwifi-gitAUR 可能包含更新的驅動。
若聯網存在問題或連接很弱,嘗試啟用 802.11n,也可能需要啟用軟件加密:
/etc/modprobe.d/iwlwifi.conf
options iwlwifi 11n_disable=1 swcrypto=1
在 802.11n 模式下網絡上行速度很慢,比如只有 20Mbps,嘗試啟用 TX AMPDU:
/etc/modprobe.d/iwlwifi.conf
options iwlwifi 11n_disable=8
若上行速度很慢,可以禁用無線網卡的 省電模式 。
如果你有 802.11ax (WiFi 6) 接入點並且也有連接不穩定等問題,可參閱 Intel Article 54799。
11n_disable=0
參數將會阻止 802.11ac,只能使用較慢的協議,(5GHz 頻段用 802.11a,2.4 GHz 頻段用802.11b/g)。藍牙共存[編輯 | 編輯原始碼]
若無法連接藍牙耳機或無法保持良好的數據接受速度,請禁用藍牙共存,參考 [10]:
/etc/modprobe.d/iwlwifi.conf
options iwlwifi bt_coex_active=0
iwlmvm
內核模塊處理的硬件, bt_coex_active
和 sw_crypto
模塊選項已被禁用,但對於由 iwldvm
模塊處理的老硬件,這些選項依舊起作用。固件問題[編輯 | 編輯原始碼]
你可能會遇到驅動程序輸出堆棧跟蹤與報錯,這會導致有點卡頓。
# dmesg
Microcode SW error detected. Restarting 0x2000000.
你也可能遇到其他各種各樣的問題(例如連接 5GHz 頻段時的問題,隨時斷連,恢復後無法連接)。
要想確認是否是固件的原因,請降級 linux-firmware包 包。
如果確定是固件的問題, 移除有 bug 的固件文件以確保可以加載舊版本固件 (要更新 linux-firmware包 包,因為它不僅僅提供 Intel 無線網卡的固件更新):
# for i in {64..73} ; do mv /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz /usr/lib/firmware/iwlwifi-ty-a0-gf-a0-$i.ucode.xz.bak ; done
為了避免每次更新後都需要手動重複這些步驟, 可以在 pacman.conf
裡用 NoExtract
數組搭配通配符以此禁止它們的安裝。詳見 pacman#在安裝時跳過文件。
從 Windows 重啟後無法檢測到 WiFi 適配器[編輯 | 編輯原始碼]
如果從 Windows 重啟到 Linux 後,檢測不到 WiFi 適配器,可能是由於 Windows 默認啟用的快速啟動功能。嘗試禁用快速啟動。iwlwifi 內核驅動維基頁面有關於此問題的條目。
禁用 LED 閃爍[編輯 | 編輯原始碼]
iwlegacy
和 iwlwifi
驅動默認設置中 LED 閃爍是開啟的,有些人不喜歡,可以用 systemd-tmpfiles 禁止閃爍:
/etc/tmpfiles.d/phy0-led.conf
w /sys/class/leds/phy0-led/trigger - - - - phy0radio
運行 systemd-tmpfiles --create phy0-led.conf
使更改生效,或重啟
查看此 LED 所有可選的觸發值:
# cat /sys/class/leds/phy0-led/trigger
# cat /sys/class/leds/phy0-led/trigger
Broadcom[編輯 | 編輯原始碼]
參見博通無線網卡。
其他驅動/設備[編輯 | 編輯原始碼]
Tenda w322u[編輯 | 編輯原始碼]
該型號 Tenda 卡 可被視為 rt2870sta
設備。參閱 #rt2x00。
orinoco[編輯 | 編輯原始碼]
這應當是內核的一部分,是已經被安裝的。
部分 Orinoco 晶片組屬於 Hermes 二代系列。應使用 wlags49_h2_cs
驅動而非 orinoco_cs
以獲得WPA 支持。 使用此驅動前需先把 orinoco_cs
加入黑名單。
prism54[編輯 | 編輯原始碼]
p54
已經包含在內核中,不過必須從此網站下載適合你網卡的驅動並且把它安裝進/usr/lib/firmware
目錄。
過時的 prism54
和新內核模塊 p54pci
或 p54usb
同時裝入造成衝突,使用 lsmod | grep prism54
查看是否裝入了過時模塊,如果是,那麼就屏蔽 prism54
並根據上面方法修改固件名稱。
zd1211rw[編輯 | 編輯原始碼]
zd1211rw 是 ZyDAS ZD1211 802.11b/g USB WLAN 晶片的驅動,最近的版本的內核已經包括了。有被支持的設備列表。需要安裝固件zd1211-firmwareAUR。
hostap_cs[編輯 | 編輯原始碼]
Host AP 是一個 Linux 驅動程序,對於基於 Intersil 的 Prism2/2.5/3 晶片組的無線局域網卡。該驅動程序包含在 Linux 內核中。
orinico_cs
驅動程序加入黑名單。
ACX100/111[編輯 | 編輯原始碼]
軟件包: tiacx
、tiacx-firmware
(已被官方倉庫 和 AUR 移除)。
詳見 官方維基。
ndiswrapper[編輯 | 編輯原始碼]
Ndiswrapper並不是一個真正的驅動,但是如果你無法找到適合你的無線網卡驅動, 它就派上用場了.有的時候, 它是非常有用的.為了使用Ndiswrapper, 你需要 Windows 驅動中的 *.inf 文件(*.sys 文件應該和 *.info 在同一個目錄中)。如果你需要從 *.exe
文件解壓縮,你可以使用 cabextract包。
下面是安裝 ndiswrapper 的幾個步驟:
1. 安裝 ndiswrapper-dkms包
2. 安裝驅動到 /etc/ndiswrapper/*
ndiswrapper -i filename.inf
3. 列出所有的安裝的驅動
ndiswrapper -l
4. 配置文件寫到 /etc/modprobe.d/ndiswrapper.conf
ndiswrapper -m depmod -a
然後依照內核模塊一文設置啟動時加載這個模塊。
modprobe ndiswrapper iwconfig
如果正常的話, 你應該可以看到wlan0接口了。如果有問題的話, 你可以閱讀: Ndiswrapper installation wiki[失效連結 2020-08-04 ⓘ]. ndiswrapper howto 和 ndiswrapper FAQ.
參見[編輯 | 編輯原始碼]
- Linux Wireless 項目
- Aircrack-ng 驅動程序安裝指南
- Wireless Device Database Wiki (由於原維基站點已關閉,該分叉站點由 wi-cat.ru 託管。目前有兩個不太完整的版本: TechInfoDepot、deviwiki)