16.04 升级后,暂停后无法使用 Wifi。

这个特定版本的“挂起后无法工作”问题是在升级到16.04之后出现的。升级似乎包括了一个Wicd小程序(添加到Metacity经典Gnome任务栏上,与常规网络图标并列),但在挂起后似乎无法工作。使用sudo service network-manager restart命令会导致这个问题重复出现。只有完全重新启动才能再次启用Wifi。有什么想法吗?

6你在启动板上为这个问题提交了一个错误报告吗? - apos
3https://bugs.launchpad.net/ubuntu/+source/wpasupplicant/+bug/1556357 - Alberto Salvia Novella
看起来这个问题已经存在了一段时间(自Ubuntu 14以来)。 - Dan Dascalescu
这在14.04 LTS下从未发生过。升级到16.04 LTS真是太棒了,我会一直使用它,但它总是忘记我的WiFi密码。服务明显在运行,只是它会忘记密码并且无法连接。我在这里发布了问题:https://askubuntu.com/questions/934958/how-to-make-ubuntu-16-04-lts-remember-my-wifi-password-through-a-shutdown - 我不想处理黑名单或任何奇怪的事情。 - SDsolar
...而且在Ubuntu 20中问题仍然存在。我有点受够了。 - Dan Dascalescu
12个回答

16.04在systemd上运行。请尝试以下操作:

sudo systemctl restart network-manager.service

如果这个方法有效,你可以创建一个脚本来自动化它。
打开终端并输入以下内容:
sudo nano /etc/systemd/system/wifi-resume.service 现在用右键粘贴脚本进去。按CTRL + X退出,并按Y保存。现在激活它:sudo systemctl enable wifi-resume.service 脚本:
#/etc/systemd/system/wifi-resume.service
#sudo systemctl enable wifi-resume.service
[Unit]
Description=Restart networkmanager at resume
After=suspend.target
After=hibernate.target
After=hybrid-sleep.target

[Service]
Type=oneshot
ExecStart=/bin/systemctl restart network-manager.service

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

希望这能帮到你。在我的笔记本电脑上运行正常。

