(又一个)Ubuntu 16.04 挂起后 Wifi 问题

(又一个)Ubuntu 16.04 挂起后 Wifi 问题

我在这里发帖是因为暂停后 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
    

自动修复

为了在系统恢复后自动重新启动驱动程序,我做了类似的事情

暂停后,WiFi 信号图标切换为以太网图标(上下箭头)?

也就是说,我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 

更加简单,直接,并且具有更多其他功能。

相关内容