Método Automático
Usando os poderes sudo, crie o arquivo /lib/systemd/system-sleep/iwlwifi-reset
contendo:
#!/bin/sh
# NAME: /lib/systemd/system-sleep/iwlwifi-reset
# DESC: Resets Intel WiFi after a long suspend.
# DATE: Apr 1, 2017. Modified April 8, 2017.
# NOTE: Per AU comment restart network.
MYNAME=$0
restart_wifi() {
/usr/bin/logger $MYNAME 'restart_wifi BEGIN'
# /sbin/modprobe -v -r iwldvm # This removes iwlwifi too
# /sbin/modprobe -v iwlwifi # This starts iwldvm too
systemctl restart NetworkManager.service
/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
Marque o script como executável usando:
sudo chmod a+x /lib/systemd/system-sleep/iwlwifi-reset
Para verificar a execução do script depois de acordar do uso suspenso:
cat /var/log/syslog | grep iwlwifi
Não fique muito animado se parecer funcionar durante o teste, pois há momentos em que esse script funciona com uma suspensão curta, mas não funciona depois de uma longa suspensão.
Se isso não funcionar, antes de tentar o Método manual na próxima seção, coloque o comando sleep 5
antes da linha restart_wifi;;
.
Método manual
Se o método automático não estiver funcionando usando o poder sudo, crie o script /usr/local/bin/iwlwifi-reset
contendo:
#!/bin/sh
# NAME: /usr/lib/bin/iwlwifi-reset
# DESC: Manually reset Intel WiFi.
# DATE: Apr 1, 2017. Modified April 8, 2017.
# NOTE: Must call using SUDO POWERS.
MYNAME=$0
/usr/bin/logger $MYNAME 'restart_wifi BEGIN'
# modprobe -r iwldvm # This removes iwlwifi too
# modprobe iwlwifi # This starts iwldvm too
systemctl restart NetworkManager.service
/usr/bin/logger $MYNAME 'restart_wifi END'
Marque o script como executável usando:
sudo chmod a+x /usr/local/bin/iwlwifi-reset
Como descrito na última seção, você pode verificar / var / log / syslog para mensagens quando este script for executado, mas você verá qualquer mensagem de erro em seu terminal de qualquer maneira.
Para chamar este script, use:
sudo iwlwifi-reset
Você não precisa especificar o diretório porque /usr/local/bin
está no caminho de busca do comando do terminal.
Editar 8 de abril de 2017 Conforme o comentário do OP e este How-To , revisões do script foram feitas. Em vez de remover e reinserir módulos do kernel, foi usado o reinício dos serviços de rede.