Main menu:

Site search

Categories

août 2010
L M M J V S D
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Archive

Un bug dans le screenlet sysmonitor

Si vous utilisez les Screenlets pour agrémenter votre desktop, vous aurez peut-être remarqué que le Screenlet Sysmonitor n’affiche pas l’adresse IP de votre PC.

Screenlets

La cause de ce bug se trouve dans le fichier /usr/share/pyshared/screenlets/sensors.py. Le code litigieux est affiché ci-dessous et vous pouvez voir que cette fonction, sensée retourner l’adresse IP de votre PC, utilise la commande ifconfig:

def net_get_ip(): # by Whise
    """Returns ip if it can"""
    ip = commands.getoutput("ifconfig")
    x = 0
    while True:
        ip = ip[ip.find("inet addr:"):]
        ip = ip[10:]
        ipc = ip[:ip.find(chr(32))]
        if ipc != '127.0.0.1' and ipc != None and ipc !='1': 
            return ipc
    return _('Cannot get ip')

La commande ifconfigqui vous donne l’état et la configuration de vos interfaces réseau retourne un string de données ressemblant à celui-ci:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:25:b3:c0:b6:86  
          inet adr:10.224.66.135  Bcast:10.224.66.255  Masque:255.255.255.0
          adr inet6: fe80::225:b3ff:fec0:b686/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Packets reçus:34235 erreurs:0 :0 overruns:0 frame:0
          TX packets:23840 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:100 
          Octets reçus:33282663 (33.2 MB) Octets transmis:3990859 (3.9 MB)
          Mémoire:98400000-98420000 

Or, la fonction net_get_ip() recherche la chaîne de caractères contenant inet addr pour localiser l’adresse IP. Le seul problème c’est que cette chaîne de caractères est introuvable dans ce que retourne la commande ifconfig à cause d’un d de trop. La chaîne de caractères est en effet inet_adr et non pas inet_addr.

Pour contourner le bug en attendant qu’une mise à jour corrige le problème, vous pouvez éditer le fichier /usr/share/pyshared/screenlets/sensors.py et modifier le fichier vous même:

$ gksudo gedit /usr/share/pyshared/screenlets/sensors.py

Changez les lignes concernées pour qu’elles soient semblables à ceci:

        ip = ip[ip.find("inet adr:"):]
        ip = ip[9:]

Sauvez le fichier et dans le gestionnaire de Screenlets, cliquez sur le bouton Tout redémarrer. L’adresse IP doit maintenant apparaître.
Notez que j’ai signalé ce bug sur Launchpad.