联想ThinkPad E570(Realtek RTL8821CE)的Wi-Fi无法正常工作。

我们刚购买了一台联想ThinkPad E570(据说配备了Intel 8265用于无线连接)。我们选择这款笔记本的部分原因是它经过Ubuntu认证,因此对我来说至少在开箱即可正常使用。但很不幸,事情并非如此。
首先,我安装了Ubuntu 17.10后才发现无线网络不工作。我还尝试使用USB驱动器上的Ubuntu 16.04,因为它是经过认证的Ubuntu版本,但也没有成功。
无线芯片不能被"lshw"(甚至看起来也不被"lspci")检测到,"ip link"没有显示出无线接口,而"iwlwifi"内核模块在启动时没有加载(我可以使用"modprobe iwlwifi"手动加载,但这并不能使Wi-Fi工作)。我认为这是一款集成了Wi-Fi/蓝牙的芯片,而蓝牙似乎可以正常工作(至少在Gnome中可以看到蓝牙设备,并且"rfkill list"也有显示)。

modinfo iwlwifi | grep 8265显示我加载了一个以-34结尾的文件,但是在/lib/firmware中只有以-33(和一些其他较低的数字)结尾的文件存在(如果这有帮助的话)。

我还尝试安装了Linux 4.14.9内核来解决问题,但是这也没有解决问题。

更多信息

root@ThinkPad-E570:~# modinfo iwlwifi | grep 8265
firmware:       iwlwifi-8265-34.ucode
root@ThinkPad-E570:~# rfkill list all
0: tpacpi_bluetooth_sw: Bluetooth
    Soft blocked: no
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no
root@ThinkPad-E570:~# dmesg | grep iwl
root@ThinkPad-E570:~# lspci -nnk | grep 0280 -A3
05:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. Device [10ec:c821]
    Subsystem: Lenovo Device [17aa:c024]

更新

我刚刚注意到这台笔记本根本没有英特尔无线芯片,而是实际上有一个瑞昱的芯片... 这意味着我在购买这台笔记本的商店的产品页面上所展示的规格并不准确... 唉。然而,同样的问题依然存在,只是换成了一个更差的无线芯片。


2给未来的谷歌用户注意,我想要指出所选择的答案同样适用于Linux Mint 19.1 - LondonRob
联想官网明确指出其配备了英特尔的WiFi卡,所以如果你购买的是二手产品,你可以向商店提出投诉。请参考上方添加的网页链接进行确认。 - K7AAY
1这对我有用 https://www.youtube.com/watch?v=vPfLVsyQU_A - Dagang
谢谢 @Dagang,你帮我省了好几个小时。我在联想Ideapad 130 15ikb上试过了。 - Hridaynath
您不再需要手动从源代码编译此软件。请参考下面的答案,只需使用Ubuntu软件仓库中的rtl8821ce-dkms软件包进行安装即可。 - Michael Altfield
请参阅https://askubuntu.com/questions/1407361/fresh-installation-of-20-04-lts-doesnt-display-wifi-in-top-right-menu/1407366?noredirect=1#comment2445742_1407366。 - Joepie Es
9个回答

这是对stason的回答的跟进,他建议使用dkms
据我所知,在撰写本文时,官方的Ubuntu软件仓库中尚未提供Realtek RTL8821CE的Wifi驱动程序。
在GitHub上有一个针对4.14及以上内核的RTL8821CE驱动程序存储库,专门为Arch Linux设计,不支持其他Linux发行版:https://github.com/tomaspinho/rtl8821ce (小注:截至2019年2月,tomaspinho遗憾地无法继续维护该驱动程序,因为他不再拥有配备此芯片组的计算机,因此可能需要一个新的维护者,但该驱动程序仍然适用于Ubuntu 18.04,截至当时。)

据报道,它在Ubuntu 18.04上运行良好。

临时的互联网连接将是必需的(例如以太网电缆、USB无线网卡或使用USB电缆将手机连接并通过“共享网络”功能使用手机的Wifi)

解决方案直接来自Praseodym的帖子#4(对他们的智慧表示赞赏!):https://ubuntuforums.org/showthread.php?t=2398917,它将安装一些用于构建wifi驱动模块的软件包(git、dkms、build-essential和linux-headers),并克隆tomaspinhortl8821ce git存储库(同样值得赞赏!)。

使用DKMS是因为它是“一个系统,在新内核被安装或更新时会自动重新编译和安装内核模块。”


打开一个终端窗口,然后输入以下命令(如果你愿意,也可以复制粘贴):
sudo apt-get install --reinstall git dkms build-essential linux-headers-$(uname -r)
git clone https://github.com/tomaspinho/rtl8821ce
cd rtl8821ce
chmod +x dkms-install.sh
chmod +x dkms-remove.sh
sudo ./dkms-install.sh

完成后,您应该重新启动并发现您的Wifi正常工作。
您还需要确保在BIOS设置中禁用SecureBoot,否则它将不允许您加载未签名的自编译内核模块。

