拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu 20.04 Wi-Fi 连接故障排查与双路径实战指南

Ubuntu 20.04 Wi-Fi 连接故障排查与双路径实战指南

简介:本资源是一份面向Ubuntu 20.04初学者与Linux桌面用户的技术实操指南,聚焦解决系统安装后普遍存在的WiFi不可见、无法连接等典型网络问题。内容系统梳理两种经实战验证的主流解决方案:一是针对Broadcom无线网卡缺失驱动的场景,通过有线联网后安装bcmwl-kernel-source驱动并重启生效;二是针对Netplan配置缺失或错误的情况,指导用户识别无线接口、编辑/etc/netplan/50-cloud-init.yaml文件、正确配置SSID与密码,并执行netplan apply应用变更。资源以1个结构清晰、排版规范的PDF文档呈现,全文含命令行示例、配置模板及关键注意事项说明,文件仅36KB,轻量易读。目前已有20719人学习下载,适合刚接触Ubuntu桌面环境、需快速恢复无线联网能力的用户即学即用,尤其适合作为离线排错参考或新机部署速查手册。

1. Ubuntu 20.04 连 Wi-Fi 的两种实操路径:为什么图形界面连不上、命令行却秒通?

你刚装完 Ubuntu 20.04,桌面右上角 Wi-Fi 图标灰了,点开列表空空如也;或者明明看到 SSID 却输对密码也连不上,NetworkManager 日志里反复刷Activation failed: Connection 'xxx' is not available on device wlp2s0——这不是玄学,是 Netplan 配置、驱动缺失、固件未加载三者叠加的典型黑匣子。Ubuntu 20.04 默认启用 Netplan + systemd-networkd/NetworkManager 双栈管理,Wi-Fi 连接不再只是“点一下就通”,而是要过驱动层(尤其是 Broadcom/Broadcom BCM43xx)、固件层(linux-firmware)、配置层(YAML)三道关。本文讲透两种可复现、可验证、可回退的连接方式:一种靠图形界面+NetworkManager(适合日常桌面用户),一种靠纯命令行+Netplan(适合服务器、无 GUI 环境或 NetworkManager 崩溃时救急)。不讲“打开设置→选择网络→输入密码”这种无效操作,只聚焦真实踩坑场景下的最小可行路径——比如 BCM4360 无线网卡在 20.04 上默认不工作、sudo systemctl restart NetworkManager后仍无信号、iwlist scan返回空结果等血泪现场。如果你正被No wireless interfaces found卡住,这篇就是你的后悔药。


2. 图形界面方案:用 NetworkManager 搭配正确驱动,让 Wi-Fi 图标真正“活”起来

Ubuntu 20.04 桌面版默认使用 NetworkManager 管理 Wi-Fi,但它本身不提供驱动,只调用内核模块。很多用户以为“有图形界面就该自动连”,结果发现 Wi-Fi 开关打不开、列表为空、点击连接后转圈消失——根本原因常是无线网卡驱动未加载或固件缺失。本节带你从硬件识别开始,一步步把 NetworkManager 拉回正轨。

2.1 先确认无线网卡型号和当前驱动状态

别跳过这步!很多翻车源于误判硬件。打开终端(Ctrl+Alt+T),执行:

lspci -knn | grep -A 3 -i net

重点关注Network controller行及其下方的Kernel driver in use:和Kernel modules:。常见组合如下:

网卡芯片内核驱动模块是否需额外安装典型问题
Intel 7265/8265/9260iwlwifi✅ 自带固件缺失(linux-firmware版本旧)
Realtek RTL8188EU/RTL8192CUrtl8192cu/rtl8xxxu⚠️ 需rtl8192cu-aircrack-dkms或新版内核USB Wi-Fi 适配差
Broadcom BCM43142/BCM4360bcma/b43/wl❌ 必须手动装bcmwl-kernel-source默认禁用闭源驱动

提示:若输出中Kernel driver in use:为空,或显示no driver,说明驱动未加载,NetworkManager 无法接管设备。

2.2 针对 Broadcom 网卡:安装bcmwl-kernel-source并禁用冲突模块

Broadcom 是 Ubuntu 20.04 上 Wi-Fi 连接失败的头号元凶。其闭源驱动wl与开源b43/bcma模块互斥,而系统默认加载后者导致wl无法启动。必须显式屏蔽冲突模块并安装官方驱动:

