(Ainda outro) problema Wi-Fi após suspender no Ubuntu 16.04

2

Estou postando aqui como tendo problemas com o Wi-Fi depois da suspensão.

Eu comprei recentemente um novo cartão wifi pcie (TP-LINK TL-WN881N), e tudo funciona muito bem. Infelizmente, parece que as coisas ficam ruins quando coloco meu computador para dormir, já que o wifi não funciona corretamente depois de acordar.

Na cara, o problema é estranho. Ele se conecta à rede wifi, a conexão é mostrada em nm-applet, a conexão parece bem em ifconfig, as rotas são boas, mas parece que os drivers entram em um modo buggy onde eu não consigo nem pingar (ou acessar de qualquer forma) meu gateway ou qualquer outro local.

Eu tentei correções diferentes, como a que existe aqui Wifi doesn é possível trabalhar após suspender após 16.04 atualizar ou aqui A rede sem fio não funciona depois do currículo no Ubuntu 14.04 e nenhuma delas funcionou. O mais estranho é que, se eu tento reiniciar manualmente o serviço de gerenciamento de rede, as coisas não são resolvidas e, em vez disso, eu até obtenho problemas para listar as redes wifi. Uma reinicialização parece ser a única maneira de resolver o problema até agora.

Aqui estão alguns detalhes sobre meu cartão e driver:

$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

Obrigado!

editar:

Resolvido! Obrigado @ WinEunuuchs2Unix, parece que aplicando um método semelhante ao descrito aqui O ícone do sinal WiFi muda para o ícone Ethernet (setas para cima) depois de Suspender? , eu consegui resolver o problema.

As condições não eram exatamente as mesmas e eu tive que adaptar a solução. Basicamente, reiniciar o network-manager não corrige o problema, mas descarregar o recarregamento do módulo do kernel funcionou! Então aqui está como eu adaptei o script:

#!/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                                                                                          

Funciona perfeitamente agora:)

Obrigado pessoal!

    
por tbronchain 24.08.2017 / 12:46

3 respostas

2

Resolvido! Obrigado @ WinEunuuchs2Unix, parece que aplicando um método semelhante ao descrito aqui O ícone do sinal WiFi muda para o ícone Ethernet (setas para cima) depois de Suspender? , eu consegui resolver o problema.

As condições não eram exatamente as mesmas e eu tive que adaptar a solução. Basicamente, reiniciar o network-manager não corrige o problema, mas descarregar o recarregamento do módulo do kernel funcionou! Então aqui está como eu adaptei o script:

#!/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                                                                                          

Funciona perfeitamente agora:)

Obrigado pessoal!

    
por tbronchain 25.08.2017 / 08:14
0

Eu tive um problema semelhante, mas com algumas diferenças.

Meu laptop é um Lenovo ThinkPad T470s que executa o Ubuntu 16.04.4 LTS (xenial).

Após suspender e retomar, tive o seguinte comportamento:

  • o gerenciador de rede seria reiniciado e a lista de redes Wi-Fi seria ok
  • não faria diferença se o PC tivesse sido suspenso por um curto ou longo período de tempo,
  • ele realmente se reconectaria ao wifi após o currículo,
  • Eu consegui fazer o ping com sucesso nos PCs na LAN,
  • Não consegui pingar nada fora da LAN e não consegui me conectar à Internet.
  • (muito estranho) depois de ter reiniciado a unidade manualmente uma vez (veja a correção abaixo) este problema teria ido embora. Eu poderia suspender e retomar e o wifi funcionaria sem ter que reiniciar o driver pela segunda vez. Para reproduzir o problema, tive que reiniciar e suspender novamente.

Reiniciar o gerenciador de rede ( sudo systemctl restart network-manager.service ) não corrige o problema. Pará-lo, esperar por algum tempo e iniciá-lo novamente também não o corrigiu.

Correção manual

Para corrigir manualmente, tive que:

  • determine meu driver de Wi-Fi:

    $ 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
    
  • reinicie o driver:

    $ sudo /sbin/modprobe -r iwlwifi
    $ sudo /sbin/modprobe iwlwifi
    

Correção automática

Para reiniciar o driver automaticamente após o reinício do sistema, fiz algo parecido com

WiFi ícone de sinal muda para o ícone Ethernet (setas para cima) depois de suspender?

ou seja, criei o seguinte script iwlwifi-reset em /lib/systemd/system-sleep/ e tornei-o executável.

#!/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
    
por jfs 03.06.2018 / 22:36
0

No Ubuntu 18.04, para obter o script a ser chamado no reinício do sistema, tive que executar as etapas adicionais a seguir (estou usando um antigo adaptador WiFi USB da Edimax, por isso nomeei o /lib/systemd/system-sleep/ script edimax_wifi_wakeup ):

  • Crie um arquivo "serviço": sudo vi /etc/systemd/system/sleep-resume.service
  • Seu conteúdo:

    [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
    
  • Ativar o serviço por sudo systemctl enable sleep-resume

por RJP 11.09.2018 / 20:35