1我可以确认你不需要禁用SecureBoot。如果你已经启用了SecureBoot,只需在sudo ./dkms-install.sh期间按照提示操作,并输入与重启时选择的相同密码即可。 - Niel de Wet
1对我来说很有效。节省了我的时间。 - Iftakharul Alam
太棒了。谢谢你。这对我有用。 - Dr Xorile
有相同的问题...但更糟糕。 idePadS145没有以太网,因此我甚至无法进行apt-get安装..我如何为默认内核在eon中编译模块:5.3.0-18-generic? - Nico Grunfeld
您不再需要手动从源代码编译此软件。请参考下面的答案,只需使用Ubuntu软件仓库中的rtl8821ce-dkms软件包进行安装即可。 - Michael Altfield

首先,我建议这些说明更适用于Ubuntu 17.10。如果您当前没有运行它,我建议您重新安装它。
点击此链接下载驱动程序文件:https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/endlessm/linux/tree/master/drivers/net/wireless/rtl8821ce 除非您在浏览器中另有指定,否则下载的文件将保存在“下载”目录中。打开终端并执行以下操作:
cd ~/Downloads
unzip rtl8821ce.zip
cd rtl8821ce
nano Makefile

请向下滚动到第152行,并更改现在的行,它应该是这样的:
export TopDIR ?= $(srctree)/drivers/net/wireless/rtl8821ce

现在阅读:
export TopDIR ?= $ ~/Downloads/rtl8821ce

仔细校对两次,并保存(按Ctrl+o然后按Enter键)并关闭(按Ctrl+x)文本编辑器。
现在执行:
make
sudo make install
sudo modprobe 8821ce

你的无线网络现在应该可以正常工作了。
编辑:你只为当前运行的内核版本编译了模块。当更新管理器提供一个更新的内核版本(称为linux-image)并要求重新启动后,你必须重新编译。
cd rtl8821ce
make clean
make
sudo make install
sudo modprobe 8821ce

请保留该文件和这些指示,以备将来之需。

这也是我昨天找到的,而且它有效 :) 有一件事我很好奇,就是在内核更新后是否仍然能够继续工作。 - RobinJ
非常好的捕捉!请稍等片刻,看一下我上面的编辑。 - chili555
编辑完文件后,我尝试运行"make"命令,但是出现了一个错误。我在"rtl8821ce"目录下运行了"make",错误提示是"/bin/sh: 1 cc:未找到"。你有任何想法吗?是"make"默认随操作系统安装的实用工具吗? - Learner
@DILEEPTHOMAS 请您提出一个新的问题。 - chili555
1对我来说,编辑文件并不是必要的。只需要下载驱动程序,编译安装,并激活所需的模块就足够了。谢谢! - Diego Andrés Díaz Espinoza
代码在仓库中已经改变。这个解决方案不再有效。 - Pilot6
1@Pilot6 很多适用于早期Ubuntu版本的无线驱动程序在后来的内核和尤其是gcc版本中不再起作用。很多年前发布的答案,包括你的,也不再适用。搜索者应该注意这一点。 - chili555
问题在于代码中的第152行与内核不兼容,而非兼容性问题。 - Pilot6
1我相信这是适用于当前Ubuntu版本的正确操作步骤:https://askubuntu.com/questions/1162223/lenovo-18-04-no-wi-fi-adapter-found/1162258#1162258 - chili555
您不再需要手动从源代码编译此软件。请参考下面的答案,只需使用Ubuntu软件仓库中的rtl8821ce-dkms软件包进行安装即可。 - Michael Altfield
我一直遇到这个问题:
错误:无法创建报告:[Errno 17] 文件已存在:'/var/crash/rtl8821ce-dkms.0.crash' 错误!内核版本 5.11.0-34-lowlatency (x86_64) 上的模块构建返回糟糕的状态 请查看 /var/lib/dkms/rtl8821ce/5.5.2.1/build/make.log 获取更多信息。 在处理软件包 rtl8821ce-dkms 时出错: 安装后的 rtl8821ce-dkms 软件包脚本子进程返回错误退出状态 10 处理过程中遇到错误: rtl8821ce-dkms E: 子进程 /usr/bin/dpkg 返回错误代码(1)
- SDW_1980
请开始你自己的新问题。这种旧方法已经过时了。@SDW_1980 - chili555

今天在Ubuntu 20.04上遇到了同样的问题。
仔细阅读https://github.com/tomaspinho/rtl8821ce后,我发现Canonical提供了一个现成的软件包:rtl8821ce-dkms
安装步骤如下:
  1. sudo apt install rtl8821ce-dkms
  2. 重新启动
就是这样。没有其他操作。重新启动后一切都正常工作。

1工作得非常完美,太简单了! - Mel
1这个答案绝对需要在网络搜索结果中更加突出地显示出来... 我在2021年3月使用KDE neon时遇到了这个问题,当时是在一台全新的台式电脑上。 - bovender

可以在此处找到用于rtl8821ce的dkms构建/安装:https://github.com/tomaspinho/rtl8821ce

