网络管理器VPN连接的dbus信号处理器

5 投票
1 回答
2151 浏览
提问于 2025-04-16 08:18

我需要写一些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的跟踪输出转换成对应的总线信号处理函数的值?

1 个回答

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")

撰写回答