网络配置/无线
关于网络配置的主文章是 网络配置。
配置无线网络是一个两步过程;第一步是识别并确保安装了正确的无线设备驱动程序(它们在安装介质上可用,但通常需要显式安装),并配置接口。第二步是选择一种管理无线连接的方法。本文涵盖了这两个部分,并提供了对无线管理工具的附加链接。
本节 #iw 描述了如何使用 iw 手动管理您的无线网络接口/无线局域网。 网络配置#网络管理器 部分描述了几种可用于自动管理无线接口的程序,其中一些包含图形界面,并且所有程序都支持网络配置文件(在频繁切换无线网络时很有用,例如使用笔记本电脑时)。
设备驱动程序
默认的 Arch Linux 内核是*模块化*的,这意味着许多机器硬件的驱动程序驻留在硬盘上,并作为模块可用。启动时,udev 会盘点您的硬件并为相应的硬件加载适当的模块(驱动程序),这将允许创建网络*接口*。
一些无线芯片组除了相应的驱动程序外还需要固件。许多固件镜像由 linux-firmware 包提供;但是,专有固件镜像不包含在内,需要单独安装。这在 #安装驱动程序/固件 中进行了描述。
检查驱动程序状态
要检查您的网卡驱动程序是否已加载,请查看 lspci -k 或 lsusb -v 命令的输出,具体取决于网卡是通过 PCIe 还是 USB 连接。您应该会看到某个内核驱动程序正在使用,例如
$ lspci -knnd ::0280
00:14.3 Network controller [0280]: Intel Corporation BE201 320MHz [8086:a840] (rev 10) Subsystem: Intel Corporation Device [8086:00e4] Kernel driver in use: iwlwifi Kernel modules: iwlwifi
- 如果网卡是 USB 设备,以 root 身份运行
dmesg | grep usbcore应该会输出类似usbcore: registered new interface driver rtl8187的内容。 - 如果您根本没有看到网卡,它可能没有正确插入其 M.2 插槽/PCIe 插槽/USB 端口。尝试重新插入它。
同时检查 ip link 命令的输出,以查看是否创建了无线接口;通常无线 网络接口 的名称以字母 "wl" 开头,例如 wlan0 或 wlp2s0。然后使用以下命令激活接口:
# ip link set interface 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
[ 3.347770] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-bz-b0-fm-c0-99.ucode failed with error -2 [ 3.351615] iwlwifi 0000:00:14.3: loaded firmware version 98.d661c37c.0 bz-b0-fm-c0-98.ucode op_mode iwlmld
如果没有相关输出,请检查您之前识别的模块(在此示例中为 iwlwifi)的完整输出的内核消息,以识别相关消息或进一步的问题。
# dmesg | grep iwlwifi
[ 3.330590] iwlwifi 0000:00:14.3: enabling device (0000 -> 0002) [ 3.347075] iwlwifi 0000:00:14.3: Detected crf-id 0xbadcafe, cnv-id 0x1080900 wfpm id 0x80005b20 [ 3.347090] iwlwifi 0000:00:14.3: PCI dev a840/00e4, rev=0x461, rfid=0x20112200 [ 3.347092] iwlwifi 0000:00:14.3: Detected Intel(R) Wi-Fi 7 BE201 320MHz [ 3.347770] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-bz-b0-fm-c0-99.ucode failed with error -2 [ 3.351213] iwlwifi 0000:00:14.3: TLV_FW_FSEQ_VERSION: FSEQ Version: 0.0.4.196 [ 3.351615] iwlwifi 0000:00:14.3: loaded firmware version 98.d661c37c.0 bz-b0-fm-c0-98.ucode op_mode iwlmld [ 3.914194] iwlwifi 0000:00:14.3: Detected RF FM, rfid=0x20112200 [ 3.914986] iwlwifi 0000:00:14.3: loaded PNVM version 752be616
如果内核模块已成功加载并且接口已激活,您可以跳过下一节。
安装驱动程序/固件
请检查以下列表以了解您的网卡是否受支持。
- 请参阅 现有 Linux 无线驱动程序 表格,并链接到特定驱动程序的页面,该页面包含支持的设备列表。此外还有一个 Linux Wi-Fi 设备 ID 列表。
- Ubuntu Wiki 上的 Ubuntu Wiki 有一个很好的无线网卡列表,以及它们是否在 Linux 内核中受支持或通过用户空间驱动程序(包括驱动程序名称)受支持。
- Linux Wireless Support 和 Linux Questions 的 硬件兼容性列表 (HCL) 也拥有一个很好的内核友好硬件数据库。
请注意,某些供应商提供的产品可能包含不同的芯片组,即使产品标识符相同。只有 USB ID(对于 USB 设备)或 PCI ID(对于 PCIe 设备)才是权威的。
如果您的无线网卡在上面列出,请遵循本页的 #驱动程序和固件故障排除 子部分,其中包含有关安装某些特定无线网卡驱动程序和固件的信息。然后再次 检查驱动程序状态。
如果您的无线网卡未在上面列出,它很可能仅在 Windows 下受支持(某些 Broadcom、3com 等)。对于这些,您可以尝试使用 ndiswrapper。
工具
与其他网络接口一样,无线接口也由 iproute2 包中的*ip*命令控制。
管理无线连接可以使用 网络管理器 来完成,它将使用 wpa_supplicant 或 iwd 进行无线身份验证,或者直接使用*wpa_supplicant*或*iwd*。对于较低级别的配置,或者如果您正在使用旧版驱动程序或旧版身份验证方法,还有 iw 和已弃用的 wireless_tools。
iw 和 wireless_tools 比较
| 软件 | 软件包 (Package) | WEXT2 | nl80211 | WEP | WPA/WPA2/WPA3 | Archiso |
|---|---|---|---|---|---|---|
| iw | iw | 否 | 是 | 是 | 否 | 是 |
| wireless_tools1 | wireless_tools | 是 | 否 | 是 | 否 | 是 |
- 已弃用。
- 请注意,一些老旧的驱动程序仅支持 WEXT。
下表提供了*iw*和*wireless_tools*可比命令的概述。有关更多示例,请参阅 使用 iw 替换 iwconfig。
| 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 | 使用十六进制密钥连接到 WEP 加密网络。 |
| iwconfig wlan0 essid your_essid key s:your_key | 使用 ASCII 密钥连接到 WEP 加密网络。 | |
| iw dev wlan0 set power_save on | iwconfig wlan0 power on | 启用省电。 |
iw
本节中的示例假定您的无线设备接口是interface,并且您正在连接到your_essid Wi-Fi 接入点。请相应地替换两者。
获取接口名称
要获取无线接口的名称,请执行以下操作:
$ 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 注意事项。要验证接口是否已激活,请检查以下命令的输出:
$ 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 does not support scanning,则您可能忘记安装固件。在某些情况下,当*iw*不是以 root 权限运行时也会显示此消息。需要检查的关键点:
- SSID:网络名称。
- 信号:以 dBm 为单位的无线功率比(例如,从 -100 到 0)。负值越接近零,信号越好。观察高质量连接和差连接的报告功率应该能大致了解个体范围。
- 安全性:不直接报告,请检查以
capability开头的行。如果存在Privacy,例如capability: ESS Privacy ShortSlotTime (0x0411),则该网络受到某种保护。- 如果您看到
RSN信息块,则该网络受到 健壮安全网络 协议(也称为 WPA2)的保护。 - 如果您看到
WPA信息块,则该网络受到 Wi-Fi Protected Access 协议的保护。 - 在
RSN和WPA块中,您可能会找到以下信息:- 组加密: TKIP、CCMP、两者、其他值。
- 对等加密: TKIP、CCMP、两者、其他值。不一定与组加密相同。
- 身份验证套件: PSK、802.1x、其他值。对于家庭路由器,您通常会找到 PSK(即密码)。在大学里,您更有可能找到 802.1x 套件,它需要用户名和密码。然后您需要知道正在使用哪种密钥管理(例如 EAP),以及它使用了什么封装(例如 PEAP)。有关详细信息,请参阅 #WPA2 企业版 和 Wikipedia:Authentication protocol。
- 如果您既看不到
RSN也看不到WPA块,但存在Privacy,则使用 WEP。
- 如果您看到
设置工作模式
您可能需要设置无线网卡的正确工作模式。具体来说,如果您要连接 Ad-hoc 网络,则需要将工作模式设置为 ibss。
# iw dev interface set type ibss
ip link set interface down)。iw interface set type ap)时,您会收到类似以下的错误:You need to run a management daemon, e.g. hostapd, see https://wireless.wiki.kernel.org/en/users/documentation/hostapd for more information on how to do that.这可以通过将工作模式更改为
__ap(iw interface set type __ap)来绕过。[1]连接到接入点
根据加密方式,您需要将无线设备与接入点关联才能使用并传递加密密钥。
- 无加密
# iw dev interface connect "your_essid"
- WEP
- 使用十六进制或 ASCII 密钥(格式会自动区分,因为 WEP 密钥长度固定)。
# iw dev interface connect "your_essid" key 0:your_key
- 使用十六进制或 ASCII 密钥,将第三个设置的密钥指定为默认值(密钥从零开始计数,最多有四个)。
# iw dev interface connect "your_essid" key d:2:your_key
- 使用十六进制或 ASCII 密钥(格式会自动区分,因为 WEP 密钥长度固定)。
- 其他
- iw 只能处理 WEP。要使用其他加密方案进行连接,请参阅下面的 #身份验证 部分。
无论使用哪种方法,您都可以检查是否已成功关联。
# iw dev interface link
身份认证
Linux 上主要有两种 Wi-Fi 身份验证选项:wpa_supplicant 和 iwd。
WPA2 个人版
WPA2 个人版,又称 WPA2-PSK,是 Wi-Fi Protected Access 的一种模式。
您可以使用 wpa_supplicant 或 iwd 身份验证到 WPA2 个人版网络,或者使用 网络管理器 连接。如果您仅完成了网络身份验证,那么要获得功能齐全的连接,您仍然需要手动分配 IP 地址和路由,或者使用 DHCP 客户端。
WPA2 企业版
WPA2 企业版 是 Wi-Fi Protected Access 的一种模式。它提供了比*WPA2 个人版*更好的安全性和密钥管理,并支持其他企业类型的功能,如 VLAN 和 NAP。但是,它需要一个外部身份验证服务器,称为 RADIUS 服务器,来处理用户的身份验证。这与个人模式不同,后者除了无线路由器或接入点 (AP) 之外不需要任何东西,并且对所有用户使用单个密码或口令。
企业模式允许用户使用用户名和密码以及/或数字证书登录 Wi-Fi 网络。由于每个用户都有一个动态且唯一的加密密钥,因此它还有助于防止无线网络上的用户间窥探,并提高加密强度。
本节描述了 网络客户端 配置,以连接到 WPA2 企业模式的无线接入点。有关设置接入点本身的信息,请参阅 软件接入点#RADIUS。
有关协议的比较,请参阅以下 表格。
MS-CHAPv2
要求 MSCHAPv2 类型 2 身份验证并使用 PEAP 的 WPA2-Enterprise 无线网络有时需要 pptpclient 以及标准的 ppp 包。 netctl 似乎可以立即使用而无需 ppp-mppe。但是,在任何一种情况下,MSCHAPv2 的使用都不被推荐,因为它非常容易受到攻击,尽管通常没有其他选择。
eduroam
eduroam 是一个面向研究、高等教育和继续教育用户的国际漫游服务,基于 WPA2 企业版。
- 在应用本节中列出的任何配置文件*之前*,请先与您的机构核对连接详细信息。示例配置文件不能保证正常工作或满足任何安全要求。
- 在未加密存储连接配置文件时,建议通过指定
chmod 600 profile(以 root 身份)来限制对 root 帐户的读取访问。 - 如果使用 NetworkManager 进行身份验证时一直失败,请尝试为 TLS 1.0 设置
phase1-auth-flags=32,或为 TLS 1.1 设置phase1-auth-flags=64,如 [2] 和 NetworkManager#WPA Enterprise connections fail to authenticate with OpenSSL "unsupported protocol" error 中所述。
手动/自动设置
- wpa_supplicant 可以通过其配置文件或使用其 CLI/GUI 前端直接配置,并与 DHCP 客户端结合使用。有关配置连接详细信息,请参阅
/usr/share/doc/wpa_supplicant/wpa_supplicant.conf中的示例。 - iwd#WPA 企业版
- NetworkManager 可以使用 nmcli、nmtui 或 图形前端 创建 WPA2 企业版配置文件。
- 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 个人版,又称 WPA3-SAE,是 Wi-Fi Protected Access 的一种模式。
wpa_supplicant 和 iwd 都支持 WPA3 个人版。
WPA3 企业版
WPA3 企业版是 Wi-Fi Protected Access 的一种模式。
wpa_supplicant(自版本 2:2.10-8 起)支持 WPA3 企业版。请参阅 FS#65314。
技巧与提示
遵守监管域
监管域,或称“regdomain”,用于重新配置无线驱动程序,以确保无线硬件的使用符合 FCC、ETSI 和其他组织设定的当地法律。Regdomains 使用 ISO 3166-1 alpha-2 国家代码。例如,美国的 regdomain 是“US”,中国的 regdomain 是“CN”,等等。
Regdomains 影响无线信道的可用性。在 2.4GHz 频段,美国允许的信道是 1-11,日本是 1-14,世界其他大部分地区是 1-13。在 5GHz 频段,允许信道的规则要复杂得多。无论哪种情况,请参考此 WLAN 信道列表以获取更详细的信息。
Regdomains 还影响无线设备的有效全向辐射功率 (EIRP) 的限制。这源自发射功率/“tx power”,并以dBm/mBm (1dBm=100mBm) 或 mW (对数刻度) 为单位测量。在 2.4GHz 频段,美国和加拿大的最大值为 30dBm,欧洲大部分地区为 20dBm,世界其他地区为 20dBm-30dBm。在 5GHz 频段,最大值通常较低。请参考wireless-regdb 以获取更详细的信息(EIRP dBm 值在每行的第二个方括号内)。
错误配置 regdomain 可能有用——例如,在其他信道拥挤时允许使用未使用的信道,或允许增加 tx 功率以扩大发射器范围。但是,不推荐这样做,因为它可能违反当地法律并干扰其他无线电设备。
当 wireless-regdb 安装后,内核会直接加载数据库。为了安全起见,内核应配置为 CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS 设置为 yes,以允许对数据库进行加密验证。这是默认 Arch 内核的情况,但如果您使用的是备用内核或自己编译内核,则应进行验证。更多信息可在此指南中找到[死链 2024-07-30—未解析域名]。
要配置 regdomain,请安装 wireless-regdb 并重启,然后编辑 /etc/conf.d/wireless-regdom 并取消注释相应的域。
当前的 regdomain 可以临时设置为美国,使用
# iw reg set US
并使用以下命令查询
$ iw reg get
但是,设置 regdomain 可能不会改变您的设置。某些设备在固件/EEPROM 中设置了 regdomain,这决定了设备的限制,这意味着在软件中设置 regdomain 只能增加限制,不能减少。例如,一个 CN 设备可以在软件中设置为 US regdomain,但由于 CN 的 EIRP 最大值为 20dBm,设备将无法以 US 的最大值 30dBm 进行传输。
例如,要查看 Atheros 设备是否在固件中设置了 regdomain
# journalctl -kg ath:
对于其他芯片组,搜索“EEPROM”、“regdomain”或设备驱动程序的名称可能会有所帮助。
要查看您的 regdomain 更改是否成功,并查询可用信道的数量及其允许的发射功率
$ iw list | grep -A 15 Frequencies:
wpa_supplicant 也可以使用 /etc/wpa_supplicant/wpa_supplicant.conf 文件中的 country= 行来设置 regdomain。
还可以通过在模块选项中添加 options cfg80211 ieee80211_regdom=JP 来配置 cfg80211 内核模块使用特定的 regdomain。模块选项继承自旧的监管实现,在现代内核中,它就像通过 nl80211 通过 iw 和 wpa_supplicant 等实用程序传递一样,充当用户空间监管提示。
Rfkill 注意事项
许多笔记本电脑都有硬件按钮(或开关)来关闭无线网卡;但是,网卡也可以被内核阻止。这可以通过 rfkill(8) 来处理。要显示当前状态
$ rfkill
ID TYPE DEVICE SOFT HARD 0 bluetooth hci0 unblocked unblocked 1 wlan phy0 unblocked unblocked
如果网卡被 *hard-blocked*(硬阻塞),请使用硬件按钮(开关)解除阻塞。如果网卡未被 *hard-blocked* 但被 *soft-blocked*(软阻塞),请使用以下命令
# rfkill unblock wlan
rfkill 内核模块的某些选项来解决。用于切换无线网卡的硬件按钮由特定厂商的 内核模块处理。通常,这些是 WMI 模块。特别是对于非常新的硬件型号,有时型号尚未在最新的稳定内核中得到完全支持。在这种情况下,搜索内核 bug 跟踪器以获取信息,并将型号报告给相应的厂商内核模块维护者(如果尚未报告)通常会有帮助。
另见 [3]。
电源管理
参见 电源管理#网络接口。
故障排除
本节包含一般性的故障排除技巧,不 strictly 与驱动程序或固件问题相关。有关此类主题,请参阅下一节 #Troubleshooting drivers and firmware。
临时互联网访问
如果您有硬件问题,需要互联网访问以下载软件或在论坛上寻求帮助,您可以使用 Android 内置的通过 USB 数据线共享互联网的功能。更多信息请参见 Android 共享网络#USB 共享网络。
观察日志
故障排除的一个好的初步措施是首先分析系统的日志文件。为了避免手动解析所有日志,可以打开第二个终端/控制台窗口,并观察内核消息:
# dmesg -w
在执行操作(例如,无线连接尝试)时。
当使用网络管理工具时,对 systemd 也可以这样做:
# journalctl -f
通常,无线错误伴随着一个特定的原因代码进行断开连接,例如
wlan0: deauthenticating from XX:XX:XX:XX:XX:XX by local choice (reason=3)
查找原因代码可能会提供初步线索。也许它还能帮助您查看控制消息流程图,日志消息会遵循它。
本文中使用的各个工具提供了更详细调试输出的选项,如果需要,可以在分析的第二步中使用。
获取 IP 地址失败
- 如果您可以获取有线接口的 IP 地址但无法获取无线接口的 IP 地址,请尝试禁用无线网卡的电源管理功能(指定
off而不是on)。
- 如果您因“等待载波”问题而收到超时错误,则可能需要为特定设备将信道模式设置为
auto。
# iwconfig wlan0 channel auto
在将信道更改为 auto 之前,请确保您的无线接口已关闭。成功更改后,您可以再次启用该接口并继续进行。
IP 地址有效但无法解析主机
如果您位于一个可能有强制门户的公共无线网络上,请确保从您的 Web 浏览器访问一个 HTTP 页面(而不是 HTTPS 页面),因为某些强制门户仅重定向 HTTP。如果不是此问题,请检查您是否可以解析域名,可能需要使用 DHCP 广播的 DNS 服务器。
设置 RTS 和分片阈值
无线硬件默认禁用 RTS 和分片。这是两种提高吞吐量但以带宽为代价(即以速度为代价提高可靠性)的不同方法。在存在无线噪声或许多相邻接入点的情况下,这些方法很有用,它们可能导致超时或连接失败。
数据包分片通过将大于分片阈值的数据包拆分来提高吞吐量。最大值(2346)有效地禁用了分片,因为没有数据包可以超过它。最小值(256)最大化了吞吐量,但可能带来显著的带宽成本。
# iw phy0 set frag 512
RTS 通过在传输大于 RTS 阈值的数据包之前与接入点执行握手来提高吞吐量。最大阈值(2347)有效地禁用了 RTS,因为没有数据包可以超过它。最小阈值(0)为所有数据包启用 RTS,这对于大多数情况来说可能过多。
# iw phy0 set rts 500
phy0 是 iw phy 列出的无线设备的名称。随机断开连接
原因 #1
如果您的日志显示 wlan0: deauthenticating from MAC by local choice (reason=3) 并且您丢失了 Wi-Fi 连接,这很可能是因为您的 Wi-Fi 网卡使用了过于激进的省电模式。尝试禁用无线网卡的电源管理功能(指定 off 而不是 on)。
如果您的网卡不支持启用/禁用省电模式,请检查 BIOS 中的电源管理选项。禁用 Lenovo W520 的 BIOS 中的 PCI-Express 电源管理解决了此问题。
原因 #2
如果您遇到频繁断开连接,并且您的日志显示类似以下消息:
ieee80211 phy0: wlan0: No probe response from AP xx:xx:xx:xx:xx:xx after 500ms, disconnecting
请尝试通过路由器设置页面将信道带宽更改为 20MHz。
原因 #3
在某些带有硬件 rfkill 开关的笔记本电脑型号上(例如,Thinkpad X200 系列),由于磨损或设计缺陷,开关(或其与主板的连接)可能会随着时间的推移而松动,导致在意外触摸开关或移动笔记本电脑时出现看似随机的硬阻塞/断开连接。没有软件解决方案,除非您的开关是电子的且 BIOS 提供了禁用开关的选项。如果您的开关是机械的(大多数都是),则有许多可能的解决方案,其中大多数旨在禁用开关:在主板或 Wi-Fi 网卡上焊接接触点,粘合或阻塞开关,使用螺母固定开关或完全移除它。
原因 #4
导致频繁断开连接或完全无法连接的另一个原因可能是路由器质量不佳、路由器设置不完整、其他无线设备的干扰或信号质量差。
为了排查问题,首先尝试在没有身份验证的情况下连接到路由器,并靠近路由器。如果不起作用,请重启路由器并首先尝试使用其他设备连接。
如果有效,请再次启用 WPA/WPA2,但选择固定和/或有限的路由器设置。例如
- 如果路由器比您用作客户端的无线设备旧得多,请测试将路由器设置为一种无线模式是否有效。
- 禁用混合模式身份验证(例如,仅 WPA2 AES,或 TKIP,如果路由器很旧)。
- 尝试固定/免费信道而不是“自动”信道(也许邻居的路由器很旧并且有干扰)。
- 禁用 WPS。
- 将路由器的 5 GHz 信道更改为非 DFS(动态频率选择)信道。在这些信道上的连接可能会因附近天气雷达的干扰而中断或突然切换。
- 尝试将客户端设置为仅 2.4 GHz,而不是让它在 5 GHz 和 2.4 GHz 之间选择(后者吞吐量较低,但可以在更远的距离上提供更稳定的连接)。
- 禁用
40MHz信道带宽(吞吐量较低但碰撞可能性较小),使用cfg80211.cfg80211_disable_40mhz_24ghz=1。 - 如果路由器有服务质量设置,请检查设置的完整性(例如,Wi-Fi Multimedia (WMM) 是可选 QoS 流控制的一部分。有错误设置的路由器固件可能声明其存在,尽管设置未启用)。
原因 #5
在某些无线网络适配器(例如,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 驱动程序 (DMA),将 intel_iommu=off 添加到 内核参数中[4]。
原因 #6
如果您使用的是具有 iwlwifi 和 iwlmvm 的设备进行无线连接,并且您的 Wi-Fi 网卡在电池供电时(可能在重启或从挂起状态恢复后)会消失,可以通过配置 iwlmvm 中的电源管理设置来解决此问题。
如果 /etc/modprobe.d/iwlmvm.conf 文件不存在,请创建它,然后添加以下行:
/etc/modprobe.d/iwlmvm.conf
options iwlmvm power_scheme=1
power_scheme 为 1 会将 iwlmvm 设置为“始终活动”。可用选项为:
| 值 | 描述 |
|---|---|
| 1 | 始终活动 |
| 2 | 平衡 |
| 3 | 低功耗 |
此修复是在 [5] 中发现的。
原因 #7
如果您的设备长时间不活动(例如,文件服务器),则断开连接可能是由于电源管理导致的,这会阻止入站流量并防止连接。尝试禁用接口的电源管理:
# iw dev interface set power_save off
您可以创建一个 udev 规则在启动时执行此操作,请参阅 电源管理#网络接口。
原因 #8
如果您在连接到网状网络(例如,Wi-Fi 6)时注意到偶尔中断,并看到类似以下消息:
# 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#常规网络断开、延迟和丢包(Wi-Fi))。 - 调整 Wpa_supplicant#漫游 中的
bgscan设置。
由于不正确的监管域而导致 Wi-Fi 网络不可见
如果计算机的 Wi-Fi 信道与用户所在国家/地区的信道不匹配,则一些在范围内的 Wi-Fi 网络可能不可见,因为它们使用的无线信道未被默认允许。解决方案是正确配置监管域;参见 #Respecting the regulatory domain。
故障排除驱动程序和固件
本节介绍安装特定芯片组的内核模块和固件的方法和过程,这些方法和过程与通用方法不同。
有关模块操作的通用信息,请参阅 内核模块。
Ralink/MediaTek
某些芯片组需要额外的固件:linux-firmware-mediatek
rt2x00
Ralink 芯片组的统一驱动程序(它取代了 rt2500、rt61、rt73 等)。该驱动程序已包含在 Linux 内核 2.6.24 中,您只需要加载正确的模块即可用于芯片:rt2400pci、rt2500pci、rt2500usb、rt61pci 或 rt73usb,它们也会自动加载相应的 rt2x00 模块。
支持该模块的设备列表可在项目主页上找到。
- 附加说明
- 自内核 3.0 起,rt2x00 还包括以下驱动程序:
rt2800pci、rt2800usb。 - 自内核 3.0 起,staging 驱动程序
rt2860sta和rt2870sta已被主线驱动程序rt2800pci和rt2800usb取代[6]。 - 某些设备具有广泛的选项,可以使用
iwpriv进行配置。这些选项记录在 Ralink 提供的源代码包中。
rt3090
对于使用 rt3090 芯片组的设备,应该可以使用 rt2800pci 驱动程序;但是,它与该芯片组的兼容性不太好(例如,有时无法使用高于 2Mb/s 的速率)。
rt3290
rt3290 芯片组被内核 rt2800pci 模块识别。但是,一些用户遇到了问题,回滚到已修补的 Ralink 驱动程序似乎在这种情况下有益。
rt3573
截至 2012 年的新芯片组。它可能需要 Ralink 的专有驱动程序。不同的制造商使用它;请参阅 Belkin N750 DB 无线 USB 适配器论坛线程。
mt7612u
截至 2014 年的新芯片组,以其新的商业名称 MediaTek 发布。它是一个 AC1200 或 AC1300 芯片组。制造商在其支持页面上提供了 Linux 驱动程序。截至内核 5.5,它应该被包含的 mt76 驱动程序支持。
mt7921 / mt7922
这些 MediaTek 芯片组存在一些高延迟问题。要解决此问题,唯一的解决方案是禁用 ASPM。
/etc/modprobe.d/wifi.conf
options mt7921e disable_aspm=1
此配置文件将在下次重启或使用 modprobe 重新加载模块后生效。
# modprobe -r mt7921e && modprobe mt7921e
这些有时也以 AMD RZ608 (mt7921) 和 RZ616 (mt7922) 的品牌销售。
Realtek
有关 Realtek 芯片组和规格列表,请参阅 [7]。
rtl8192cu
驱动程序现已包含在内核中,但许多用户报告无法建立连接,尽管扫描网络可以正常工作。
8192cu-dkmsAUR 包含许多补丁;如果它在内核中的驱动程序无法正常工作,请尝试这个。
rtl8723ae/rtl8723be
rtl8723ae 和 rtl8723be 模块已包含在主线 Linux 内核中。
一些用户可能会遇到此网卡的电源管理问题。这表现为偶尔断开连接,但高层网络管理器(netctl,NetworkManager)无法识别。此错误可以通过以 root 身份运行 dmesg -w 或以 root 身份运行 journalctl -f 并查找与 powersave 和 rtl8723ae/rtl8723be 模块相关的输出来确认。如果您遇到此问题,请使用 fwlps=0 内核模块参数,这应该可以防止 Wi-Fi 网卡自动休眠并中断连接。
如果您信号不佳,可能是因为您的设备只连接了一根物理天线,并且天线自动选择功能已损坏。您可以使用 ant_sel=1 或 ant_sel=2 内核选项强制选择天线。[8]
rtl88xxau
Realtek 芯片组 rtl8811au、rtl8812au、rtl8814au 和 rtl8821au,适用于从 AC600 到 AC1900 的各种 USB 适配器。几个软件包提供了各种内核驱动程序,这些驱动程序需要 DKMS(dkms 包和已安装的内核头文件)。
| 芯片组 | 软件包 (Package) | 备注 |
|---|---|---|
| rtl88xxyy | rtw88-dkms-gitAUR | Realtek Wifi 5 驱动程序从 wireless-next 仓库反向移植。支持
|
| rtl8812au | rtl8812au-dkms-gitAUR | (可能已弃用) 仅适用于 rtl8812au 的替代官方 Realtek 驱动程序版本。 |
| rtl8811au, rtl8821au | rtl8821au-dkms-gitAUR | (可能已弃用) 适用于 rtl8821au 的替代驱动程序版本。 |
| rtl8814au | rtl8814au-dkms-gitAUR | (可能已弃用) 可能也适用于 rtl8813au。 |
rtl8811cu/rtl8821cu
rtl8821cu-dkms-gitAUR 提供 Realtek 8811cu 和 8821cu 芯片组的内核模块。
这需要 DKMS,因此请确保您已安装了正确的内核头文件。
如果即使 8821cu 模块已加载但没有显示无线接口,您可能需要手动指定 rtw_RFE_type 内核模块参数[9][10]。例如,尝试 rtw_RFE_type=0x26,其他值也可能有效。
rtl8821ce
rtl8821ce-dkms-gitAUR 提供 Realtek 8821ce 芯片组的内核模块,该芯片组存在于 Asus X543UA 中。
这需要 DKMS,因此请确保您已安装了正确的内核头文件。
rtl8821ce 模块对于 Linux 内核 ≥ 5.9 版本是损坏的,这可能导致连接性差。上述 AUR 版本应优先使用。请参阅GitHub 上的声明。使用 lspci -k 检查默认内核驱动程序(rtw88_8821ce)是否正在使用。如果是,请将其列入黑名单并重启系统。rtl8822bu
rtl88x2bu-dkms-gitAUR 提供 Realtek 8822bu 芯片组的内核模块,该芯片组存在于 Edimax EW7822ULC USB3、Asus AC53 Nano USB 802.11ac 和 TP-Link Archer T3U 适配器中。
这需要 DKMS,因此请确保您已安装了正确的内核头文件。
rtl8xxxu
主线内核模块 rtl8xxxu 的问题可以通过为特定芯片组编译第三方模块来解决。源代码可在 GitHub 存储库中找到。
某些驱动程序可能已在 AUR 中准备好,例如 rtl8723bu-dkms-gitAUR、rtl8852au-dkms-gitAUR、rtl8852bu-dkms-gitAUR、rtl8852cu-dkms-gitAUR。
RTW88
RWT88 内核模块包含在所有官方支持的 Arch Linux 内核中。支持的设备数量随着时间推移而增长,目前如果配置和编译正确,它支持大多数 RTW88 芯片设备。
截至 Linux 6.10.3,该驱动程序支持:882BE(可能)、8703B、8723CS、8723D、8723DE、8723DS、8723DU、8723X、8821C、8821CE、8821CS、8821CU、8822B、8822BE、8822BS、8822BU、8822C、8822CE、8822CS、8822CU。
要获取最新的列表,请在 linux 的 config 中按 Ctrl+F 搜索 CONFIG_RTW88_,或查看 wireless-next 上游。
请确保已配置 wireless-regdom。否则,您将能看到所有 Wi-Fi 网络,但无法连接。非主线驱动程序 rtl88x2bu-dkms-gitAUR 可以在没有此类配置的情况下连接,因此在从中切换时设置监管域很重要。
dmesg 中出现这些症状的外观
[ +13.369951] wlan0: send auth to *WiFi_AP_mac* (try 1/3) [ +0.000685] wlan0: authenticated [ +0.000449] wlan0: associate with *WiFi_AP_mac* (try 1/3) [ +0.000866] wlan0: RX AssocResp from *router_mac* (capab=0x1011 status=0 aid=2) [ +0.323058] wlan0: associated [ +0.000046] wlan0: deauthenticating from *WiFi_AP_mac* by local choice (Reason: 3=DEAUTH_LEAVING)
以及 iwd 日志中的
event: state, old: autoconnect_full, new: connecting event: connect-timeout, reason: 0 event: connect-failed, status: 1
RTW89
RTW89 内核模块已合并到上游内核,并为较新的 Realtek 无线芯片组提供支持。
此驱动程序支持:8852AE、8851BE、8852BE 和 8852CE。
在某些计算机上,您可能会遇到连接不稳定的情况。这似乎是 HP 和联想近期型号的常见问题。尝试使用以下配置禁用与 ASPM 相关的特性。
/etc/modprobe.d/70-rtw89.conf
options rtw89_pci disable_aspm_l1=y disable_aspm_l1ss=y options rtw89_core disable_ps_mode=y
参见
- https://github.com/lwfinger/rtw89#option-configuration
- https://github.com/lwfinger/rtw89/issues/275#issuecomment-1784155449
Atheros
对于 Atheros 芯片组的设备,存在不同的驱动程序。
ath5k是一个替换过时的madwifi驱动程序的驱动程序。目前对于某些芯片组来说是更好的选择,但并非所有芯片组都受支持(见下文)。ath9k适用于较新的 Atheros 芯片组。所有具有 802.11n 功能的芯片都受支持。ath12k是高通 Wi-Fi 7 (IEEE 802.11be) 设备的 Linux 驱动程序。ath12k 使用 mac80211。
对于某些 Atheros 设备,还有一些其他驱动程序。有关详细信息,请参阅 Linux Wireless 文档。
ath5k
外部资源
如果您发现网页随机加载速度非常慢,或者设备无法获取 IP 地址,请尝试通过加载带有 nohwcrypt=1 选项的 ath5k 模块,将加密从硬件切换到软件。有关详细信息,请参阅 Kernel modules#Setting module options。
某些笔记本电脑的无线 LED 指示灯可能会出现红蓝闪烁问题。要解决此问题,请执行以下操作
# echo none > /sys/class/leds/ath5k-phy0::tx/trigger # echo none > /sys/class/leds/ath5k-phy0::rx/trigger
有关替代方案,请参阅 此 bug 报告。
ath9k
外部资源
截至 Linux 3.15.1,一些用户遇到了带宽下降的问题。在某些情况下,可以通过为 ath9k 模块设置 nohwcrypt=1 内核模块参数来解决。
lsmod 命令查看正在使用的模块,如果 ath9k 的名称不同(例如 ath9k_htc),请相应修改。电源管理
尽管 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-intel 包中。
udev 应该会自动加载驱动程序,否则请手动加载 iwl3945 或 iwl4965。有关详细信息,请参阅 Kernel modules。
如果您在连接网络方面遇到普遍问题(例如,卡在启动时随机失败或链路质量很差),请尝试禁用 802.11n。
/etc/modprobe.d/iwl4965.conf
options iwl4965 11n_disable=1
iwlwifi
iwlwifi 是 Intel 当前无线芯片的无线驱动程序,例如 5100AGN、5300AGN 和 5350AGN。请参阅 支持的设备列表。
如果您在连接网络方面遇到普遍问题或链路质量很差,请尝试禁用 802.11n,并可能启用软件加密。
/etc/modprobe.d/iwlwifi.conf
options iwlwifi 11n_disable=1 swcrypto=1
如果您有上行速度慢的问题,可以尝试禁用无线适配器的 节能。
如果您有 802.11ax (Wi-Fi 6) 接入点,并且在检测信标或连接不稳定方面遇到问题,请参阅 Intel 文章 54799。
11n_disable=1 也会禁用 802.11ac,并且只能连接到较慢的协议(5GHz 频段上的 802.11a 或 2.4 GHz 频段上的 802.11b/g)。蓝牙共存
如果您在连接蓝牙耳机和保持良好的下行速度方面遇到困难,请尝试禁用 蓝牙共存。
/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-intel 包。
如果已确认,请移动有问题的固件文件,以便加载旧版本(以便拥有最新的 linux-firmware-intel,因为它不仅为您的 Intel Wi-Fi 卡提供固件更新)。
# 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 和 NoUpgrade 数组,并使用通配符来阻止它们的安装。
从 Windows 启动后适配器未检测到
如果在 Windows 中会话结束后 Wi-Fi 适配器未被检测到,这可能是由于 Windows 的 **快速启动** 功能默认启用了。请尝试 禁用快速启动。 iwlwifi 内核驱动程序 wiki 有一个关于此的条目。
禁用 LED 闪烁
iwlegacy 和 iwlwifi 驱动程序。模块的默认设置是让 LED 在活动时闪烁。有些人觉得这非常烦人。要让 Wi-Fi 激活时 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
Aicsemi
AIC8800/8801/8800DC/8800DW/8800FC
应使用这些设备的 aic8800-dkmsAUR 包。这些驱动程序不在主线 Linux 内核中,需要 DKMS。
AIC8800D80
对于此芯片变体,应使用 aic8800d80-dkmsAUR 包,而不是上面提到的包。
Broadcom
请参阅 Broadcom wireless。
其他驱动程序/设备
Tenda w322u
将此 Tenda 网卡视为 rt2870sta 设备。请参阅 #rt2x00。
orinoco
这应该已经包含在内核包中并已安装。
一些 Orinoco 芯片组是 Hermes II。您可以使用 wlags49_h2_cs 驱动程序代替 orinoco_cs 来获得 WPA 支持。要使用此驱动程序,请先 黑名单化 orinoco_cs。
prism54
驱动程序 p54 已包含在内核中,但您需要从 此网站下载适合您网卡的固件,并将其安装到 /usr/lib/firmware 目录。
zd1211rw
zd1211rw 是 ZyDAS ZD1211 802.11b/g USB WLAN 芯片组的驱动程序,它已包含在最新版本的 Linux 内核中。请参阅 [12] 以获取支持设备的列表。您只需要 安装由 zd1211-firmwareAUR 包提供的设备固件。
hostap_cs
Host AP 是基于 Intersil Prism2/2.5/3 芯片组的无线 LAN 网卡的 Linux 驱动程序。该驱动程序已包含在 Linux 内核中。
orinico_cs 驱动程序,它可能会导致问题。ndiswrapper
Ndiswrapper 是一个包装脚本,允许您在 Linux 中使用某些 Windows 驱动程序。您需要 Windows 驱动程序中的 .inf 和 .sys 文件。
按照以下步骤配置 ndiswrapper。
- 安装 ndiswrapper。
- 将驱动程序安装到
/etc/ndiswrapper/。# ndiswrapper -i filename.inf
- 列出 ndiswrapper 的所有已安装驱动程序。
$ ndiswrapper -l
- 让 ndiswrapper 将其配置写入
/etc/modprobe.d/ndiswrapper.conf。# ndiswrapper -m
# depmod -a
ndiswrapper 的安装几乎完成;您可以 在启动时加载模块。
测试 ndiswrapper 是否现在可以加载。
# modprobe ndiswrapper
有关无线接口现在存在的更多保证,请参阅 Network configuration#Listing network interfaces。
如果您遇到问题,可以在以下位置获得帮助:ndiswrapper howto 和 ndiswrapper FAQ。
参见
- Linux Wireless 项目
- Aircrack-ng 安装驱动程序指南
- Wireless Device Database Wiki(此分支由 wi-cat.ru 托管,因为原始 wiki 已关闭。有两个不太完整的版本可用:TechInfoDepot,deviwiki)
- https://github.com/morrownr/USB-WiFi – 关于不同 Wi-Fi 适配器和芯片组的各种信息,包括性能测试、驱动程序信息和一般信息。