93

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.

3
  • Similar problem, only it happens after restoring from suspend or hibernate, the internal PCI wifi disappears... none of these tricks here will revive it... although, if I add a usb wifi - for some reason that has no such issue - weird. Driver for PCI wifi is the infamous "iwl3945" (Gateway laptop) which has this stupid bug but nobody ever fixes/supports/whatever. Workaround? just forget stupid linux wifi and just plug network cable into wifi extender to laptop and hope ubuntu 'community' eventually fixes this driver that crashes on suspend/hibernate ;-\. On win7 partition no such issue w/wifi
    – The MAJOR
    Aug 8 at 17:45
  • addenda: gateway w/ubuntu20.04lts and win7 64bit laptop
    – The MAJOR
    Aug 8 at 17:52
  • actually - no issue using hibernate - wifi stays stable.. but use suspend and it will work once or twice on resume, but when it goes out it stays out until reboot...
    – The MAJOR
    Aug 9 at 23:20

8 Answers 8

153

You just need to restart Network Manager:

sudo service network-manager restart
6
  • 12
    On newer versions of Ubuntu, it might (depending on whether the system is using systemd) be better to use sudo systemctl restart NetworkManager. Dec 11, 2016 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, 2017 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, 2017 at 13:56
  • This one does not work for me (Dell Inspiron 9400)
    – Hibou57
    Sep 30, 2017 at 10:55
  • adding just service network-manager restart to a desktop file or shortcut works nicely (asks for pass anyway)
    – user47206
    Oct 7, 2017 at 9:58
32

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
3
  • 6
    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, 2017 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, 2018 at 15:40
  • 1
    -1. WiFi didn't work anymore after running these commands on Ubuntu 20.04. Had to reboot.
    – Sumit
    Dec 12, 2020 at 12:22
22

Try this:

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

"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 with no error message, in which case you can immediately reload it with

$ sudo modprobe iwlwifi

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 level settings (frag, rate) that I had set using iwconfig.

What it does effectively is "reload the driver".

1
  • 1
    Thanks! It's the only solution I've found works, tried the others above and elsewhere, so details in case it can help others find this answer: Running Debian 10.9 (32-bit) on Asus T100. My problem is, the WiFi connection drops, when it tries to recover it can see other more distant wifi routers, but not mine. Running the commands to stop and restart device, in my case "brcmfmac", resets and it comes back working. This can confuse some running programs (e.g. Pidgin) so I shut them down first. In my case just the first command and immediate restart works [made minor edit to clarify this] Jul 9, 2021 at 22:15
7

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.

1
  • 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, 2017 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
  • +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, 2019 at 16:52
1

As @TSJNachos117 mentions in their comment, for versions from 15.04 onwards, Ubuntu switched to systemd as the service manager. So, one can use the following command, equivalent to the one in Radu Rădeanu's answer, to restart the Network Manager service:

sudo systemctl restart NetworkManager
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.

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