22

Every time I open my notebook lid I have to wait a few seconds for wifi to reconnect. I remember that in Windows it was already connected. I need a way to prevent wifi from disconneting on suspend.

The closest answer I found was https://askubuntu.com/a/961460/613425 but it didn't work. I also tried the iwconfig wlan0 poweroff in the answer but it didn't work even before reboot.

Poperton
  • 1,283

3 Answers3

24

There are two ways of enabling WiFi after sleep. The first is a common patch to Network Manager as you can see I've made by listing the file:

Turn off or enable power savings as illustrated below:

$ cat /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
[connection]
wifi.powersave = 3
# Slow sleep fix: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1670041
#wifi.powersave = 2
  • Edit the Network Manager file shown above.
  • Change WiFi.powersave from 2 to 3 (Enable power saving).
  • If it's already set to 3 try setting it to 2 (Disable power saving).
  • After saving the file run sudo systemctl restart NetworkManager

The second is a systemd script which reloads the WiFi kernel module when resuming from suspend. It comes from this answer: Wifi available networks not showing up suddenly:

This script is written for iwlwifi` which is the common Intel driver name. If your's is different change that name below:

#!/bin/sh

# NAME: /lib/systemd/system-sleep/iwlwifi-reset
# DESC: Resets Intel WiFi which can be flakey after a long suspend.
# DATE: Apr 1, 2017. Modified August 30, 2017.

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 'systemctl restart NetworkManager.service (SUPPRESSED)'
    /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

NOTE: Sometimes simply resetting network manager is all that is needed. In that case un-comment the line above by removing #. Then comment out the two lines above it by putting # at the beginning of those two lines.

You'll need to create this script, called iwlwifi-reset, with sudo powers and save it into the directory /lib/systemd/system-sleep. Then mark it executable using:

chmod a+x /lib/systemd/system-sleep/iwlwifi-reset
kai
  • 3
  • 2
2

I think it is related to systemd. You can make a script that starts the wifi device after suspend. Just try to do so manually first.

2

First ceate a new script and make it executable.

sudo touch /usr/lib/pm-utils/sleep.d/wakewifi
sudo chmod a+x /usr/lib/pm-utils/sleep.d/wakewifi

Then edit the script

sudo nano /usr/lib/pm-utils/sleep.d/wakewifi

and make it look something like this.

 #!/bin/sh

    case "$1" in
        resume)
            nmcli radio wifi on
    esac

to make sure that nmcli radio wifi on is the correct command, try to go into sleep mode, start the computer up and do

sudo nmcli radio wifi on

if your computer then connect to the correct wifi, then this might be a optional solution for you. your computer should auto-connect. to your saved wi-fi access point.

BD Bear
  • 478