是的,那个更正没有出错,但还是不起作用。再说一遍,在我的面板上有两个图标,一个是常规网络的图标,另一个是wicd的图标。以前我没有wicd。它们是否冲突了?顺便说一下,我的KDE Plasma似乎没有这个问题。 - 147pm
2你试过简单地卸载wicd吗? - Joakim Koed
卸载了,但问题仍然存在。现在我只有原始的网络图标,但在从暂停状态恢复后仍然没有连接(无法看到WiFi热点)的可能性。 - 147pm
你是否创建了 /home 分区,如果是的话,我会选择重新安装而不是升级,说实话。这虽然不是一个真正的解决方案,但通常能修复这些问题。 - Joakim Koed
6我会说不要为此重新安装。我进行了一次干净的安装,但在16.04上遇到了这个问题。在14.04上从未遇到过问题。 - Michael Martin-Smucker
@JoakimKoed 请编辑您的回答,使用命令的小写版本作为开头。 - jerivas
命令:sudo systemctl restart network-manager.service可行,但脚本不可行。 - tokam
@tokam每次从睡眠中恢复后脚本都会运行。那就是我遇到问题的时候。你使用的是16.04吗? - Joakim Koed
是的,现在看起来运行正常了。 - tokam
3有时候它有效,有时候不行 :( - tokam
@tokam 抱歉你们经常遇到问题。对我来说,它完美地运行。希望他们能尽快修复这些讨厌的错误。 - Joakim Koed
这对我来说不起作用。 - Jose Carlos Ramos Carmenates
@JoseCarlosRamosCarmenates 是什么出了问题?是脚本还是第一个命令? - Joakim Koed
@JoakimKoed 对我来说,这些解决方案都不起作用,提前感谢。我使用的是Kubuntu 16.04 - 华硕共和国游戏者。 - Jose Carlos Ramos Carmenates
我猜你是指两者都不行吧?无论如何,只有在你暂停后遇到一些问题时才能起作用。如果根本不起作用,也许你可以自己发帖寻求帮助。记得提供日志、你的无线网卡等信息。 - Joakim Koed
有时候,您的命令可以解决问题,但有时候却不能。而且脚本有时候也不能解决问题。我的主要问题是,我已经在线上了,但这个信息没有传播到 NM-Applet 和 Evolution 中。所以我无法下载电子邮件,因为当 Evolution 认为系统处于离线状态时,它甚至不会尝试。现在,在运行您的命令后,重新启动 Evolution 有所帮助。 - tokam
@takan:看起来你有一个更深层次的问题 :( - Joakim Koed
哪一个?怎么找出来呢?我有一个专门的帖子,引导到这个链接:http://askubuntu.com/questions/767878/networkmanager-does-not-know-that-i-am-online-after-resuming-from-hibernate?noredirect=1#comment1147389_767878 - tokam
对我来说,只有运行/etc/init.d/network-manager restart才能解决问题,我应该像你一样把它放在一个脚本中吗?(systemctl命令对我不起作用) - elichai2
@elichai2 如果您不是运行16.04或任何带有systemd的系统,那么该脚本实际上是为systemd设计的。可以参考类似这样的链接:http://askubuntu.com/questions/452826/wireless-networking-not-working-after-resume-in-ubuntu-14-04 - Joakim Koed
你认为Ubuntu网络堆栈的某些部分仍在使用upstart命令吗?也许在init系统中有另一个地方执行旧命令,用systemd等效命令替换它可以从源头上解决问题,而不是在最后增加另一个单元。如果是这样的话,这将是适合在Launchpad上报告错误的好方法,并且可能会影响其他系统。 - mikeymop
1@mikeymop 我也一直在考虑这个问题。我知道系统的某些部分仍在使用upstart,所以这可能会触发某些问题。由于16.10完全采用systemd并且没有出现错误,你可能是正确的。 - Joakim Koed
我过去一周一直在测试这个变体,它能完美地重新启动网络。再也没有Wi-Fi问题了。 - Dan Dascalescu
@JoakimKoed 这对我来说非常完美。有没有办法暂时禁用它一段时间,以查看是否仍然需要?恢复这个变通方法的正确方式是什么? - Dennis
@Dennis sudo systemctl禁用wifi-resume.service - Joakim Koed
这对我来说真是太神奇了。我在MSI GP60上运行Ubuntu 16.04,在从暂停状态恢复后,它可以连接到我的WiFi,但却没有显示我所连接的WiFi信道或任何可用的WiFi信道。 - Cornelius
1怎样才能移除这个?这在我的系统上行不通。 - an offer can't refuse
这个答案中的脚本对我来说似乎运行得很好。我在两台X1 Carbon上使用过它,一台是第二代,另一台是第四代,它帮了我很大的忙。谢谢! - jerome
如果network-manager.service失败,请尝试使用NetworkManager.service。 - timelmer
只尝试在命令行中恢复。它有效。将检查是否再次出现此问题。 - sancho.s ReinstateMonicaCellio
1脚本对我来说不起作用。我的网络中显示“Wifi已禁用”,我有Realtek RTL8723be驱动程序。 - Arshad
这在我的Dell XPS 15 9550上的Ubuntu 16.10上运行良好(在暂停/恢复后存在一些DNS问题,https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1673796)。谢谢! - morhook
这在Ubuntu 16.04.2(Acer E15)上运行正常。 - Parnab Sanyal
我的XPS 9550 Ubuntu 16.04上似乎无法稳定运行。但是,使用相同的命令手动重启却能完美解决问题。我会尝试在另一篇帖子中提到的建议中添加一个类似的睡眠命令,并进行一段时间的测试。另外,还有一个问题是面板上的网络小程序消失了,我不知道如何恢复它。重新启动unity-panel-service也没有帮助,真希望能够解决这个问题。 - yuranos
感谢为我们制作脚本。但是对我来说,它在恢复时无法运行。如果我手动运行“sudo systemctl restart network-manager.service”,它可以解决问题。 - Terje Nesthus
1命令“sudo systemctl restart network-manager.service”对我来说总是有效的,但是脚本不起作用。我正在使用Ubuntu 16.04。 - Jonathan Lindgren

@147pm 你最后解决了这个问题吗?
我发现我有一个非常类似的问题,尽管我使用的是Kubuntu 16.10(基于KDE而不是Gnome),并且是在一台HP ProBook笔记本电脑上。与你不同的是,在我的情况下,并不是无线网络在暂停/唤醒后失效,而是以太网口。 不过,我想知道它们是否相关。
我也注意到你在KDE下没有这个问题。但我很想知道下面的解决方案是否对Gnome有帮助,因为这个解决方案不依赖于窗口管理器、桌面环境或小程序。
首先,只需确认重启网络管理服务...
$ sudo systemctl restart network-manager.service

对我来说没有起作用。

然而,我找到了一个有效的答案,感谢buzhidao的问题和挂起后无法连接互联网以及GAD3R在那里的评论。

根据他们的信息,我发现首先研究我正在使用的以太网硬件和驱动程序/模块,然后移除并重新加载该模块,对我来说是有效的(尽管对buzhidao来说不是):

无线网络:

$ lspci -knn | grep Net -A2

以太网:
$ lspci -knn | grep Ether -A2

我使用的是其中的第二种(以太网),我发现:
03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 0c)
        Subsystem: Hewlett-Packard Company RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [103c:1944]
        Kernel driver in use: r8169
        Kernel modules: r8169

所以我重新加载了'r8169'驱动程序:
$ sudo rmmod r8169 && sudo modprobe r8169

然后就好了!这个方法奏效了。我的以太网口/连接在挂起/唤醒后恢复正常,而无需重新启动。

(我也没有使用Realtek的wifi设备,而是用的Qualcomm Atheros(mod:ath9k),这或许可以解释为什么在从挂起中唤醒后wifi仍然能够正常工作。)

正如你可以从我在另一篇帖子上的评论中看到的那样,我想知道问题是否是Buzhidao和我之间的共同点:Realtek半导体设备。即使它们使用不同的模块,它们可能共享一些公共代码?或者现在新内核代码以某种方式不同地处理它们?

你自己有基于Realtek的wifi设备吗?(使用上面的lspci命令)你尝试过重新安装模块(使用上面的rmmod/modprobe命令)吗?

总之,这只是一个猜测。如果你已经找到了最终的答案,请告诉我们!谢谢。


1我还有一个RTL8111/8168/8411以太网,sudo rmmod r8169 && sudo modprobe r8169 解决了这个问题。 - lenooh
在Debian 9和KDE上出现了相同的问题。按照上述重新安装解决了问题。非常感谢。 - sumitkm
我的计算机也有一个RTL8111/8168/8411以太网设备,并且sudo rmmod r8169 && sudo modprobe r81691 最终为我解决了这个问题。在内核版本4.16之前我没有这个问题。(*Debian 10 使用GNOME桌面环境,内核版本为4.16,并且使用来自Realtek的专有固件Realtek固件 - ossbuntu
我在Arch Linux上使用ath10k_pci驱动工作正常。 - user690429
重新插入kern模块对我在Xubuntu 19.10上解决了问题。有趣的是,这个问题只是最近才出现的,在19.04或更早的版本中并没有发生过。我使用的是T420型号。 - Victor Sorokin
重新加载模块对我的ath10k_pci无线适配器也起作用了。它在某次更新之前一直运行顺畅。我使用的是Ubuntu 20.04,内核版本为5.4.0-37-generic #41 - laurent
遇到了相同的问题,所以需要这个!在Debian Buster上有不同的驱动程序,但是同样的解决方法。 - therightstuff
这个问题持续到 U20,并且这个解决方案对我有效(其他的解决方案都不行)。谢谢! - Sean Lawton
我也是用的MacBook Pro 2015年早期版本和Ubuntu 19,我不想安装不同的Broadcom驱动程序,因为老实说它大部分时间都工作得很好。但是,这个修复方法对于从长时间休眠(或许是休眠模式?)中唤醒非常有效。 - Eli Albért
谢谢!在我的Ubuntu 20.10上,需要重新加载的是rtw88_8822ce(网络控制器:Realtek RTL8822CE 802.11ac PCIe无线网络适配器)。 - 4LegsDrivenCat
保存这个,太有用了! - fitojb
非常感谢你。 我尝试了很多其他解决方案,花了几个小时,最终你的方法在我的Ubuntu 20.04上起作用了 :) - Divyessh
终于可以了。尝试了很多其他的解决方案都没有成功。谢谢! - callOfCode

在没有sudo访问权限的环境中,在恢复后自动重新启动NetworkManager,请在/etc/pm/sleep.d目录下创建一个脚本(任意名称),通过chmod +x设置可执行位,并插入以下内容:
case "${1}" in
    resume|thaw)
        # systemctl restart network-manager.service
        service NetworkManager restart
