简介:这份PDF资料面向刚安装Ubuntu 20.04却无法连接Wi-Fi、系统托盘缺少无线图标的用户,尤其适合Linux入门者与运维新手排查网卡驱动缺失或网络配置错误的问题。资源包共1个PDF文件,大小约27KB,内容以图文步骤形式整理,便于离线查阅与快速对照操作。资料围绕两条解决路径展开:一是通过有线网络更新软件源并安装Broadcom无线网卡驱动bcmwl-kernel-source后重启;二是借助ip a查看网卡状态,编辑/etc/netplan下的YAML配置文件,补充wifis、access-points与dhcp4等字段,再用netplan try与netplan apply使配置生效。文中还提示了重启网络服务、检查硬件兼容性及查阅系统日志等排错思路。目前已有33077人学习下载,适合需要快速恢复无线连接、理解Netplan配置逻辑的读者参考。
1. Ubuntu 20.04 连 WiFi 这件事,为什么有人两分钟搞定有人折腾一晚上
装完 Ubuntu 20.04 桌面版,右上角网络菜单里空空如也,连个 WiFi 选项都没有——这个场景我见过太多次。有人以为是系统装坏了,重装三遍;有人翻出手机 USB 共享网络先顶着;还有人直接拉网线,从此再也没碰过无线。其实 Ubuntu 20.04 连接 WiFi 就两条路:一条是桌面图形界面点几下,另一条是命令行用 netplan 或 nmcli 配置。两条路都不难,难的是你连 WiFi 图标都看不到的时候,根本不知道从哪下手。
这篇文章面向三类人:刚装完 Ubuntu 20.04 发现没有 WiFi 选项的新手、想在无桌面环境里配无线的运维、以及被驱动问题卡住的开发者。我会把两种方法拆开讲清楚,包括驱动排查、netplan 配置、nmcli 命令、常见翻车点。看完你至少能做到:不管有没有图形界面,都能让 Ubuntu 20.04 连上 WiFi。
2. 先确认无线网卡被系统认了没有:驱动与硬件排查
在动手配 WiFi 之前,有一件事比什么都重要:确认你的无线网卡在系统里是活的。很多人上来就改 netplan,改了半天发现网卡根本没被识别,白忙一场。这一章先把硬件和驱动层面的事情理清楚,后面配网络才有意义。
2.1 用三条命令确认无线网卡状态
打开终端,依次执行下面三条命令。不要跳步,每条的输出都看一眼。
# 查看所有网络接口,确认有没有 wlan0 或 wlp 开头的无线接口 ip link show # 查看 PCI 设备里有没有无线网卡(Intel、Realtek、Qualcomm 等) lspci | grep -i network # 查看 USB 无线网卡(如果你用的是外接 USB WiFi 模块) lsusbip link show的输出里,如果只有lo和enp3s0这类有线接口,没有wlan0或wlp2s0,说明系统没认出无线网卡。lspci | grep -i network能帮你确认硬件本身在不在 PCI 总线上——如果这条命令有输出但ip link里没有无线接口,基本可以断定是驱动没加载。lsusb则是给 USB 无线网卡用的,插上去没反应的时候先看这里。
三条命令跑完,你会遇到两种情况:一是有wlan0或wlp开头的接口,那直接跳到第 3 章配网络就行;二是没有无线接口,继续往下看驱动怎么处理。
2.2 驱动没加载怎么办:从 lspci 到 modprobe
如果lspci能看到无线网卡但ip link里没有对应的无线接口,常见原因是驱动模块没加载。先确认内核有没有对应的驱动模块:
# 查看已加载的无线相关内核模块 lsmod | grep -i -E "iwlwifi|rtl|ath|mt76" # 查看内核是否检测到无线网卡但驱动加载失败 dmesg | grep -i -E "firmware|wifi|wireless|iwl|rtl"lsmod没有输出,说明驱动模块压根没加载。dmesg里如果有firmware missing或failed to load之类的字样,那就是缺固件。Ubuntu 20.04 默认仓库里有大部分常见无线网卡的固件包:
# 更新软件源并安装常见无线网卡固件 sudo apt update sudo apt install linux-firmware # 如果是 Intel 网卡,额外确认 iwlwifi 固件 sudo apt install firmware-iwlwifi 2>/dev/null || true # 重新加载驱动模块(以 iwlwifi 为例) sudo modprobe -r iwlwifi && sudo modprobe iwlwifilinux-firmware这个包涵盖了 Intel、Realtek、Broadcom 等主流无线网卡的固件文件,装完之后重新加载模块,再用ip link show确认无线接口是否出现。modprobe -r是先卸载再加载,相当于给驱动一次重新初始化的机会。如果modprobe报错说模块不存在,那说明你的内核根本没有编译这个驱动,需要换内核版本或者手动编译驱动——这种情况在 Ubuntu 20.04 上比较少见,但 Realtek 某些新型号确实会遇到。
注意:如果你的无线网卡是 Realtek RTL8821CE、RTL8852 这类较新的型号,Ubuntu 20.04 自带内核(5.4)可能不带驱动。常见做法是升级到 HWE 内核(
sudo apt install linux-generic-hwe-20.04)或者从源码编译驱动。升级内核后重启,再检查ip link。
2.3 没有有线网络怎么装驱动:离线安装的思路
这里有个死循环:要装驱动得先有网络,要有网络得先有驱动。如果你手头只有这台没无线的 Ubuntu 机器,又没有网线,怎么办?
常见做法是用另一台能上网的机器下载.deb包,用 U 盘拷过来手动安装。具体来说,在能上网的机器上访问 Ubuntu 的包索引页面,搜索linux-firmware和你的网卡对应的驱动包,下载.deb文件。然后:
# 在目标机器上安装本地 deb 包 sudo dpkg -i linux-firmware_*.deb # 如果依赖不全,用 apt 修复 sudo apt install -fdpkg -i是直接安装本地包,apt install -f是修复依赖关系。这个流程在离线环境里很常用,不光是无线驱动,其他软件包也一样处理。如果你用的是 USB 无线网卡,还有一个更简单的办法:手机开 USB 网络共享,先用手机的网络装好驱动,再切回 WiFi。
3. 方法一:桌面图形界面连接 WiFi 的完整流程
如果你装的是 Ubuntu 20.04 桌面版,而且无线网卡驱动正常,那图形界面是最省事的。但这里有几个细节,新手很容易卡住。
3.1 右上角网络菜单的正确打开方式
Ubuntu 20.04 用的是 GNOME 桌面,网络菜单在屏幕右上角。点击之后你会看到:
- 如果有无线网卡且驱动正常,菜单里会直接显示「Wi-Fi」开关和可用网络列表
- 如果只有「有线网络」和「网络设置」,没有 Wi-Fi 选项,说明驱动没加载或者无线被 rfkill 软禁用了
先检查 rfkill:
# 查看无线设备是否被软/硬禁用 rfkill list # 如果有 Soft blocked: yes,解除禁用 sudo rfkill unblock wifirfkill list会列出所有无线设备的状态。Soft blocked: yes表示软件层面禁用了 WiFi,Hard blocked: yes表示硬件开关关了(有些笔记本侧面有物理 WiFi 开关)。rfkill unblock wifi解除软禁用,硬禁用需要你手动拨一下笔记本的物理开关。
3.2 选择网络、输入密码、验证连接
WiFi 开关打开后,菜单里会列出周围的热点。点你要连的那个,输入密码,等几秒。连上之后图标会变成扇形信号标志。
验证是否真的连上了:
# 查看无线接口的 IP 地址 ip addr show wlan0 # 测试 DNS 和连通性 ping -c 4 223.5.5.5 ping -c 4 www.baidu.comip addr show wlan0里如果有inet 192.168.x.x这样的地址,说明 DHCP 拿到了 IP。ping 223.5.5.5通但ping www.baidu.com不通,那是 DNS 问题,去/etc/resolv.conf或者网络设置里改 DNS。两个都通,说明 WiFi 连接完全正常。
提示:如果图形界面里能看到 WiFi 列表但连不上,先确认密码没输错,然后检查路由器是不是开了 MAC 地址过滤。Ubuntu 20.04 默认不会随机化 MAC 地址,但如果你手动改过,记得改回来。
3.3 图形界面连不上的时候怎么排查
图形界面点半天没反应,或者一直转圈连不上,按这个顺序查:
# 查看 NetworkManager 服务状态 systemctl status NetworkManager # 查看最近的网络日志 journalctl -u NetworkManager --since "5 minutes ago" # 查看无线接口的详细状态 nmcli device status nmcli device wifi listsystemctl status NetworkManager确认网络管理服务在跑。journalctl看日志里有没有association failed、wrong password、timeout之类的关键词。nmcli device status会告诉你每个接口的状态是connected、disconnected还是unmanaged。如果无线接口显示unmanaged,说明 NetworkManager 没接管这个接口,需要检查/etc/NetworkManager/NetworkManager.conf里的配置。
4. 方法二:命令行配置 WiFi 的两种武器(nmcli 与 netplan)
没有桌面环境,或者图形界面挂了,就得靠命令行。Ubuntu 20.04 上命令行配 WiFi 有两条路:nmcli和netplan。选哪个取决于你的系统装了什么。
4.1 nmcli:桌面版和无桌面版都能用的万能工具
nmcli是 NetworkManager 的命令行前端。Ubuntu 20.04 桌面版默认装了 NetworkManager,所以nmcli直接能用。无桌面版如果也装了 NetworkManager,同样可以用。
连接 WiFi 的完整命令:
# 扫描周围 WiFi nmcli device wifi list # 连接指定 WiFi(替换 SSID 和密码) nmcli device wifi connect "你的WiFi名称" password "你的密码" # 如果 WiFi 是隐藏的,需要指定 SSID 和密码 nmcli device wifi connect "隐藏WiFi名称" password "你的密码" hidden yesnmcli device wifi list会列出所有可见的 SSID、信号强度、加密方式。nmcli device wifi connect是最常用的连接命令,SSID 和密码替换成你自己的。隐藏网络加hidden yes参数。
连上之后验证:
# 查看连接状态 nmcli connection show --active # 查看 IP 地址 ip addr show wlan0 # 测试连通性 ping -c 4 223.5.5.5nmcli connection show --active会列出当前活跃的连接,确认 WiFi 连接在里面。ip addr确认拿到了 IP。ping确认网络通。
如果连不上,nmcli会返回具体的错误信息,比如Error: Connection activation failed: (7) Secrets were required, but not provided.这种一般是密码错了或者加密方式不匹配。
4.2 netplan:Ubuntu 20.04 服务端的标准配置方式
Ubuntu 20.04 服务版默认用 netplan 管理网络。netplan 的配置文件在/etc/netplan/目录下,通常是01-network-manager-all.yaml或者50-cloud-init.yaml。
先看目录里有什么:
ls /etc/netplan/然后编辑对应的 YAML 文件。假设你的无线接口是wlan0,配置如下:
# /etc/netplan/01-netcfg.yaml network: version: 2 renderer: networkd wifis: wlan0: dhcp4: true access-points: "你的WiFi名称": password: "你的密码"renderer可以是networkd或NetworkManager。服务版一般用networkd,桌面版如果装了 NetworkManager 就用NetworkManager。dhcp4: true表示自动获取 IP。access-points下面写 SSID 和密码。
写完保存,应用配置:
# 应用 netplan 配置 sudo netplan apply # 如果报错,用 debug 模式看详细信息 sudo netplan --debug applynetplan apply会立即生效。如果配置有语法错误,会报错并提示行号。--debug模式输出更详细的信息,方便排查。
验证:
# 查看无线接口状态 ip addr show wlan0 # 查看路由 ip route show # 测试连通性 ping -c 4 223.5.5.5ip addr确认拿到 IP,ip route确认默认路由存在,ping确认网络通。
注意:netplan 的 YAML 文件对缩进非常严格,必须用空格,不能用 Tab。缩进错了会直接报错。另外,SSID 和密码如果有特殊字符,记得用引号包起来。
4.3 nmcli 和 netplan 怎么选
| 对比项 | nmcli | netplan |
|---|---|---|
| 适用场景 | 桌面版、临时连接 | 服务版、固定配置 |
| 配置持久化 | 自动保存到 NetworkManager | 写入 YAML 文件 |
| 多网络切换 | 方便,命令直接切 | 需要改配置文件 |
| 学习成本 | 低,命令直观 | 中,YAML 语法要熟悉 |
| 依赖服务 | NetworkManager | networkd 或 NetworkManager |
我一般这样选:桌面版用 nmcli,服务版用 netplan。如果你在服务版上也想用 nmcli,先确认 NetworkManager 装了并且接管了无线接口。
5. 避坑指南:Ubuntu 20.04 连 WiFi 最常见的 5 个翻车现场
这一章全是血泪经验。下面 5 个问题我几乎每次装 Ubuntu 20.04 都会遇到至少一个,按「现象 → 原因 → 解决」写清楚。
5.1 现象:右上角没有 WiFi 选项,设置里也找不到无线
原因:无线网卡驱动没加载,或者 rfkill 软禁用了 WiFi。
解决:先rfkill list看是不是软禁用,是的话sudo rfkill unblock wifi。然后lspci | grep -i network确认硬件在,lsmod | grep iwlwifi确认驱动加载了。驱动没加载就sudo apt install linux-firmware然后sudo modprobe iwlwifi。如果是 Realtek 新网卡,升级 HWE 内核。
5.2 现象:能看到 WiFi 列表,输入密码后一直转圈连不上
原因:密码错误、加密方式不匹配、或者路由器开了 MAC 过滤。
解决:先用nmcli device wifi connect "SSID" password "密码"在命令行试,看具体报什么错。如果报Secrets were required,检查密码。如果报Timeout,检查路由器是不是隐藏了 SSID 或者开了 MAC 过滤。另外确认 WiFi 加密方式是 WPA2 还是 WPA3,Ubuntu 20.04 对 WPA3 支持不完善,路由器改成 WPA2 混合模式试试。
5.3 现象:netplan apply 报错Invalid YAML或unknown key
原因:YAML 缩进用了 Tab,或者字段名拼错了。
解决:用sudo netplan --debug apply看具体哪一行报错。YAML 必须用空格缩进,通常是 2 个空格一级。字段名对照 netplan 官方文档检查,wifis不是wifi,access-points不是access_points。
5.4 现象:连上 WiFi 但 ping 不通外网,ping IP 可以但域名不行
原因:DNS 配置问题。
解决:cat /etc/resolv.conf看 DNS 服务器。如果是127.0.0.53,那是 systemd-resolved 在管。用resolvectl status看实际 DNS。手动改 DNS 可以编辑/etc/systemd/resolved.conf,加DNS=223.5.5.5 8.8.8.8,然后sudo systemctl restart systemd-resolved。
5.5 现象:重启后 WiFi 不自动连接,每次都要手动连
原因:netplan 配置里没写dhcp4: true,或者 NetworkManager 没保存连接。
解决:netplan 配置里确认dhcp4: true和access-points都写了。nmcli 的话,nmcli connection show看连接是不是autoconnect: yes,不是的话nmcli connection modify "连接名" connection.autoconnect yes。
6. 进阶技巧:用一条命令判断 WiFi 问题出在哪一层
配 WiFi 最怕的就是不知道问题出在哪。是驱动?是 rfkill?是 NetworkManager?还是路由器?我后来养成了一个习惯:不管什么情况,先跑一条组合命令,把关键信息一次性拉出来。
# 一键诊断 WiFi 状态 echo "=== rfkill ===" && rfkill list && \ echo "=== ip link ===" && ip link show && \ echo "=== nmcli device ===" && nmcli device status && \ echo "=== nmcli wifi ===" && nmcli device wifi list && \ echo "=== dmesg wifi ===" && dmesg | grep -i -E "iwl|rtl|ath|firmware" | tail -20这条命令把 rfkill 状态、网络接口、NetworkManager 设备状态、WiFi 列表、内核日志里的无线相关信息全部打出来。跑一遍,基本能定位到问题在哪一层:
rfkill里有blocked:先解禁用ip link里没有wlan0:驱动问题nmcli device里无线接口是unmanaged:NetworkManager 没接管nmcli device wifi list是空的:无线接口没起来或者被禁用dmesg里有firmware missing:缺固件
这个习惯帮我省了很多时间。以前遇到 WiFi 问题,我是一条一条命令试,试到哪条有输出就停。后来发现,一次性把所有信息拉出来,对照着看,反而更快定位。
还有一个技巧:如果你经常需要在不同网络之间切换,可以写一个简单的 shell 函数放在~/.bashrc里:
# 添加到 ~/.bashrc wifi-connect() { nmcli device wifi connect "$1" password "$2" if [ $? -eq 0 ]; then echo "已连接 $1" ip addr show wlan0 | grep inet else echo "连接失败,检查密码或信号" fi }之后直接wifi-connect "SSID" "密码"就能连,省得每次敲完整命令。这个函数我用了很久,没什么玄学,就是省事。
最后说一个我踩过的坑:有一次帮同事配 Ubuntu 20.04 的 WiFi,折腾了两个小时,最后发现是路由器的 5GHz 频段和网卡不兼容。网卡只支持 2.4GHz,但路由器把 2.4G 和 5G 合并成了一个 SSID,网卡一直尝试连 5G 连不上。解决办法是在路由器里把 2.4G 和 5G 拆成两个不同的 SSID,然后连 2.4G 那个。这个坑不常见,但遇到了真的很难查——因为nmcli不会告诉你频段不兼容,只会一直超时。
所以现在我配 WiFi 的习惯是:先确认驱动和 rfkill,再用 nmcli 或 netplan 配,配完 ping 一下,不通就看 DNS 和频段。按这个顺序走,大部分问题都能解决。希望帮到你。
本文还有配套的精品资源,点击获取