用于e NetworkManager VPN连接的dbus信号处理程序

Joã*_*nto 5 python linux dbus

我需要开发一些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
      )
   ]
Run Code Online (Sandbox Code Playgroud)

现在我需要识别相应的信号处理程序调用签名:

bus.add_signal_receiver(
   handler_name_in_your_program,
   "signal_name",
   "interface_name",
   "connection_name",
   "object_name"
Run Code Online (Sandbox Code Playgroud)

)

有人可以帮助我将dbus-monitor跟踪输出转换为总线sginal处理程序的相应函数值吗?

Joã*_*nto 7

我弄清楚了:

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")
Run Code Online (Sandbox Code Playgroud)