Как получить прокси для объекта DBus, который не известен?

Я пытаюсь использовать dbus для реакции на конкретный сигнал (пользователь нажимает на appindicator меню на верхней панели единицы). От использования dbus-монитора я нашел соответствующий сигнал, что я хотел бы реагировать на:

sender=:1.96 -> dest=:1.232 serial=2091 path=/org/ayatana/NotificationItem/myapp/Menu; interface=com.canonical.dbusmenu; member=AboutToShowGroup
array [
   int32 9
]

Затем мой план состоял в том, чтобы сделать следующее с Python:

dbus_proxy = bus.get_object ("BUS.NAME", "PATH")
interface = dbus.Interface (proxy, "INTERFACE")
interface.connect_to_signal ("SIGNAL", my_function)

def my_function:
    # react 

Для понимания dbus я использовал следующие две статьи: учебное руководство dbus-python и Как считать вывод dbus-монитора?

Однако я немного смущен, относительно каких значений я должен использовать для названия шины, пути, интерфейса и сигнала в моем коде. Я попытался ввести по абсолютному адресу вокруг в qdbus для разработки правильных значений, но я, может казаться, не нахожу то, что я ищу. Я думаю, что был отброшен, потому что get_object требует "известного" имени, но все, что я имею, является числовыми уникальными идентификаторами для отправителя, dest.

Любое пошаговое перемещение в правильном направлении значительно ценилось бы.

3
задан 13 April 2017 в 15:23

1 ответ

Функцию add_signal_receiver можно использовать без указания имени шины. Это может быть полезно для захвата сигналов, когда имя шины, интерфейс или конкретное имя сигнала неизвестны.

session_bus = dbus.SessionBus()

session_bus.add_signal_receiver(self.do_something,
                                signal_name=None,
                                dbus_interface=None,
                                bus_name=None, 
                                path=None)

Приведенный выше код вызывает метод do_something каждый раз, когда сигнал принимается на шине сеанса.

В своем первоначальном вопросе я заявил, что хочу ответить на «AboutToShowGroup». Однако после более тщательного изучения интерфейса com.canonical.dbusmenu я понял, что на самом деле это метод, а не сигнал. С тех пор я выбрал другой сигнал для реагирования.

0
ответ дан 13 April 2017 в 15:23

Другие вопросы по тегам:

Похожие вопросы: