我的WiFi适配器完全不工作,如何进行故障排除?

在这个网站上,我看到有数百甚至上千个问题是关于Ubuntu无法检测/识别无线局域网适配器的。一些主流适配器在Linux支持方面似乎完全不可用,而其他一些则只需要一些简单的步骤就可以让其工作。
要使其正常工作的选项似乎是无限的,我不知道从哪里开始!
什么被认为是“最佳实践”?在时间、精力和对我的Ubuntu安装造成最小风险方面,应该按照什么顺序尝试这些事情?请帮助我节省时间,并指导我逐步操作。

对于那些仍在寻找解决方案的人,我搜索了几天,解决方案是更新内核到5.10或5.12版本。例如,我在20.04.2 LTS上使用双系统,内核版本为5.8,无线和蓝牙都无法工作。我通过https://askubuntu.com/a/1291835/855698将内核升级到了5.12版本,现在一切正常运行。希望这对那些遇到类似问题的人有所帮助。 - PЯINCƎ
3个回答

这个答案仅适用于完全非功能性的无线局域网。它并不涉及稳定性/性能问题或者部分工作的情况。然而,如果你遇到了这些问题并正在寻找其他选项,以下一些步骤可能会对你有所帮助。

准备

在本答案中,我假设你已经熟悉至少以下任务:在终端中运行命令和安装常规的Ubuntu软件包。如果你对这些基本步骤不熟悉,建议先阅读thisthis

  1. 将机器连接到互联网。这样做会使执行步骤变得更容易,并且可以使用剪贴板进行操作。

    如果另一个网络卡正常工作,那么这应该很容易。如果您的唯一一张网卡在这个阶段出现故障,请寻找其他解决方案并发挥创造力,例如使用USB有线网络适配器或从朋友或邻居那里借用一个可用的WiFi适配器。

  2. 确保已安装以下软件包:lshwrfkill

  3. 更新您的系统。通过安装所有最新(常规)系统更新,您的计算机上应该已经安装了开发人员在发布后发布的所有错误修复程序。不要忘记在此之后重新启动系统。还可以参考如何更新Ubuntu?

    应用所有更新后,请重新启动。可能在此阶段已经可以正常工作。如果还不能,请继续下一步。

真的是驱动程序的问题吗?

首先,我们应该确定是卡片没有被识别还是无线电杀死开关阻止它工作。请按照下面的所有步骤进行操作,因为你的问题可能是两个或三个方面的:
在终端中运行sudo lshw -C network。 您可能需要先安装lshw
如果列出了多个设备,请找到相关设备。 如果列出的是*-network UNCLAIMED,请按照安装(更新)驱动程序中的步骤进行操作。 如果列出的是*-network(没有“Unclaimed”),下面关于驱动程序的输出可能与后续步骤有关,例如configuration: broadcast=yes driver=iwlwifi。 如果您的设备根本没有列出,请尝试确定确切的硬件中的其他步骤。
在终端中运行rfkill list。这将列出无线电杀死开关的状态。示例输出:
1: phy0: Wireless LAN Soft blocked: no Hard blocked: no
如果在Hard blocked上看到yes:请参考您的笔记本手册,查找无线局域网的硬件开关。 如果在Soft blocked上看到yes:笔记本上的热键可能有助于激活它,或者在网络管理器小程序中点击“启用无线”。如果无法解除软阻塞,请运行sudo rfkill unblock all。 如果没有列出任何杀死开关:这可能不适用于您的设备。通常只有移动电脑配备了杀死开关。
仅适用于USB设备:排除USB级别问题。
最好使用直接连接到主板的设备,避免使用集线器或计算机机箱的连接器。 尝试使用另一种类型的USB端口(例如USB2.0而不是USB3.0端口)。 转到确定确切的硬件,看看在插入设备时是否会出现错误消息。 尝试使用您已验证可工作的其他电缆(如果有)。

安装(更新)驱动程序

