How can I make Empathy retry connecting when it has a network problem

Solution 1:

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

Solution 2:

It sounds like Empathy may need a patch to do this kind of thing internally. But you should be able to poke Empathy to do the right thing by disconnecting from your network and reconnect.

I've seemingly had bugs with Empathy refusing the connect to a bunch of networks at various times. But it should give a count down "Will retry in X seconds."

But that will take code and if you want it, a bug report needs to be made.

Solution 3:

I wrote a script specifically to overcome this problem. This script (which is based on python and D-Bus) will connect empathy to the network every time when the network is online. Even if the connection goes down and reconnects, the script will automatically reconnect empathy again.

Hope you'll enjoy it. Please leave a comment if you need any improvements.