跳至內容

網絡配置/無線網絡配置

出自 Arch Linux 中文维基

網絡配置的主頁面是網絡配置

配置無線網絡一般分兩步:第一步是識別硬件、安裝正確的驅動程序並進行配置,安裝盤中已經包含驅動,但是通常需要額外安裝;第二步是選擇一種管理無線連接的方式。這篇文章涵蓋了這兩方面,並提供了無線管理工具的連結地址。

#iw 段落描述了如何使用 iw 來手動管理你的網絡接口/無線局域網連接。網絡配置#網絡管理器段落介紹了幾個可以自動管理您無線網絡接口的程序。這些程序中的某些會包含一個圖形界面,而所有的程序都支持網絡配置文件(在頻繁切換網絡時有用,比如使用筆記本電腦的場合)。

設備驅動[編輯 | 編輯原始碼]

默認的 Arch Linux 內核是模塊化的,硬件的設備驅動作為內核模塊保存在硬盤上。啟動時,udev 會根據硬件加載不同的驅動模塊,從而允許創建網絡接口。

除了相應的驅動程序之外,某些無線晶片組還需要固件。linux-firmware 提供了很多固件,然而專有固件並不包含在內,需要另行安裝。這部分指南請參考 #安裝 driver/firmware

注意:如果 udev 在啟動時未加載正確的模塊,只需 手動加載 即可。 如果 udev 為一台設備加載多個驅動程序,則產生的衝突可能會導致配置失敗。 確保將不需要的模塊加入 黑名單

檢查驅動狀態[編輯 | 編輯原始碼]

根據設備的連接方式是 PCI(e) 或 USB,對應地執行 lspci -klsusb -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
注意:如果網卡是 USB 設備,以 root 權限執行 grep usbcore 的輸出應當類似於 usbcore: registered new interface driver rtl8187


If you do not see the card at all, it may not be seated/plugged in properly in its PCI(e) slot/USB port. Try re-plugging it in.

同時也要通過 ip link 命令來查看無線接口是否已經創建。通常來説,設備名以字母「w」開頭,例如wlan0wlp2s1。確認之後,使用以下命令使設備上線:

# 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

如果需要的內核模塊已經加載且網絡接口已經上線,您可以跳過下一節的內容。

安裝驅動程序/固件[編輯 | 編輯原始碼]

根據獲得的信息,在下面網址查找硬件支持:

注意有些廠商的產品名稱相同,實際使用的晶片組卻不同。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
  1. 過時,不推薦使用.
  2. 一些老驅動只支持WEXT

iw 與 wireless_tools 的對比[編輯 | 編輯原始碼]

下面表格給出了 iwwireless_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[編輯 | 編輯原始碼]

注意:
  • 多數命令需要使用 root權限 執行。 使用普通用户執行某些命令,如 iw list,不會輸出任何錯誤但並不會產生正確的輸出,造成疑惑。
  • 根據您硬件或加密類型的不同,某些步驟並非必要。在連接至某個接入點及獲取IP位址之前,某些網卡需要首先被 激活 與/或 掃描熱點。這可能需要您自己嘗試。例如,WPA/WPA2 用户可能會嘗試直接從步驟 連接到接入點 開始來激活無線網絡。

本章節的示例會假定您的無線接口設備名稱是 interface, 您想要連接到的WiFi接入點名稱是 your_essid。請將這兩個字段作相應替換。

獲取接口名[編輯 | 編輯原始碼]

提示:更多關於 iw 工具的示例,請查看 官方文檔

獲取您無線網卡的名稱,運行:

$ iw dev

接口的名稱會在 "Interface" 單詞後顯示。比如,常見的無線網卡設備名是 wlan0

檢查連接狀態[編輯 | 編輯原始碼]

用下面的命令檢查連接狀態:

$ iw dev interface link

獲取統計數據[編輯 | 編輯原始碼]

獲取一些統計數據,比如上傳下載的數據量,信號強度等:

$ iw dev interface station dump

激活接口[編輯 | 編輯原始碼]

提示:通常不需要執行此步驟。

一些無線網卡在使用 iwwireless_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
注意:如果顯示 "Interface doesn't support scanning",可能是忘了安裝固件。有時不以 root 運行 iwlist 也會產生這個問題。無線網絡也可能被軟鎖定,請運行 rfkill list all 進行檢查。


提示:Depending on your location, you might need to set the correct regulatory domain in order to see all available networks.

