2012-02-03 3 views
3

Я хочу предоставить методы и сигналы dbus на пользовательской шине (т. Е. Не SessionBus или SystemBus). Если я запустить тестовую копию Dbus-демона из командной строки, как описано в dbus-daemon man page, например, так:Как экспортировать объект на пользовательский dbus с помощью Python?

 
dbus-daemon --session --print-address 

тогда это возвращает, например, адрес:

 
unix:abstract=/tmp/dbus-vthAiAw4am,guid=60da6b6ef244a0dbdb9710a800002218 

я могу использовать этот адрес в d-foot для «Подключиться к другой шине», и там ничего нет. Теперь я хотел бы получить имя на этой шине и экспортировать объекты, чтобы предоставить методы и сигналы dbus с помощью Python. Я пробовал читать код позади dbus.service.BusName, где я бы обычно проходил сессию или системную шину, но я просто теряюсь. Кто-нибудь знает, как это сделать (если возможно)?

ответ

3

Рассмотрение исходного кода для d-feet было, конечно, более легким способом найти ответ, чем просмотр всей библиотеки dbus-python. Адрес, как в вопросе может быть использован, когда претендуя на имя шины, путем передачи в dbus.bus.BusConnection объекта с адресом в качестве аргумента, например, так:

 
bus_name = dbus.service.BusName('my.testbus.test', 
    dbus.bus.BusConnection('unix:abstract=/tmp/dbus-vthAiAw4am')) 

я могу после этого методы экспорта и испускать сигналы на этой шине ,