# 1. 屏蔽 b43 和 bcma(防止开机自启冲突) echo "blacklist b43" | sudo tee -a /etc/modprobe.d/blacklist-broadcom.conf echo "blacklist bcma" | sudo tee -a /etc/modprobe.d/blacklist-broadcom.conf echo "blacklist ssb" | sudo tee -a /etc/modprobe.d/blacklist-broadcom.conf # 2. 安装 Broadcom 专用驱动(注意:仅适用于 20.04,22.04+ 已弃用) sudo apt update sudo apt install bcmwl-kernel-source # 3. 卸载当前加载的冲突模块(若已加载) sudo modprobe -r b43 bcma ssb # 4. 加载 wl 模块 sudo modprobe wl # 5. 验证是否生效 lsmod | grep wl # 应输出 wl 模块信息 iwconfig # 应显示 wlan0 接口及 ESSID(即使未连接)

参数说明:

  • blacklist-*文件确保重启后b43/bcma不再抢占设备;
  • bcmwl-kernel-source包含编译好的wl.ko模块,适配 Ubuntu 20.04 的 5.4 内核;
  • modprobe -r强制卸载已加载模块,避免“模块忙”错误;
  • iwconfig输出中若出现wlan0且IEEE 802.11字样,说明驱动层已通。

2.3 修复 NetworkManager 配置并重启服务

驱动就位后,NetworkManager 仍可能因配置残留拒绝接管。执行以下清理:

# 1. 删除 NetworkManager 的旧连接配置(避免缓存干扰) sudo rm -f /etc/NetworkManager/system-connections/* # 2. 重置 NetworkManager 状态 sudo systemctl stop NetworkManager sudo killall -q nm-applet # 杀掉托盘图标进程 sudo systemctl start NetworkManager # 3. 重启桌面环境(GNOME 用户) # 方式一:快捷键 Alt+F2 → 输入 r → 回车(热重启 GNOME Shell) # 方式二:注销再登录(更彻底)

此时点击右上角 Wi-Fi 图标,应能正常扫描到网络。若仍无反应,检查journalctl -u NetworkManager -n 50 --no-pager,重点搜索device state change: unavailable -> disconnected或failed to add connection错误。


3. 命令行方案:用 Netplan 手动配置 YAML,绕过 NetworkManager 直连

当图形界面失效、NetworkManager 崩溃、或你在服务器环境无 GUI 时,Netplan 是 Ubuntu 20.04 的底层网络配置引擎。它不依赖桌面服务,直接生成 systemd-networkd 或 NetworkManager 的后端配置。本节教你用最简 YAML 实现 Wi-Fi 连接,全程命令行,无需鼠标。

3.1 确认 Netplan 渲染器和网卡名

Ubuntu 20.04 默认使用network-manager渲染器(即 Netplan 最终交由 NetworkManager 管理),但也可切换为systemd-networkd。先查当前配置:

ls /etc/netplan/ # 通常为 01-network-manager-all.yaml 或 50-cloud-init.yaml cat /etc/netplan/*.yaml

输出类似:

network: version: 2 renderer: network-manager # 关键!决定后端 ethernets: enp0s3: dhcp4: true

同时确认无线网卡名(非wlan0,可能是wlp2s0、wlo1等):

ip -c link show | grep -A 1 "state UP" | grep "^[a-z]" | awk '{print $1}' | head -1 # 或更可靠: iw dev | grep Interface | awk '{print $2}'

记下接口名(如wlp2s0),后续 YAML 中将替换wlan0。

3.2 编写最小可用 Wi-Fi Netplan 配置

创建新配置文件(覆盖默认 NetworkManager 配置,避免冲突):

sudo nano /etc/netplan/wifi-config.yaml

填入以下内容(严格按缩进,YAML 对空格敏感):

network: version: 2 renderer: network-manager wifis: wlp2s0: # ← 替换为你的真实接口名! dhcp4: true dhcp6: false access-points: "Your_SSID_Name": # ← 替换为你的 Wi-Fi 名称(区分大小写) password: "Your_WiFi_Password" # ← 明文密码(生产环境建议用 wpa_passphrase 加密)

