Ubuntu – How to make Empathy retry connecting when it has a network problem

empathystartup

I have added Empathy to the list of applications that open by default, and it's configured to auto-connect to MSN when started, but when I login to my laptop the wifi connection takes a few seconds to be ready. Before the net is up, Empathy has already started, tried to login to MSN and failed, and I can't get it to connect after that.

This seems to be a bug in Empathy, but how can I get a fix for it, or if not possible, how can I delay its start until the network is up?

Best Answer

Apparently this is a known bug in Empathy, so I decided to launch Empathy from a script that checks if the network is up (connecting to http://www.google.com, internet's true heartbeat :) If the network is not working, it will sleep for 5 seconds and retry, until it tried 30 times

This is the script (named waitfornet.py)

#!/usr/bin/python

from urllib2 import urlopen, URLError
from subprocess import Popen
from time import sleep
from sys import argv

MAX_TRIES = 30
DELAY = 5

if len (argv) < 2:
    print ('Check for network connectivity and run a command once the net is up')
    print ('Tries up to %d times waiting %d seconds between each try' % (MAX_TRIES, DELAY))
    print ('\nUSAGE: python waitfornet.py <command to run>')
else:
    while True:
        MAX_TRIES -= 1
        if MAX_TRIES < 0:
            raise ValueError ('Reached the max iteration count and the net is still down')

        try:
            data = urlopen('http://www.google.com')
        except URLError:
            # if there's a problem connecting to google, that must mean
            # that the net is still down, so sleep 5 seconds and try again
            print ('Internet is down... retrying...')
            sleep (DELAY)
            continue

        # if you got here it means that the urlopen succeded
        pid = Popen([argv[1], ' '.join(argv[1:])]).pid
        break

and this is how I launch it from the "Startup Applications" menu:

~/scripts/waitfornet.py empathy