[Dextrose] Some learning

Ajay Garg ajaygargnsit at gmail.com
Fri Mar 2 22:46:33 EST 2012


Hi all.

I have written a very basic python program, that utilizes Networkmanager
dbus-apis, to detect addition/removal of network devices.
It's working as expected, when I insert a 3G USB modem (both addition and
removal callbacks are hit as expected).

However, when I try this with

a. Inserting/Removing a wired network jack
b. Enable/Disable Wireless from the Dell Keyboard
c. On/Off the wireless modem-cum-router-cum-accesspoint

neither of the callbacks is hit.


Following is the program (in whole; can be cut and paste)::

=========================================================================================================
"""

This program notifies the addition and removal of a network device.
Device types tested ::

a. 3G Modem (Idea 3G HSPDA Net Setter)
   ------------------------------------

   Done via plugging/unplugging the USB.


:( :( :(
I have not been able to test add/removal of wifi-device, or even a
wired device.

"""

import dbus
from dbus.mainloop.glib import DBusGMainLoop

DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()

"""
The names have been designed, keeping in consistency of the
nomenclature used in "add_signal_receiver" method.
"""
NM_BUS_NAME                    = 'org.freedesktop.NetworkManager'
NM_PATH                        = '/org/freedesktop/NetworkManager'
NM_DBUS_INTERFACE              = 'org.freedesktop.NetworkManager'

"""
Note that the following is not specifically tied to Network Manager.
"""
DBUS_PROPS_DBUS_INTERFACE      = 'org.freedesktop.DBus.Properties'

"""
Some more :)
"""
NM_DEVICE_DBUS_INTERFACE       = 'org.freedesktop.NetworkManager.Device'
NM_WIFI_DEVICE_INTERFACE       =
'org.freedesktop.NetworkManager.Device.Wireless'
NM_ACCESS_POINT_DBUS_INTERFACE =
'org.freedesktop.NetworkManager.AccessPoint'


def get_device_object(device_path):
    device_obj = bus.get_object(NM_BUS_NAME, device_path)
    return device_obj

def get_device_type(device_path):
    device_obj = get_device_object(device_path)
    props_interface = dbus.Interface(device_obj,
                                     DBUS_PROPS_DBUS_INTERFACE)
    device_type = props_interface.Get(NM_DEVICE_DBUS_INTERFACE,
'DeviceType')
    return device_type

def __device_added_cb(device_path):
    device_type = get_device_type(device_path)
    print 'new device added of type :: ' + str(device_type)
    print 'new device path          :: ' + device_path

def __device_removed_cb(device_path):
    print 'device removed (with path) :: ' + device_path

def listen():
    try:
        bus = dbus.SystemBus()
        obj = bus.get_object(NM_BUS_NAME, NM_PATH)
        netmgr = dbus.Interface(obj, NM_DBUS_INTERFACE)
    except dbus.DBusException:
        logging.debug('%s service not available', NM_BUS_NAME)
        return

    bus.add_signal_receiver(__device_added_cb,
                            signal_name='DeviceAdded',
                            dbus_interface=NM_DBUS_INTERFACE)
    bus.add_signal_receiver(__device_removed_cb,
                            signal_name='DeviceRemoved',
                            dbus_interface=NM_DBUS_INTERFACE)



listen()

import gobject
gobject.MainLoop().run()
=========================================================================================================


I will be grateful for any hints, as to what is going wrong.


Looking forward to a reply.


Regards,
Ajay
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sugarlabs.org/archive/dextrose/attachments/20120303/29178bb8/attachment-0001.html>


More information about the Dextrose mailing list