There is a way to start script after Network Manager gets a connection, but it requires some python scripting.
Not very elegant: separate process that waits for network connection to be established to run some scripts.
This functionality should be built-in in NM - but I had something like this working:
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import gobject, dbus
from dbus.mainloop.glib import DBusGMainLoop
import os
# what to do on network device activation
def on_device_now_active(*args):
obj_path = args[0]
net_name = args[1]
#print "obj_path", obj_path
#print "net_name", net_name
if obj_path.endswith("eth1") and (net_name == "home_network"):
#print "Connected to:", net_name
#print
os.system("pon myvpn")
#os.system("skype &") # run skype in background
# dbus events will be part of glib message loop
DBusGMainLoop(set_as_default=True)
# attach to D-BUS system bus and wait for DeviceNowActive event
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.NetworkManager',
'/org/freedesktop/NetworkManager')
proxy.connect_to_signal("DeviceNowActive", on_device_now_active)
# program main loop - waits for events and dispatches handlers
loop = gobject.MainLoop()
loop.run()
but I actually didn't put it in desktop startup. Nevertheless, from console it works as expected.
This code needs validating parameters for handler (I dunno if f.e. net_name is available for wired network).
Bookmarks