несколько объектов шины D-Bus в Python - PullRequest
1 голос
/ 23 сентября 2010

Я написал скрипт, который подключается к сеансной шине d-bus на удаленном компьютере, например:

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

Это прекрасно работает, за исключением того, что теперь мне нужно иметь возможность подключаться к нескольким шинам сеансов на разных компьютерах. Я пробовал следующее:

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()

Но это не работает. Второй вызов SessionBus возвращает тот же объект, что и первый вызов. то есть. в этом случае оба объекта ссылаются на шину сеанса на 192.168.0.1. Кажется, что только первый вызов SessionBus действительно что-то делает, и все последующие вызовы просто возвращают объект, который был создан при первом вызове. Кто-нибудь знает способ обойти это?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Это запутанный вопрос в ретроспективе.Нет принципиальной разницы между сессионной шиной, системной шиной или любой другой шиной d-bus.Если вы хотите подключиться к шине по определенному адресу, просто используйте 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 голосов
/ 23 сентября 2010

Бродя по источнику Python / DBUS, я замечаю, что в _dbus.py, SessionBus.__new__ принимает логический параметр private:

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

Имеет ли значение bus = dbus.SessionBus(private=True) разницу?

...