Previously I was having problems with Ubuntu dropping wifi connections and failing to reconnect, to solve this I wrote a script which would kill the network-manager and then connect using iwconfig commands (here). While this works fine, it felt a little hacky, having to have a script running as sudo constantly in the background checking for a dropped connection. After a little searching I came across cron (the time based job scheduler ) and /etc/rc.local (a script which is run after all other initialization scripts have ran, allowing for scripts to be ran on startup) so from this I decided to split the old script up into connection and checking scripts which could be ran from init.d/local and cron, respectively.
Firstly my startup script in /etc/init.d/local which sets up and connects to the wireless network, open the file as sudo:
sudo gedit /etc/rc.local
Paste in the following:
#! /bin/sh
service network-manager stop && service networking stop
iwconfig wlan0 essid NETWORKNAME
iwconfig wlan0 key WEPKEY
ifconfig wlan0 up
dhclient3 wlan0
sleep 10
if iwconfig wlan0 | grep -o "Access Point: Not-Associated"
then
ifconfig wlan0 down
sleep 10
ifconfig wlan0 up
fi
exit 0
Next the script for checking the network is still connected, if not attempt to reconnect (named wirelesscheck.sh):
#!/bin/bash
if iwconfig wlan0 | grep -o "Access Point: Not-Associated"
then
ifconfig wlan0 down
sleep 10
ifconfig wlan0 up
fi
Make sure this script is executable (from the directory of the script):
chmod +x wirelesscheck.sh
Note: This is setup in the sudo crontab, only because this command needs root privileges – other commands could be added to a user crontab (by removing sudo from the following.)
Now, edit (-e) the crontab for sudo:
sudo crontab -e
If crontab has not previously been used choose an editor (I used nano – 2) and append this line to the bottom of the file and change the frequency and directory of the script. The current settings will run it every 5 minutes (*/5) every hour, day, month and year and the file is located in “/path/to/script/wirelesscheck.sh”.
*/5 * * * * /path/to/script/wirelesscheck.sh
If you have any issues, leave a comment and I will help if I can.