;;
esac

对我来说,service命令行可以工作,但systemctl可能对你更好。
来源:https://askubuntu.com/a/92235/30266

2"service NetworkManager restart" 对我有效,但是脚本的放置位置没有(在16.04上)。我必须将脚本移动到/lib/systemd/system-sleep/script-name-here。在这种情况下,脚本的第一个参数是[pre | post],所以我必须将case语句改为case "${1}" in ... post) ...。我还在内部语句中加入了case "${2}" in ... suspend) ... - Chester
1应该是/lib/systemd/system-sleep/适用于15.04及以上版本。 - qwr

对我来说,这似乎是随机的,但有时候如果我已经连接上了,Wi-Fi会突然断开,或者如果我没有连接上,它就不会显示网络。有时候将我的笔记本电脑放入睡眠模式似乎会触发这个问题,但并不总是。
通常情况下,以下组合可以解决问题而无需重新启动:
- `sudo iwlist $(ifconfig | grep -Po '^w\w+') scan` - `sudo service network-manager stop; sleep 5; sudo service network-manager start` - 在这里只是简单地调用`restart`似乎对我没用。看起来它试图在关闭之前启动它,因此在`stop`和`start`之间暂停一下会更加成功。 - 在用户界面中关闭Wi-Fi;等待几秒钟;再打开
这些方法似乎都没有一种能够始终有效,但我按照最有可能成功的顺序列出了它们。

