Обработчик сигнала dbus для VPN-соединения e NetworkManager - PullRequest
5 голосов
/ 09 декабря 2010

Мне нужно разработать некоторый код Python, который будет выполняться, когда будет установлено VPN-соединение, VPN управляется из NetworkManager, я пытаюсь понять, как использовать для этого событие NM DBUS.

Используя "dbus-monitor --system", я смог определить сигнал подключения:

signal sender=:1.1 -> dest=(null destination) serial=464 path=/org/freedesktop/NetworkManager/ActiveConnection/3; interface=org.freedesktop.NetworkManager.VPN.Connection; member=PropertiesChanged
   array [
      dict entry(
         string "VpnState"
         variant             uint32 5
      )
      dict entry(
         string "State"
         variant             uint32 2
      )
   ]

Теперь мне нужно идентифицировать соответствующий обработчик сигнала, вызывающий подпись:

bus.add_signal_receiver(
   handler_name_in_your_program,
   "signal_name",
   "interface_name",
   "connection_name",
   "object_name"

)

Может ли кто-нибудь помочь мне перевести вывод трассировки dbus-monitor в соответствующие значения функции для обработчика шины sginal?

1 Ответ

7 голосов
/ 10 декабря 2010

Я смог понять это:

def vpn_connection_handler(*args, **keywords):
    state = args[0].get('State',0)
    if state == 2:
        # On connect code goes here

system_bus.add_signal_receiver(vpn_connection_handler,
    dbus_interface="org.freedesktop.NetworkManager.VPN.Connection",
        signal_name="PropertiesChanged")
...