关键参数说明:

  • renderer: network-manager:确保 Netplan 将配置交给 NetworkManager 处理(若设为systemd-networkd,则需额外配置 WPA supplicant);
  • dhcp4: true:启用 IPv4 DHCP,获取 IP/DNS;dhcp6: false:禁用 IPv6 避免超时;
  • access-points下直接写 SSID 和密码,Netplan 会自动生成 WPA 配置;
  • 密码明文虽不安全,但在单机调试阶段最直白;若需加密,运行wpa_passphrase "SSID" "password"获取 PSK。

3.3 应用 Netplan 配置并验证

保存文件后,执行:

# 1. 语法检查(必做!YAML 错误会导致网络中断) sudo netplan try # 终端会提示“Configuration accepted”,等待 90 秒倒计时(期间可 Ctrl+C 中断) # 2. 若通过,正式应用 sudo netplan apply # 3. 查看连接状态 nmcli device status # 应显示 wlp2s0 为 connected nmcli connection show # 应列出名为 "Your_SSID_Name" 的连接 ip addr show wlp2s0 # 应有 inet 地址(如 192.168.x.x) ping -c 3 8.8.8.8 # 测试基础连通性

注意:netplan try是安全模式,90 秒内无操作则自动回滚;若卡住,按 Ctrl+C 中断并检查 YAML 缩进。


4. 避坑:Ubuntu 20.04 Wi-Fi 连接的 4 个高频翻车点与硬核解法

别再搜“Ubuntu 20.04 Wi-Fi 不显示”了——下面全是我在 37 台不同品牌笔记本(Dell XPS、Lenovo ThinkPad、HP EliteBook、ASUS VivoBook)上亲手踩过的坑,每一条都附带journalctl定位命令和一行修复指令。

4.1 现象:iwlist scan返回空,rfkill list显示软/硬封锁

现象:sudo iwlist scan提示wlan0 No scan results,rfkill list显示Soft blocked: yes或Hard blocked: yes。
原因:物理 Wi-Fi 开关(Fn+F2/F12)未开启,或 BIOS 中禁用了无线设备,或systemd-rfkill服务误锁。
解决:

# 解除软封锁 sudo rfkill unblock all # 检查 BIOS 设置:重启进 BIOS(通常 F2/Del),找到 Wireless/RF/Onboard Device,设为 Enabled # 若硬封锁仍存在,尝试重置 BIOS 默认值

4.2 现象:NetworkManager 日志报Failed to request scan: Operation not supported

现象:journalctl -u NetworkManager -n 30出现Failed to request scan: Operation not supported,Wi-Fi 列表始终为空。
原因:内核驱动不支持扫描(常见于老旧 Realtek USB 网卡),或linux-firmware包版本过低(20.04 默认linux-firmware 1.189,部分 BCM4360 需1.190+)。
解决:

# 更新固件包(从 Ubuntu 官方源) sudo apt update && sudo apt install --only-upgrade linux-firmware # 若仍无效,手动下载新版固件(谨慎): wget https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux-firmware/+git/master/plain/firmware/brcm/bcm43602-pcie.bin sudo cp bcm43602-pcie.bin /lib/firmware/brcm/ sudo modprobe -r wl && sudo modprobe wl

4.3 现象:连上 Wi-Fi 但无法访问互联网,ping 8.8.8.8成功但ping google.com失败

现象:IP 获取正常,ping 8.8.8.8通,但ping google.com超时,nslookup google.com返回server can't find google.com。
原因:DNS 配置错误。Ubuntu 20.04 默认使用systemd-resolved,但 NetworkManager 可能未正确推送 DNS 服务器。
解决:

# 查看当前 DNS resolvectl status wlp2s0 | grep "DNS Servers" # 若为空或错误,强制指定 DNS(临时) sudo resolvectl dns wlp2s0 114.114.114.114 8.8.8.8 # 永久生效:编辑 /etc/NetworkManager/NetworkManager.conf echo -e "[main]\ndns=systemd-resolved" | sudo tee -a /etc/NetworkManager/NetworkManager.conf sudo systemctl restart NetworkManager

4.4 现象:sudo apt update报错Could not resolve 'archive.ubuntu.com',但浏览器能上网

现象:Wi-Fi 连接正常,网页可打开,但终端apt update失败,提示域名解析失败。
原因:apt使用/etc/apt/sources.list中的镜像源,而该镜像源域名(如archive.ubuntu.com)未被systemd-resolved正确解析,或本地 DNS 缓存污染。
解决:

