64

I think I do not have problem with hardware. Sometimes the WiFi connection simply disconnects, apparently. So this is not necessarily the same as this case, I might not need to reload any modules.

But how to just restart wlan0? I tried restart network-manager, but this seems to leave wlan0 alone.

123

You just need to restart Network Manager:

sudo service network-manager restart
  • 5
    On newer versions of Ubuntu, it might (depending on whether the system is using systemd) be better to use sudo systemctl restart NetworkManager. – TSJNachos117 Dec 11 '16 at 1:47
  • 1
    Works for me running 16.04 on a ThinkPad t420. Is there any documented reason why we need to do this? – mbigras Feb 28 '17 at 3:30
  • Haha, yes but on Ubuntu GNOME 17.04 sudo doesn't work when the network becomes disabled. Quite the catch 22. – grofte Jun 30 '17 at 13:56
  • This one does not work for me (Dell Inspiron 9400) – Hibou57 Sep 30 '17 at 10:55
  • adding just service network-manager restart to a desktop file or shortcut works nicely (asks for pass anyway) – user47206 Oct 7 '17 at 9:58
15

Try this:

sudo ifconfig wlan0 down
sudo ifconfig wlan0 up
  • 1
    assuming these interfaces are defined in the /etc/network/interfaces file. Else, you might get the infamous Unknown interface error – asgs Oct 13 '18 at 15:38
14

These don't need root, in case you are scripting:

nmcli networking off 
nmcli networking on

For more do: man nmcli

EDIT:

As these guys are saying in the comments, for WI-FI only:

nmcli radio wifi off
nmcli radio wifi on
  • 4
    Nice! (+1) Just to make it more specific to the wifi connection, one can use: nmcli radio wifi off followed by nmcli radio wifi on – n1k31t4 Oct 6 '17 at 23:56
  • 1
    @n1k31t4 would you mind editing this answer, please? this is exactly what the OP needed and probably a lot of other people looking at this post. – asgs Oct 13 '18 at 15:40
6

You could try killing the power to your device. Assuming you are unable/unwilling to physically disconnect the device, you should run (as root): iwconfig wlan0 txpower off. I would then wait 10-15 seconds to make sure whatever hardware issue has caused the problem has been stopped, then: iwconfig wlan0 txpower auto.

Or, you can simply run rfkill and block/unblock your device. To do so, run rfkill block wifi, followed by rfkill unblock wifi. This second option should be faster, since you only need to wait 2-3 seconds between commands, as opposed to 10-15 seconds. In fact, on my machine, I don't need to wait at all, although I suspect this depends on your WiFi hardware. This option can also be done as a regular user, no root needed.

You can also restart NetworkManager. If you use systemctl as your init system (as is the case with newer versions of Ubuntu), you can use systemctl restart NetworkManager. Otherwise, you can use sudo initctl restart network-manager. If you don't know what init system you use, try both commands and see what works.

  • This is rather a software issue than an hardware issue, since is was working fine before Ubuntu16.04 and multiple users suffer from the same with the same Ubuntu version. – Hibou57 Sep 30 '17 at 10:57
3

Created a script based on prior link advice with some mixing & matching of prior links. This works for me running under Mint Linux 17.3.

The file below does not require root access. It also only restarts wifi only if it is already down. Now I just need to add this script to a cron job to check my wifi connection every 15 minutes or so.

#!/bin/bash

wlan=$(/sbin/ifconfig wlan0 | grep inet\ addr | wc -l)
if [ $wlan -eq 0 ]; then
nmcli nm wifi on
else
echo "interface is up"
fi
  • +1 for the effort of automating the process. -1 because this script wouldn't restart the WiFi connection, it'll only start it if it's already down. While this would fix the problem if the OP's issue completely drops the connection. However, if the connection remains up with a valid IP, but has stopped transmitting data, then this script would just not work. -1 for having an echo in an automated (cron'd) script. – Jim Jan 18 at 16:52
3

"Reload the Driver"

Find the module name

Let's find the name of the kernel module for your wireless connection:

sudo hwinfo --network

(Install package hwinfo if you don't have it.)

Look for the module name in the "Driver" line.

Reload the module

Now unload then re-load the module. For example, my module name is iwlwifi

You might get lucky, but most probably you will get this failure message:

$ sudo modprobe -r iwlwifi
modprobe: FATAL: Module iwlwifi is in use.

So we go looking for other modules using iwlwifi:

$ lsmod |grep iwlwifi
iwlwifi               241664  1 iwldvm
cfg80211              765952  4 iwldvm,iwlwifi,mac80211,rtl8187

On the left is the module name, and on the right are the other modules using it. So let's try disabling iwldvm first:

$ sudo modprobe -r iwldvm

If this works, then we can now successfully disable iwlwifi

$ sudo modprobe -r iwlwifi

And now re-enable both modules in the reverse order:

$ sudo modprobe iwlwifi
$ sudo modprobe iwldvm

Done!

This is the only procedure that worked for me in resetting low lelel settings (frag, rate) that I had set using iwconfig.

What it does effectively is "reload the driver".

0

The workaround using "systemctl restart NetworkManager" works for me on two different notebooks with Broadcom and Atheros WiFi under Debian Buster and Ubuntu 19.04 - where the problem with "wifi won't wake up on resume" happens on every fourth resume or so (= it typically works just fine.) I've first tried creating a desktop launcher to invoke the wifi reset manually, which works, and requires a password - but then I found several notes by people putting the reset curse into places in the system that run scripts after resume. Namely, /lib/systemd/system-sleep/ looks like a good place to put your script. And, the script should better test some conditions (obtained via cmdline arguments) to know that it's the right time to reset the NetworkManager. Apologies for linking instead of cutting and pasting - I haven't asked this particular author's permission, and he may enjoy upvotes too, for his YouTube contribution (straight to the point, and well narrated).

Other than that, I've noticed some very simple and direct solutions to the original problem from Ubuntu 16.04: wifi.scan-rand-mac-address=no in NetworkManager.conf or even just apt-get update && apt-get upgrade . Those are the optimal solution to the particular bug in 16.04. They possibly are not a solution to other misc problems of this kind, that can be worked around by the heavy-handed (but fairly swift) restart of NetworkManager on every resume from suspend.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.