Automatically reconnect wireless connection

The wireless connection in my house unfortunately often disappears, requiring a wireless router reboot.

Making this worse is that my ubuntu media pc, does not automatically reconnect to the wireless network when it's been gone, and then comes up about a minute later. The network in question is setup as "connect automatically" in the network settings.

If I manually select my wireless network, using the wireless icon in the topright of my screen, everything works fine, until the next time that wireless goes down.

I'm looking for a way so I don't have to remember to do this manually all the time.


Solution 1:

This seems to be posted all over the net with no good solutions. I guess the best fix/workaround is to make it check for internet connectivity and if it is not there then reconnect. I did this via a ping test to google.com and then I simply made it restart networking. Code is not tested (the restart part and the cron part, if statement tested), so I'll just wait for it to disconnect at some point. I have an Ubuntu Server 12.10, so no GUI, and is a pain to connect monitor and keyboard every time the wireless stuffs up.

Cron part done via webmin so Idk much about it. Script is as follows:

# edited by dim_voly for networking restart on no pingback every 5 mins

#!/bin/bash
# Name of File: networkingCron
# Purpose: to check if the internet is up (via ping test to google) and if not, restart networking service
# this script is invoked via cron, ideally every 5 mins.

#check if there is internet via ping test
if ! [ "`ping -c 1 google.com`" ]; then #if ping exits nonzero...
   sudo service networking restart #restart the whole thing
   echo Networking service restarted due to no ping response from google.com
fi

echo Script 'networkingCron' completed, if no message above then there was no network restart.

# dunno how to restart the wifi only since that is the only active connection that server uses.

# also I don't think those echos go anywhere

Make sure to run as root and make sure the script has execute (u+x) permissions.

links:

  • https://help.ubuntu.com/community/CronHowto
  • Ping Test (StackOverflow)
  • Echo Output

Solution 2:

I had a similar problem with my laptop's Intel Wireless WiFi 5100 half height card and the driver iwlagn driver. This problem is a known issue with the iwlagn driver, and the best workaround is to disable 802.11n on the card.

To disable 802.11n on this card create/edit your /etc/modprobe.d/options.conf file:

sudo -H gedit /etc/modprobe.d/options.conf

And add the following to it.

options iwlagn 11n_disable=1 11n_disable50=1

Solution 3:

This is an alternative using service network-manager restart:

#!/usr/bin/env bash


# 1. copy this script into
# /usr/bin

# 2. change permissions
# root:/usr/bin# chmod +x checkwifi.sh 

# 3. add to cron as root
# sudo su
# crontab -e

# add this to check your wifi every minute
# * * * * * /usr/bin/checkwifi.sh

is_ok=$(/sbin/ifconfig wlp2s0 | /bin/grep inet\ addr -c)

if [ "$is_ok" -eq 0 ] ; then

    # restart
    /usr/sbin/service network-manager restart

    # wifi is ok
    /bin/echo $(date) "wifi was restarted" >> /user/user/Dropbox/wifi.log
    /bin/echo $(/sbin/ifconfig wlp2s0) >> /home/user/Dropbox/wifi.log

else

    # wifi is ok
    /bin/echo $(date) "wifi is ok" >> /home/user/Dropbox/wifi.log
    /bin/echo $(/sbin/ifconfig wlp2s0) >> /home/user/Dropbox/wifi.log

fi

Solution 4:

More modern version of @DougD script

#!/bin/bash    
wlan=$(/sbin/ifconfig wlan0 | grep inet\ addr -c)
if [ "$wlan" -eq 0 ]; then    
    /sbin/ifdown wlan0 && /sbin/ifup wlan0
else    
    echo interface is up    
fi