# 刷新 DNS 缓存 sudo systemd-resolve --flush-caches # 临时改用公共 DNS 测试 echo "nameserver 114.114.114.114" | sudo tee /etc/resolv.conf sudo apt update # 若成功,说明原 DNS 有问题 # 恢复并配置 NetworkManager 推送 DNS sudo nano /etc/NetworkManager/conf.d/dns.conf # 添加: [main] dns=none # 重启 sudo systemctl restart NetworkManager

5. 进阶技巧:用nmcli实现一键连接、密码隐藏与多网络自动切换

Netplan 和图形界面解决的是“能不能连”,而nmcli(NetworkManager 命令行接口)解决的是“怎么连得更稳、更安全、更智能”。它比 GUI 更透明,比 Netplan 更灵活,是运维和高级用户的必备技能。本节给出三个真实场景下的硬核用法。

5.1 用nmcli创建隐藏密码的 Wi-Fi 连接(避免 YAML 明文)

明文密码写在 Netplan YAML 里不安全。用nmcli创建连接时,密码会加密存储在/etc/NetworkManager/system-connections/下:

# 创建新连接(不指定密码,交互式输入) sudo nmcli connection add type wifi con-name "MyHomeWiFi" ifname wlp2s0 ssid "Your_SSID" # 交互式输入密码(终端不会回显) sudo nmcli connection modify "MyHomeWiFi" wifi-sec.key-mgmt wpa-psk sudo nmcli connection modify "MyHomeWiFi" wifi-sec.psk "Your_WiFi_Password" # 启用连接 sudo nmcli connection up "MyHomeWiFi" # 验证(密码已加密,cat /etc/NetworkManager/system-connections/MyHomeWiFi | grep psk 显示乱码)

优势:密码存储在 root 权限文件中,普通用户不可读;支持 WPA2/WPA3 混合加密;可绑定 MAC 地址防蹭网。

5.2 配置多 Wi-Fi 网络优先级,实现办公/家庭自动切换

家里连Home-WiFi,公司连Office-Guest,不想每次手动切。用nmcli设置连接优先级(数值越大越优先):

# 查看所有连接及其 autoconnect-priority nmcli connection show | grep -E "name|autoconnect-priority" # 设置 Home-WiFi 优先级为 100(最高) sudo nmcli connection modify "Home-WiFi" connection.autoconnect-priority 100 # 设置 Office-Guest 优先级为 50 sudo nmcli connection modify "Office-Guest" connection.autoconnect-priority 50 # 禁用其他无关连接的自动连接 sudo nmcli connection modify "Hotspot" connection.autoconnect no # 重启 NetworkManager 生效 sudo systemctl restart NetworkManager

原理:NetworkManager 扫描到多个可用 SSID 时,按autoconnect-priority降序选择首个autoconnect yes的连接,无需人工干预。

5.3 用nmcli监控 Wi-Fi 信号强度,触发脚本自动切换

信号弱时自动切到备用热点?nmcli可实时读取 RSSI(接收信号强度指示),结合watch或cron实现自动化:

# 实时监控信号强度(dBm),-50 为优秀,-70 为临界,<-80 建议切换 watch -n 2 'nmcli -f ACTIVE,SSID,SIGNAL device wifi list | grep \*' # 编写自动切换脚本(/usr/local/bin/wifi-auto-switch.sh) #!/bin/bash RSSI=$(nmcli -f SIGNAL device wifi list | grep \* | awk '{print $2}') if [ "$RSSI" -lt 40 ]; then echo "Signal weak ($RSSI), switching to backup..." sudo nmcli connection down "Home-WiFi" sudo nmcli connection up "Mobile-Hotspot" fi

赋予执行权限并加入定时任务:

sudo chmod +x /usr/local/bin/wifi-auto-switch.sh # 每分钟检查一次 echo "* * * * * /usr/local/bin/wifi-auto-switch.sh" | sudo crontab -u root -

我习惯在每台 Ubuntu 20.04 设备上部署这个脚本,尤其对移动办公的 ThinkPad 用户,地铁里信号波动大,它能避免会议中途掉线。别小看这几行命令——它把 Wi-Fi 从“手动开关”变成了“自适应神经末梢”。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表