1对我来说,“重新启动”没有起作用,但“停止”和“启动”起了作用!其他答案都没用。非常感谢! - Jonatan Öström

在Ubuntu 16.04上的工作方法:
创建服务:sudo nano /lib/systemd/system/wifi-resume.service 该服务调用程序位于:
/etc/init.d/network-manager 粘贴代码:
#/lib/systemd/system/wifi-resume.service
#sudo systemctl enable wifi-resume.service
[Unit]
Description=Restart network-manager at resume
After=suspend.target
After=hibernate.target
After=hybrid-sleep.target 

[Service]
Type=oneshot
ExecStart=/bin/systemctl restart network-manager

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

然后启用该服务:
sudo systemctl enable /lib/systemd/system/wifi-resume.service 这将在/etc/systemd/system的指定[Install]目录中创建符号链接,并激活该服务。
之后,您可以使用以下命令检查状态:systemctl status wifi-resume.service

请在终端中逐个运行以下命令。

1. sudo nano /lib/systemd/system-sleep/wififix
2. 粘贴下面的代码并保存。

#!/bin/sh
set -e
if [ "$2" = "suspend" ] || [ "$2" = "hybrid-sleep" ]; then
     case "$1" in
             pre) true ;;
             post) sleep 1 && service network-manager restart ;;
       esac
fi
  • sudo chmod +x /lib/systemd/system-sleep/wififix
  • 在Ubuntu 20.04上进行了测试。它也适用于其他Mint和Elementary版本。

    我从这里找到了解决方案。


    我遇到了蓝牙的同样问题:在暂停后,我的蓝牙鼠标无法工作。所以我从上面找到了解决办法:
    sudo nano /etc/systemd/system/bluetooth-resume.service
    

    启用了新服务
    sudo systemctl enable bluetooth-resume.service
    

    并编辑了服务

    #/etc/systemd/system/bluetooth-resume.service
    #sudo systemctl enable bluetooth-resume.service
    [Unit]
    Description=Restart bluethooth at resume
    After=suspend.target
    After=hibernate.target
    After=hybrid-sleep.target
    
    [Service]
    Type=oneshot
    ExecStart=/bin/systemctl restart bluetooth.service
    
    [Install]
    WantedBy=suspend.target
    WantedBy=hibernate.target
    WantedBy=hybrid-sleep.target
    

    我也尝试着编辑...
    sudo nano /etc/bluetooth/main.conf
    

    并且改变了

    AutoEnable=true
    

    但是这对于“简历问题”没有起作用,对新的蓝牙设备也没有任何影响!

    这篇帖子如何回答了楼主的问题? - ynn

    我在我的戴尔Inspiron 15R笔记本电脑上使用Ubuntu 16.04时遇到了同样的问题。对我来说,第二个回复中提到的脚本起了作用。
    安装完脚本后,我尝试使用右上角菜单中的命令进行休眠,甚至关闭盖子,问题得到解决。
    我必须说,这个问题的行为是不稳定的(也就是说,有时在安装脚本之前它能正常工作)。

    我在电脑休眠后重新连接家里的Wi-Fi时遇到了同样的问题。尝试了其他一些建议的解决方法,有时候可以工作,但并不总是有效。

    最终找到了一个能够稳定连接Wi-Fi的解决方法:

    1)编辑以下文件:

    sudo vim /etc/NetworkManager/NetworkManager.conf
    

    2) 通过添加这个到它上面:
    [device]
    wifi.scan-rand-mac-address=no
    

    现在可能很简单
    sudo apt update
    sudo apt upgrade
    

    应该可以工作。
    在我的情况下,升级的软件包中有bcmwl-kernel-source (6.30.223.271+bdcom-0ubuntu1~1.3),在此更新后,无线网络再次正常工作。