以下是一些明显、合理且无害的步骤,避免使用尽量避免的事项中列出的步骤。

  1. 尝试查看Ubuntu是否建议安装额外的驱动程序。更多关于如何安装额外驱动程序的信息,请参考如何安装额外驱动程序?
  2. 安装额外固件,因为这可能是您硬件所需的。
    • 确保您已经启用了multiverse,可以在如何启用“multiverse”源?中找到相关信息。
    • 安装linux-firmwarelinux-firmware-nonfree软件包,例如sudo apt-get install linux-firmware linux-firmware-nonfree,然后重新启动。
  3. 尝试使用compat-wireless软件包提供的后端内核模块(驱动程序)。Ubuntu为稳定版本的内核提供了compat-wireless的软件包,适用于更新的Linux内核发行版(自11.10 Oneiric Ocelot以来可用)。
    • 通过使用您喜欢的软件包管理工具搜索最新的内核模块。在撰写本文时,Quantal的最新版本是linux-backports-modules-cw-3.6-quantal-generic。在不久的将来,可能会发布一个3.7版本。
    • 安装它,例如sudo apt-get install linux-backports-modules-cw-3.6-quantal-generic(适用于Quantal),或sudo apt-get install linux-backports-modules-cw-3.6-precise-generic(适用于Precise)。然后重新启动。

    如果您使用的是LTS版本(例如Precise或Lucid),将提供所有下一个版本的后端内核作为软件包。在撰写本文时,Quantal是Precise之后的最新版本,该软件包是linux-image-generic-lts-quantal,并引导到新的内核。

  4. 从这里开始,您应该考虑尝试更近期的Ubuntu版本,以查看是否已经支持您的硬件,只需从Live CD/USB启动即可。还可以考虑尝试Ubuntu+1的最新Beta/RC版本。如果它可以工作,最简单的方法就是等待新版本发布。
  5. 某些硬件在默认安装上可能无法正常工作,通常是因为厂商未发布(全部)源代码或不允许通过Ubuntu进行所有所需模块的再分发。请参阅底部的需要特别注意的硬件部分,查看您的设备(芯片组)是否列出。
  6. 尝试使用最新稳定版的Linux内核。这是一种可能会破坏其他功能的较不安全的方法。通常情况下,这不是必需的,因为较新的无线驱动程序已经通过前面的选项中的compat-wireless软件包提供。然而,它可能稍微更新一些,从而包含修复您问题的错误修复。
    • 转到kernel.ubuntu.com下载部分,并找到最新稳定版本(例如,撰写本文时的v3.7.1-raring)。
    • 下载适用于您的架构(例如amd64i386)的所有.deb文件,以及带有all的文件。
    • 使用以下命令一次性安装所有文件:
    • cd Downloads
      sudo dpkg -i linux-headers-
      
      

      确定硬件的确切型号

      您所拥有的产品可能是使用与您问题完全无关的零售名称销售的。大多数供应商只是使用来自Broadcom、Atheros、Ralink或Intel等制造商的芯片组,而产品本身可能不带有这个名称。一个例子是:ThinkPad 11a/b/g/n Wireless LAN Mini Express Adapter实际上可能只是一个Atheros AR5418。Thinkpad的重新品牌通常不会影响Linux中的硬件支持,但使用的芯片组会。因此,识别芯片组非常重要。

      • PCI和集成设备(例如移动PC):

        lspci -nn | grep -i network
        
      • USB设备:

        lsusb
        

        如果您在此列表中无法识别它:

        1. 拔下设备。
        2. 打开终端并运行sudo tail -n 0 -f /var/log/syslog
        3. 重新插入设备,并给内核/设备几秒钟来初始化。
        4. 按下Ctrl+C停止命令。输出应该有助于从列表中识别它。
        5. 检查是否有提到unable to enumerate USB device的输出。如果有这样的输出,说明您的设备在USB级别上已经无法通信。可能是硬件问题:检查断裂的电缆/连接器、电源问题、损坏的集线器、其他损坏的硬件。此时不要费心处理驱动程序-先修复USB通信问题。

      如果您的硬件未列出,这可能与适配器无关,而是一般的PCI/USB总线错误。这被认为超出了WiFi问题的范围。请注意,一些笔记本电脑具有连接到内部USB端口的集成WiFi适配器,因此在这种情况下可能会列为USB。

      示例输出:

      $ lsusb
      Bus 001 Device 002: ID 8087:0024 Intel Corp. ...
                                  ^^^^-- product ID
                             ^^^^------- vendor ID
      
      $ lspci -nn | grep -i network
      04:00.0 Network controller [0280]: Intel Corporation [...] [8086:4238] (rev 3e)
                                                      vendor ID --^^^^
                                                     product ID -------^^^^
      

      使用Google的技巧

      • 使用命令中指定的数字产品/供应商ID。
      • 在关键词中加上linux,而不是Ubuntu
      • 尝试使用设备输出中列出的芯片组名称来识别硬件。例如:AR9285BCM4311Intel+6300
      • 避免使用与硬件支持无关的关键词。例如,桌面环境与此无关,所以请使用Ubuntu而不是Lubuntu
      • 尽量关注有关设备的“常规”信息,而不是特定解决方案,例如“此设备需要固件”或用户报告称其在之前的版本中可以直接使用。

      我尝试了所有选项都没有成功。在新问题中应提供什么信息?

      在发布新问题之前,请使用识别确切硬件中的关键词搜索本网站

      • 此答案中选项的所有相关(意外或错误)输出。
      • 在“确定精确硬件”部分完成的步骤的相关输出。
      • 您正在运行的内核以及您尝试过的版本。使用uname -r命令来确定您的内核版本。
      • 您尝试过的其他Ubuntu版本。

      如有可能,请避免以下事项

      • 从源代码编译(例如运行makesudo make install)。

        • 这可能会覆盖系统文件并混淆您的软件包管理。以这种方式安装可能有效,但如果软件包管理更新再次覆盖文件,则随时可能出现故障。
        • 这可能导致意外错误,对于新手用户来说可能很难解决。
        • 如果您想撤消sudo make install所做的所有更改,这将是困难的。
      • Ndiswrapper方法。

        • 这个“包装器”用于Windows驱动程序,只应作为最后的选择尝试,因为在Linux上模拟Windows环境以获取硬件驱动程序非常低效。
        • 稳定性和性能通常报告较低。

      需要特别注意的硬件

      • Broadcom BCM43xx设备。请参考this answer中关于使这些设备工作的详细教程。