需要關注的信息:

  • SSID: 網絡的名稱.
  • Signal: 用 dbm (-100 to 0) 報吿的無線信號強度。數值越接近零,信號越好。觀察高質量連接和低質量連接的數值差異可以了解設備的信號範圍。
  • Security: 沒有直接報吿, 檢查 capability 開頭的行,如果有 Privacy 信息,例如 capability: ESS Privacy ShortSlotTime (0x0411), 表示網絡具有某種程度的保護,
    • 如果有 RSN 信息,網絡被 Robust Security Network(WPA2) 協議保護。
    • 如果有 WPA 信息,網絡被 Wi-Fi Protected Access 協議保護。
    • RSNWPA 信息塊中,可能看到如下信息:
      • Group cipher: 數值包括 TKIP, CCMP, both, others.
      • Pairwise ciphers: 數值包括 TKIP, CCMP, both, others. 可能和 Group cipher 數值不同.
      • Authentication suites: 數值包括 PSK, 802.1x, others. 家用路由器通常可以看到 PSK (i.e. 密碼). 在大學中,通常會連結到需要登錄名和密碼的 802.1x 網絡。需要知道其使用的密碼管理方式(例如 EAP), 封裝方法 (例如 PEAP). 詳情請參考這裏這裏.
    • 如果沒有看到 RSNWPA,但是看到了 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_supplicantiwd 來連接, 或者直接使用網絡管理器. 如果您只進行了認證,那麼要獲取功能齊全的連接,您仍然需要進行手動連接或使用 DHCP 客户端。

WPA2 企業模式[編輯 | 編輯原始碼]

WPA2 企業模式也是一種 受保護Wi-Fi訪問(Wi-Fi存取保護)的模式,提供了比 WPA2 個人版更好的安全性和密鑰管理,並支持其他的企業型功能,例如 VLAN 和 NAP。然而,與個人模式不同,此種加密需要額外的 RADIUS 認證伺服器來處理用户的認證。個人模式不需要除無線路由器/接入點以外的設備,對所有用户也只要求一個密碼或密碼短語。

企業模式允許用户使用用户名和密碼或者數字證書來登錄 Wi-Fi。因為每個用户都擁有一個動態唯一的加密密碼,因此企業模式可以防止通過無限網絡的用户探聽,並提高加密強度。

本章節描述如何使用網絡管理器來連接到使用 WPA2 企業模式的無線接入點。

查看軟件接入點#RADIUS 來獲取關於設置接入點自身的相關信息。

注意:企業級加密模式需要更複雜的客户端配置,個人模式則只需要在出現提示時輸入密碼。客户端可能需要安裝伺服器的 簽名證書(CA certificate),如果使用 EAP-TLS, 則另需要為每個用户安裝證書,再手動配置無線安全和 802.1X 認證設置。

協議間的對照可以參照此表格

警吿:您可以讓客户端在使用WPA2企業級時不檢查伺服器的授權證書。然而,您在任何情況下都該盡最大努力來配置證書,因為如果不驗證接入點,連接可能遭受中間人攻擊。雖然連接握手可能是加密的,但最常見的密碼傳輸配置會將密碼用明文或易於破解的MS-CHAPv2協議協議進行傳輸。因此,客户端可能會將密碼發送到代理連接的惡意接入點。

MS-CHAPv2[編輯 | 編輯原始碼]

有時,除了原配的 ppp (Point-to-Point Protocol) 之外,要求 MSCHAPv2 type-2 with PEAP 的 WPA2 企業級接入點有時會需求 pptpclientnetctl 似乎能在缺少 ppp-mppe 的情況下開箱即用。雖然其他認證實現方式通常都並不可用,由於其高度脆弱的特性,用户在任何情況下都不被鼓勵使用 MSCHAPv2。

eduroam[編輯 | 編輯原始碼]

eduroam 是一項面向科研,高等教育與繼續教育領域人員的國際漫遊服務。

注意:* 在應用本章節列出的任何配置之前,首先向您的機構確認連接的詳細信息。示例配置不保證任何安全性或者匹配任何安全需求。
  • 存儲未加密的連接配置文件時,建議用 root 用户運行以下命令以限制 root 帳户對此文件的的讀取訪問權限: chmod 600 配置文件
提示:針對 NetworkManager 的配置可以用 eduroam 配置助手工具 來生成。 此工具需要安裝 pythondbus-python

手動/自動配置[編輯 | 編輯原始碼]

注意:特殊引用規則適用: 參考 netctl.profile(5) § SPECIAL QUOTING RULES.
提示:自定義證書可通過在 WPAConfigSection 中添加字段 'ca_cert="/path/to/special/certificate.cer"' 來配置。

WPA3 個人[編輯 | 編輯原始碼]

WPA3 Personal, 又名 WPA3-SAE, 是一種 受保護Wi-Fi訪問(Wi-Fi存取保護)的模式。

wpa_supplicantiwd 都支持 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位址失敗[編輯 | 編輯原始碼]

本文或本章節的事實準確性存在爭議。

原因: The dhcpcd vs dhclient is mostly FUD.(在 Talk:網絡配置/無線網絡配置 中討論)

本文或本節內容已經過時。

原因: iwconfig 被棄用了, 詳見 #iw and wireless tools comparison. (在Talk:網絡配置/無線網絡配置討論)
  • 如果用 dhcpcd 客户端獲取ip地址反覆多次均失敗, 嘗試安裝並使用 dhclient 。不要忘記在連接管理器中選擇 dhclient 作為首選DHCP客户端
  • 如果你使用有線接口可以獲得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].

注意:Intel IOMMU 驅動對於一些高級虛擬機功能是必需的,如PCI直通。

Cause #6[編輯 | 編輯原始碼]

