RTL8821CE wifi 驱动程序 - 在 Ubuntu 18.04(内核 4.15)上挂起或更改网络后无法连接

RTL8821CE wifi 驱动程序 - 在 Ubuntu 18.04(内核 4.15)上挂起或更改网络后无法连接

我在 HP 笔记本中使用 Ubuntu 18.04。我使用以下命令下载了驱动程序:

git clone https://github.com/tomaspinho/rtl8821ce.git

我按照 README 文件中的说明进行安装。

计算机重启后,驱动程序运行良好,但如果我尝试更改无线网络或计算机进入暂停状态,网络管理器将无法再连接。网络管理器在空中看到 Wi-fi 的 ssid,但无法建立连接。简而言之,它仅在第一次连接时有效。

我尝试过重启网络管理器,卸载并重新安装,但问题仍然存在。唯一的解决办法是重启 Ubuntu,这对我来说很烦人。

我该如何解决这个问题?

答案1

EDIT2:rtl8821ce 驱动程序可能包含在内核 5.9 中,同时您可以尝试https://github.com/lwfinger/rtw88。我已经用了一段时间了,似乎没有这些问题。驱动程序还很新,所以可能会有 bug。

编辑:全新安装 ubuntu 18.10 (uefi) 可以永久解决问题,您无需按照以下步骤操作,只需安装 ubuntu 18.10 并构建 wifi 模块即可。然后它应该可以完美运行。ubuntu 18.04 LTS 版本中可能存在一些错误,这些错误已在 18.10 版本中修复

主要问题是,由于某些未知原因,dkms 安装的 wifi 驱动程序在挂起后不会自行重新加载。

我的 WIFI 芯片是 RTL8821CE,所以我的内核模块被命名为 8821ce

root通过发出命令打开终端登录sudo -s,然后发出以下命令(您也可以使用sudo而不是以...身份登录root

modprobe -r 8821ce

modprobe -i 8821ce

这些命令将重新加载 wifi 模块,并且您的 wifi 将在暂停后再次工作。

我找到了一个临时的解决方法,以避免每次从暂停状态恢复时发出这些命令。

笔记:

  1. 这种解决方法有时有效,有时无效

  2. 这可能会破坏您的暂停/恢复,但您可以通过禁用服务和删除文件简单地恢复到以前的状态。

步骤如下;

  1. 创建一个脚本,在恢复时(不是暂停时)发出上述命令

sudo nano /etc/pm/sleep.d 20_anyname.sh(用您选择的任何名称替换任何名称)

并在脚本中输入以下几行

#!/bin/sh

# This script Restarts rtl8821ce kernel modules
# Use this if your wifi not working after suspend/resume

case "${1}" in
        resume|thaw)
               sudo modprobe -r 8821ce
               sudo modprobe -i 8821ce
;;
esac

然后按CTRL+X并通过输入保存更改yes

确保已授予适当的权限

sudo chown root:root /etc/pm/sleep.d/20_anyname.sh

sudo chmod 755 /etc/pm/sleep.d/20_anyname.sh

  1. 通过以下方式创建 systemd 服务

sudo nano /etc/systemd/system/somename.service

输入以下文本

[Unit]
Description=Wifi Resume Service
After=sleep.target
After=hibernate.target
After=hybrid-sleep.target

[Service]
Type=oneshot
ExecStart=/path/to/your/script

[Install]
WantedBy=sleep.target
WantedBy=hibernate.target
WantedBy=hybrid-sleep.target

并保存CTRL+X然后输入yes然后回车。

然后确保授予了适当的权限

sudo chown root:root /etc/systemd/system/somename.service

sudo chmod 755 /etc/systemd/system/somename.service

  1. 使用启用脚本 sudo systemctl enable somename

  2. 重启并享受

正如我之前所说,它有时能工作,有时不能。我真的不知道为什么会这样。要获得完全正常工作的 wifi,您需要等待开发人员将无错误模块放入即将推出的内核中,因为 rtl8821ce 仍然是一个新芯片。

首先启用本地 wifi 网络,然后暂停笔记本电脑。现在要判断脚本是否成功,请在恢复后查看右上角,如果您没有看到任何类型的 wifi 标志,则表示您可以继续,如果您一眼就看到 wifi 标志,则表示脚本失败。

查看错误journctl -u somename.service

答案2

我在联想 Ideapad330 上也遇到过同样的问题。同样的无线芯片组,挂起后恢复时也遇到同样的问题。

当阅读GitHub 上 8821ce 驱动程序的自述文件,tomaspinho 谈论可能出现的问题,尤其是“PCIe 激活状态电源管理”。

我遵循了他的建议,并在 grub cmdline 中添加了以下参数

pci=noaer

现在,暂停后我不再遇到无线问题。

答案3

我在展馆遇到了同样的问题,而接受的答案对我不起作用,我所做的如下:

在ubuntu 18.04中,创建脚本:

sudo vim /lib/systemd/system-sleep/wifi.sh

并复制并粘贴以下内容:

#!/bin/sh
case $1/$2 in
  pre/*)
    echo "Going to $2..."
    # Place your pre suspend commands here, or `exit 0` if no pre suspend action required
    ;;
  post/*)
    echo "Waking up from $2..."
    # Place your post suspend (resume) commands here, or `exit 0` if no post suspend action required
    modprobe -r 8821ce && modprobe -i 8821ce
    ;;
esac

然后授予他用户权限:

sudo chmod a + x /lib/systemd/system-sleep/wifi.sh

准备好。

相关内容