Gnome Shell JS - прослушивает сигнал DBus на интерфейсе для любого пути

Я пытаюсь написать расширение, которое прослушивает сигнал DBus, но заранее не знаю пути. На самом деле, существует несколько путей (уникальных для каждого приложения, которое реализует интерфейс). Кажется, нет никакого способа определить путь заранее (т. Е. При запуске приложения), поэтому я остаюсь с прослушиванием сигнала, который излучается при отправке определенной команды DBus. Что я действительно ищу, так это GJS-эквивалент решения Python для этого вопроса. К сожалению, различные прокси-серверы DBus не допускают null или undefined в качестве значений для пути, как это делает библиотека Python. Я также попытался использовать imports.dbus.session.watch_signal, который получает все излучаемые сигналы, но не дает мне способа привязать отправителя к определенному сигналу.

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

2 ответа

Старый вопрос, но он помог мне найти: Gio.DBusSignalCallback

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

Я незнаком с GJS (определенно стоит посмотреть), однако, если есть интерфейс командной строки GJS, тогда dbus-monitor может отслеживать d-шину по любому атрибуту сообщения.

Цитируя man dbus-monitor:

EXAMPLE
       Here  is an example of using dbus-monitor to watch for the gnome typing
       monitor to say things

         dbus-monitor "type='signal',                          \
                       sender='org.gnome.TypingMonitor',       \
                       interface='org.gnome.TypingMonitor'"

и

   In order to get dbus-monitor to see the messages you are interested in,
   you should specify a set of watch expressions as you would expect to be
   passed to the dbus_bus_add_match function.

и цитируя D-Bus: API шины сообщений: функция dbus_bus_add_match :

[ 112]

Обратите внимание, что отправитель идентифицирован в выходных данных следующих

Проблема слишком большого количества выходных данных из

         dbus-monitor "type='signal'"

, таких как

...
signal sender=:1.47 -> dest=(null destination) serial=1679 path=/org/ayatana/bamf/application311805604; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
   string "org.ayatana.bamf.view"
   array [
      dict entry(
         string "Active"
         variant             boolean true
      )
   ]
   array [
   ]
...
signal sender=:1.51 -> dest=com.canonical.Unity.Panel.Service serial=1674 path=/com/canonical/Unity/Panel/Service; interface=com.canonical.Unity.Panel.Service; member=ReSync
   string "libappmenu.so"
...
signal sender=:1.51 -> dest=com.canonical.Unity.Panel.Service serial=1681 path=/com/canonical/Unity/Panel/Service; interface=com.canonical.Unity.Panel.Service; member=ReSync
   string "libdatetime.so"
...

могут быть удалены или с помощью комбинаций:

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

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

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