非常好的答案。 - Denis
1非常感谢你的出色回答。但是我无法在Ubuntu 16.04上安装linux-firmware-nonfree。不管源列表如何,可能它被某种方式替换了? - Bunyk
尝试使用sudo apt search (软件包名称)在您的发行版软件包中搜索,看看是否显示了可能被重命名更新的软件包。 - Yokai
作为一个更容易的第一步,你可以尝试在UEFI/BIOS中禁用Secure Boot。令人恼火的是,这对我起了作用。对于我的Yoga 3,它们互斥让我不太满意。 - Chiramisu
1请注意,截至2021年,较新的Ubuntu版本使得许多这些步骤不再适用。请注意,lshwrfkill已经安装。在2021年无需再安装。linux-firmware已默认安装,非自由软件不再可用。linux-backports-modules-cw也不再可用。最后,ndiswrapper已被弃用。 - chili555
@chili555 我认为值得编辑这个答案。这个答案已经有8年了,而且它是关于这个话题的谷歌搜索结果中最早的之一。 - jcollum
@jcollum 这是一个有趣的问题,关于元话题:https://meta.askubuntu.com/questions 我们是否应该编辑旧的、部分或完全过时的答案,以反映2021年使用的方法?我们是否应该在2023年等再次进行编辑? - chili555
怎么样妥协一下:保留这个回答,你再写一个自己的回答,我会编辑它,在顶部加上一个注释,指向你的回答。很确定元社区会说我们不应该编辑旧的回答。 - jcollum
@gertvdijk 如果你有什么想说的,关于这个回答有一个元讨论:https://meta.askubuntu.com/questions/19786/which-is-better-editing-someones-old-but-outdated-answer-to-keep-it-up-to-date/19787#19787 - Mark Kirby

在某些计算机上,包括2013年的Macbook Air,在默认情况下是不启用的,因为它们是专有的,但正确的wifi驱动程序已经包含在其中。打开“软件和更新”应用程序,转到“附加驱动程序”选项卡,如果在那里列出了适用于您的无线适配器的任何驱动程序,请启用它们并点击应用更改。如果它们是正确的驱动程序,那么您的wifi将立即开始工作。

在我的情况下,我有一台旧笔记本电脑,我在上面安装了Lubuntu 19。正确的无线网卡驱动程序已经安装好了。我可以看到所有的无线网络,但无法连接上它们。通过有线电缆连接到互联网则可以正常工作。

在尝试了很多不同的方法后仍然无法解决问题后,我发现一些(L?)ubuntu 19的用户也遇到了相同的问题,并建议安装Lubuntu 16,于是我就这样做了。我的无线适配器(以及触摸板)现在都可以直接使用了。