当您使用这种方法时,您无需在每次内核更新时重新构建模块。

我刚刚在Lenovo Idea 720s上使用kubuntu 18.04进行了构建。


另外,我建议你编辑Makefile,将日志级别从4(信息)改为3(警告)。否则,你会发现驱动程序的无用信息消息会以疯狂的速度填满你的/var/log/syslog
所以,请编辑Makefile,进行以下更改:
CONFIG_RTW_LOG_LEVEL = 4

给:
CONFIG_RTW_LOG_LEVEL = 3

然后根据说明构建和安装模块。如果您已经安装了它,您需要卸载它(使用dkms-remove.sh),然后再次安装它。
或者,您可以手动更改日志级别,直到下次重启为止:
echo 3 > /proc/net/rtl8821ce/log_level

更新:维护者已经更改了Makefile以反映这个建议,所以如果你进行全新的检出/下载,它将已经具备正确的(静默)设置。

更新 2018-02-27

请注意,建议的驱动程序适用于Endless OS,因此可能在任何时候出现故障。如果有官方的Ubuntu驱动程序将更好。

原始回答

这不是一个新的答案,留个评论会更好。

所以我尝试按照@chili555的回答进行操作,但在尝试制作模块时一直遇到错误。

错误如下:

/rtl8821ce/include/osdep_service_linux.h:294:2: error: implicit declaration of function ‘timer_setup’; did you mean ‘ether_setup’?
[-Werror=implicit-function-declaration]
   timer_setup(ptimer, pfunc, 0);
   ^~~~~~~~~~~   ether_setup

所以我尝试下载不同的版本直接下载链接),这个版本在原回答发布时可能已经是主要版本了。然后我就能够按照@chili555提供的步骤制作并安装模块了。

一个解决计时器错误的方法。
我成功地让它在我的联想E570上运行,使用的是Ubuntu 16.04,并且以下是我的步骤: 首先,我升级了内核版本到4.15.4,使用了这个指南
我相信任何高于4.15.4的内核版本都应该可以工作,因为我不得不再次升级到4.15.9。请注意需要重新安装驱动程序。
然后,我按照@chili555的回答中提到的步骤进行操作。

“安装驱动程序”是什么意思? - pim
这意味着你需要再次使用sudo make install命令进行安装。 请告诉我它是否对你有效,以及你使用的内核版本是多少。 这个方法以前对我有效,但最近我不得不多次重新安装Ubuntu,它对我不再起作用。 - Juichung_Kuo
以下帖子包含了一个替代的8821ce驱动程序,链接,并且对我来说它再次有效。 - Juichung_Kuo
我似乎有和你完全一样的机器,运行着16.04 LTS,并且似乎遇到了完全相同的问题,但是没有任何成功的解决办法。你能否逐行详细说明你是如何让你的机器正常工作的?我感觉自己好像在原地打转,只看到自己的后脑勺。啊啊啊。谢谢。 - Piloti
嗯...已经有一段时间了,我不太记得我是怎么修复的。 但你有看过我上面发布的链接吗?里面包含了我使用的命令。 另外,你试过这个吗: https://github.com/lwfinger/rtlwifi_new - Juichung_Kuo

感谢ubuntuusers.de上的praseodym提供了这个使用dkms安装驱动程序的简短教程,因为在尝试了几种答案后,只有这个方法对我在全新安装的Debian 10(buster)上有效。
sudo apt-get install --reinstall git dkms build-essential linux-headers-$(uname -r)
git clone https://github.com/tomaspinho/rtl8821ce
cd rtl8821ce
chmod +x dkms-install.sh
chmod +x dkms-remove.sh
sudo ./dkms-install.sh 

移除工作是这样进行的:
sudo ./dkms-remove.sh 

在安装操作系统之前,还提到最终要禁用安全启动。不确定这是否有所不同,因为我需要在“HP Slimline (290-a0512ng) 台式电脑”上使用,该台式电脑默认情况下已禁用安全启动,我在安装操作系统后才注意到/检查到这一点。

这是我在IdeaPad s145-15ast上修复的方法。如果你仍然想使用ubuntu 16.04,首先安装硬件支持:
apt-get install linux-generic-hwe-16.04

然后添加“Jesse Sung”适用于4.15内核的Realtek 8821c dkms。
add-apt-repository ppa:wenchien/rtl8821c
apt-get update
apt install oem-realtek-8821ce-lp1767920-4.15-dkms

重启就好了。

这个设备需要驱动程序和固件。对于新的Ubuntu内核4.19+,可以使用来自Larry Finger的存储库的rtw88驱动程序。

运行以下命令以安装驱动程序:

sudo apt update
sudo apt install git dkms
git clone https://github.com/lwfinger/rtw88.git
sudo dkms add ./rtw88
sudo dkms install rtlwifi-new/0.6

运行以安装固件:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
sudo cp linux-firmware/rtw88/rtw8821c_fw.bin /lib/firmware/rtw88