web-dev-qa-db-fra.com

Comment puis-je faire en sorte qu'Empathy réessaye de se connecter en cas de problème de réseau

J'ai ajouté Empathy à la liste des applications qui s'ouvrent par défaut, et il est configuré pour se connecter automatiquement à MSN au démarrage, mais lorsque je me connecte à mon ordinateur portable, la connexion wifi prend quelques secondes pour être prête. Avant que le net ne soit activé, Empathy a déjà démarré, a essayé de se connecter à MSN et a échoué, et je n'arrive pas à le faire se connecter après cela.

Cela semble être un bogue dans Empathy, mais comment puis-je obtenir un correctif pour cela, ou si ce n'est pas possible, comment puis-je retarder son démarrage jusqu'à ce que le réseau soit en place?

9
Ricardo Reyes

Apparemment, c'est un bogue connu dans Empathy, j'ai donc décidé de lancer Empathy à partir d'un script qui vérifie si le réseau est en place (connexion à http://www.google.com , le vrai battement de cœur d'Internet :) Si le réseau ne fonctionne pas, il dormira pendant 5 secondes et réessayera jusqu'à ce qu'il ait essayé 30 fois

Ceci est le script (nommé 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

et voici comment je le lance depuis le menu "Applications de démarrage":

~/scripts/waitfornet.py empathy
6
Ricardo Reyes

On dirait qu'Empathy peut avoir besoin d'un patch pour faire ce genre de chose en interne. Mais vous devriez pouvoir pousser Empathy à faire la bonne chose en vous déconnectant de votre réseau et en vous reconnectant.

J'ai apparemment eu des bugs avec Empathy refusant la connexion à un tas de réseaux à différents moments. Mais il devrait donner un compte à rebours "Réessayera dans X secondes."

Mais cela prendra du code et si vous le souhaitez, un rapport de bogue doit être fait.

2

J'ai écrit n script spécialement pour surmonter ce problème . Ce script (qui est basé sur python et D-Bus) connectera l'empathie au réseau à chaque fois que le réseau est en ligne. Même si la connexion s'éteint et se reconnecte, le script se reconnectera automatiquement empathie à nouveau.

J'espère que vous l'apprécierez. Veuillez laisser un commentaire si vous avez besoin d'améliorations.

1