如果你用的是帶 iwlwifiiwlmvm 的設備進行無線連接,使用電池電源的時候,無線網卡似乎消失了,(可能是重啟或從休眠中恢復後),可以通過 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

你遇到的是漫遊問題,可採取以下措施:

Wi-Fi 由於錯誤的信道設置而變得不可見[編輯 | 編輯原始碼]

若電腦 Wi-Fi 信道不符合用户所處國家之規定,部分Wi-Fi即使處於信號覆蓋範圍內,也可能因信道默認不被允許而不可見。參閱 #Respecting the regulatory domain.

驅動與固件排錯[編輯 | 編輯原始碼]

這一部分包含了關於特定晶片組安裝內核模塊與固件的方法與規範,不同於一般的方法。

參閱內核模塊了解通用的模塊操作方法。

Ralink[編輯 | 編輯原始碼]

rt2x00[編輯 | 編輯原始碼]

Ralink 晶片組的統一驅動,代替了 rt2500rt61rt73 等。Linux 內核從 2.6.24

開始包含此驅動,但是有些設備可能需要額外固件。可以使用標準 wpa_supplicantiwconfig 工具配置。

有些晶片組需要固件文件,可以安裝軟件包 linux-firmware

參見: Using the new rt2x00 beta driver

  • 從內核 3.0 開始,rt2x00 也包含了這些驅動程序:

rt2800pcirt2800usbrt2860sta 被主分支驅動 rt2800pci 替代,rt2870start2800usb 替代。

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[編輯 | 編輯原始碼]

rtl8723aertl8723be 模塊已經被包含在 Linux 內核主線。

一些用户使用此網卡時可能會遇到省電方面的問題. 這表現為可能偶爾斷開連接,但高級網絡管理器無法識別 (netctlNetworkManager)。以 root 身份執行 dmesg -w 可以驗證這個錯誤 ,或以 root 身份執行 journalctl -f 查找與 powersave 和rtl8723ae/rtl8723be

模塊相關的輸出. 如果你遇到了這個問題,使用 fwlps=0 內核選項,這樣可以防止無線網卡自動休眠或停止連接。參閱內核模塊#配置模塊參數

如果你信號很差,可能你只有一個物理天線連接了,並且天線的自動選擇損壞了。可以用 ant_sel=1ant_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,所以應確保已安裝內核頭文件。

注意:有報吿[8]提出,在 Linux 內核版本 ≥ 5.9 中由 Realtek 提供的 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[編輯 | 編輯原始碼]

這篇文章的某些內容需要擴充。

原因:應説明有關主線模塊和內核版本的具體問題。 (在 Talk:網絡配置/無線網絡配置 中討論)

可以通過安裝 linux-firmware 來獲得 rtl8xxxu 的驅動程序。

rtl8xxxu 主線內核模塊的問題可通過編譯特定晶片組的第三方模塊來解決。原始碼可在 GitHub 存儲庫中找到。 某些驅動程序可能已存在於在 AUR 中,例如 rtl8723bu-dkms-gitAUR

提示:如果您的 USB 無線適配器基於 RTL8188GURTL8192FU 晶片,您可能需要安裝 usb_modeswitch 以將其切換至 Wifi 模式

RTW88[編輯 | 編輯原始碼]

一份 RTW88 內核模塊補丁集最近被發到內核郵件列表中,有望被添加進內核主線。

如果正確配置和編譯的話,上游內核以及帶有補丁集的內核將會支持大部分 RTW88 晶片設備。linux-zenlinux-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 會自動加載驅動,否則要手動加載 iwl3945iwl4965。詳見內核模塊

如果連不上網或者連接很弱,嘗試啟用 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
注意:從內核版本 5.8 起, 對於由 iwlmvm 內核模塊處理的硬件, bt_coex_activesw_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 閃爍[編輯 | 編輯原始碼]
注意:適用於 iwlegacyiwlwifi 驅動

默認設置中 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
提示:如果你沒有 /sys/class/leds/phy0-led,嘗試使用 led_mode="1" 模塊參數。它應當同時適用於 iwlwifiiwlegacy 驅動。
# 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 和新內核模塊 p54pcip54usb 同時裝入造成衝突,使用 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[編輯 | 編輯原始碼]

警吿:適用於這些設備的驅動 已損壞且並不適用於更新的內核版本。

軟件包: tiacxtiacx-firmware (已被官方倉庫 和 AUR 移除)。

詳見 官方維基

ndiswrapper[編輯 | 編輯原始碼]

Ndiswrapper並不是一個真正的驅動,但是如果你無法找到適合你的無線網卡驅動, 它就派上用場了.有的時候, 它是非常有用的.為了使用Ndiswrapper, 你需要 Windows 驅動中的 *.inf 文件(*.sys 文件應該和 *.info 在同一個目錄中)。如果你需要從 *.exe 文件解壓縮,你可以使用 cabextract

警吿:確保使用合適架構(也就是 32/64 位)的驅動。

下面是安裝 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 howtondiswrapper FAQ.

參見[編輯 | 編輯原始碼]