![(又一个)Ubuntu 16.04 挂起后 Wifi 问题](https://linux22.com/image/1149708/%EF%BC%88%E5%8F%88%E4%B8%80%E4%B8%AA%EF%BC%89Ubuntu%2016.04%20%E6%8C%82%E8%B5%B7%E5%90%8E%20Wifi%20%E9%97%AE%E9%A2%98.png)
我在这里发帖是因为暂停后 Wi-Fi 出现了问题。
我最近买了一张新的 pcie wifi 卡 (TP-LINK TL-WN881N),一切都很好。不幸的是,当我让电脑进入睡眠状态时,事情似乎变得很糟糕,因为唤醒后 wifi 无法正常工作。
说实话,这个问题很奇怪。它确实连接到了 wifi 网络,nm-applet 中显示了连接,ifconfig 中的连接似乎正常,路由也很好,但似乎驱动程序处于错误模式,我甚至无法 ping 通(或以任何方式到达)我的网关或任何其他位置。
我尝试了不同的修复方法,比如这里的升级到 16.04 后 Wifi 挂起后无法使用或此处Ubuntu 14.04 恢复后无线网络不工作但这些方法都不起作用。最奇怪的是,如果我尝试手动重启网络管理器服务,问题并没有得到解决,相反,我甚至无法列出 wifi 网络。到目前为止,重启似乎是解决问题的唯一方法。
以下是有关我的卡和驱动程序的一些详细信息:
$sudo lshw -class network
*-network
description: Wireless interface
product: RTL8192EE PCIe Wireless Network Adapter
vendor: Realtek Semiconductor Co., Ltd.
physical id: 0
bus info: pci@0000:02:00.0
logical name: wlp2s0
version: 00
serial: 30:b4:9e:72:08:78
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
configuration: broadcast=yes driver=rtl8192ee driverversion=4.10.0-32-generic firmware=N/A ip=192.168.2.2 latency=0 link=yes multicast=yes wireless=IEEE 802.11
resources: irq:127 ioport:d000(size=256) memory:f7100000-f7103fff
谢谢!
编辑:
解决了!谢谢@WinEunuuchs2Unix,似乎通过应用与此处描述的方法类似的方法暂停后,WiFi 信号图标切换为以太网图标(上下箭头)?,我设法解决了这个问题。
情况并不完全相同,我不得不调整解决方案。基本上,重新启动网络管理器并不能解决问题,但卸载并重新加载内核模块却有效!因此,下面是我调整脚本的方法:
#!/bin/sh
# NAME: /lib/systemd/system-sleep/wifi-reset
# DESC: Resets Realtek WiFi after a long suspend.
# DATE: Aug 25, 2017. Modified Aug 25, 2017.
MYNAME=$0
DRIVER=rtl8192ee
restart_wifi() {
/usr/bin/logger $MYNAME 'restart_wifi BEGIN'
/sbin/modprobe -v -r $DRIVER # This removes the driver
/sbin/modprobe -v $DRIVER # This starts the driver
#systemctl restart NetworkManager.service # network manager restart disabled as not needed
/usr/bin/logger $MYNAME 'restart_wifi END'
}
/usr/bin/logger $MYNAME 'case=[' ${1}' ]'
case "${1}/${2}" in
hibernate|suspend|pre*)
;;
resume|thaw|post*)
restart_wifi;;
esac
现在它运行完美了:)
多谢你们!
答案1
解决了!谢谢@WinEunuuchs2Unix,似乎通过应用与此处描述的方法类似的方法暂停后,WiFi 信号图标切换为以太网图标(上下箭头)?,我设法解决了这个问题。
情况并不完全相同,我不得不调整解决方案。基本上,重新启动网络管理器并不能解决问题,但卸载并重新加载内核模块却有效!因此,下面是我调整脚本的方法:
#!/bin/sh
# NAME: /lib/systemd/system-sleep/wifi-reset
# DESC: Resets Realtek WiFi after a long suspend.
# DATE: Aug 25, 2017. Modified Aug 25, 2017.
MYNAME=$0
DRIVER=rtl8192ee
restart_wifi() {
/usr/bin/logger $MYNAME 'restart_wifi BEGIN'
/sbin/modprobe -v -r $DRIVER # This removes the driver
/sbin/modprobe -v $DRIVER # This starts the driver
#systemctl restart NetworkManager.service # network manager restart disabled as not needed
/usr/bin/logger $MYNAME 'restart_wifi END'
}
/usr/bin/logger $MYNAME 'case=[' ${1}' ]'
case "${1}/${2}" in
hibernate|suspend|pre*)
;;
resume|thaw|post*)
restart_wifi;;
esac
现在它运行完美了:)
多谢你们!
答案2
我遇到了类似的问题,但有一些不同。
我的笔记本电脑是联想 ThinkPad T470s,运行 Ubuntu 16.04.4 LTS(xenial)。
暂停并恢复后,我出现了以下行为:
- 网络管理器将重新启动,并且 wifi 网络列表将正常,
- PC 被暂停的时间长短没有区别,
- 恢复后它实际上会重新连接到 wifi,
- 我可以成功 ping 通 LAN 上的 PC,
- 我无法 ping 通局域网外部的任何东西,也无法连接到互联网。
- (非常奇怪)手动重启驱动器一次后(见下面的修复),这个问题就消失了。我可以暂停并恢复,wifi 可以正常工作,而不必再次重启驱动器。为了重现这个问题,我不得不重新启动,然后再次暂停。
重新启动网络管理器 ( sudo systemctl restart network-manager.service
) 无法解决问题。停止它,等待一段时间,然后重新启动它也无法解决问题。
手动修复
要手动修复,我必须:
确定我的 wifi 驱动程序:
$ sudo lshw -C network *-network description: Wireless interface product: Intel Corporation vendor: Intel Corporation physical id: 0 bus info: pci@0000:3a:00.0 logical name: wlp58s0 version: 78 serial: 00:e1:8c:dc:8c:7d width: 64 bits clock: 33MHz capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless configuration: broadcast=yes driver=iwlwifi driverversion=4.13.0-43-generic firmware=31.560484.0 ip=192.168.0.9 latency=0 link=yes multicast=yes wireless=IEEE 802.11 resources: irq:128 memory:ec100000-ec101fff
重新启动驱动程序:
$ sudo /sbin/modprobe -r iwlwifi $ sudo /sbin/modprobe iwlwifi
自动修复
为了在系统恢复后自动重新启动驱动程序,我做了类似的事情
也就是说,我iwlwifi-reset
在 中创建了以下脚本/lib/systemd/system-sleep/
,并使其可执行。
#!/bin/sh
# NAME: /lib/systemd/system-sleep/iwlwifi-reset
# DESC: Resets Intel WiFi after suspend.
# DATE: Jun 3, 2018.
MYNAME=$0
restart_wifi() {
/usr/bin/logger $MYNAME 'restart_wifi BEGIN'
/sbin/modprobe -r iwlwifi
/sbin/modprobe iwlwifi
/usr/bin/logger $MYNAME 'restart_wifi END'
}
/usr/bin/logger $MYNAME 'case=[' ${1}' ]'
case "${1}/${2}" in
hibernate|suspend|pre*)
;;
resume|thaw|post*)
restart_wifi;;
esac
答案3
在 Ubuntu 18.04 中,为了让脚本在系统恢复时被调用,我必须执行以下额外步骤(我使用的是旧的 Edimax USB WiFi 适配器,因此我将脚本命名为/lib/systemd/system-sleep/
脚本edimax_wifi_wakeup
):
- 创建“服务”文件:
sudo vi /etc/systemd/system/sleep-resume.service
其内容:
[Unit] Description=Edimax USB WiFi system suspend/resume handling Before=sleep.target StopWhenUnneeded=yes [Service] Type=simple RemainAfterExit=yes ExecStart=-/lib/systemd/system-sleep/edimax_wifi_wakeup suspend ExecStop=-/lib/systemd/system-sleep/edimax_wifi_wakeup resume [Install] WantedBy=sleep.target
通过以下方式启用服务
sudo systemctl enable sleep-resume
答案4
经过几种不同的解决方法后,我终于找到了解决办法:包括 WIFI 网络 SSID 的正确表示、WIFI 网络的图标(而不是以太网图标)以及图标的颜色(显示“已连接”而不是空白)。非常感谢。
为了寻找隐含的驱动力,对于了解和使用它的人来说,唯一的建议是:
$ inxi -i
Network:
Device-1: Intel 82566MM Gigabit Network driver: e1000e
IF: enp0s25 state: down mac: 00:xx:xx:xx:xx:xx
Device-2: Qualcomm Atheros AR93xx Wireless Network Adapter driver: ath9k
IF: wls3 state: up mac: 00:yy:yy:yy:yy:yy
IP v4: 192.168.188.144/24 type: dynamic scope: global
IP v6: fe80::abf3:8fd0:3e74:915f/64 scope: link
WAN IP: 5.90.33.85
更加简单,直接,并且具有更多其他功能。