2010-09-23 7 views
1

j'ai écrit un script qui se connecte au bus de la session d-bus sur un ordinateur distant comme ceci:plusieurs objets de bus de la session d-bus en python

os.environ["DBUS_SESSION_BUS_ADDRESS"] = "tcp:host=192.168.0.1,port=1234" 
bus = dbus.SessionBus() 

Cela fonctionne très bien sauf que maintenant je dois être en mesure se connecter à plusieurs bus de session sur différents ordinateurs. Je l'ai essayé ce qui suit:

os.environ["DBUS_SESSION_BUS_ADDRESS"] = "tcp:host=192.168.0.1,port=1234" 
bus1 = dbus.SessionBus() 
os.environ["DBUS_SESSION_BUS_ADDRESS"] = "tcp:host=192.168.0.2,port=1234" 
bus2 = dbus.SessionBus() 

Mais cela ne fonctionne pas. Le deuxième appel à SessionBus renvoie le même objet que le premier appel. c'est à dire. dans ce cas, les deux objets se réfèrent au bus de session sur 192.168.0.1. Il semble que seul le premier appel à SessionBus fasse quoi que ce soit et tous les appels suivants renvoient simplement l'objet qui a été créé lors du premier appel. Est-ce que quelqu'un sait un moyen de contourner cela?

Répondre

2

C'est une question confuse rétrospectivement. Il n'y a pas de différence fondamentale entre un bus de session, un bus système ou tout autre bus d-bus. Si vous voulez vous connecter à un bus à une adresse particulière, utilisez simplement dbus.bus.BusConnection:

bus1 = dbus.bus.BusConnection("tcp:host=192.168.0.1,port=1234") 
bus2 = dbus.bus.BusConnection("tcp:host=192.168.0.2,port=1234") 
0

farfouillé dans la source Python/DBUS, je remarque que dans _dbus.py, SessionBus.__new__ prend un paramètre booléen private:

`private` : bool 
    If true, never return an existing shared instance, but instead 
    return a private connection. 

Est-ce bus = dbus.SessionBus(private=True) faire une différence?

+0

Merci. Ça va prendre quelques jours avant que j'aie l'occasion de le tester maintenant, mais ça semble prometteur. – Shum

+0

N'a pas fonctionné malheureusement. Les deux objets bus communiquent toujours avec la même adresse IP. – Shum