Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/udisks_test.py
blob: d4e06324badb1f80544d81d848032ec367004f96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# From http://moserei.de/2010/01/08/accessing-devicekit-with-dbus-and-python.html


import dbus
import gobject
from dbus.mainloop.glib import DBusGMainLoop

def get_props_from_device(device):
    # http://hal.freedesktop.org/docs/udisks/Device.html
    device_obj = bus.get_object('org.freedesktop.UDisks', device)
    device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE)
    props = {}
    props['mounted'] = device_props.Get('org.freedesktop.UDisks.Device',
            'DeviceIsMounted')
    if props['mounted'] > 0:
        props['mount_path'] = device_props.Get('org.freedesktop.UDisks.Device',
                'DeviceMountPaths')[0]
        props['removable'] = device_props.Get('org.freedesktop.UDisks.Device',
                'DriveCanDetach')
        props['label'] = str(device_props.Get('org.freedesktop.UDisks.Device',
                'IdLabel'))
        return props        
    return None

def device_changed_callback(device):
    print 'Device %s was changed' % (device)
    props = get_props_from_device(device)
    if props is not None:
        print 'Device was mounted in %s label %s' % (props['mount_path'], props)
        devices[device] = props
    else:
        if device in devices:
            props = devices[device]
            print 'Device was unmounted from %s' % props['mount_path']
            del devices[device]


#must be done before connecting to DBus
DBusGMainLoop(set_as_default=True)

bus = dbus.SystemBus()
proxy = bus.get_object("org.freedesktop.UDisks", 
                       "/org/freedesktop/UDisks")
iface = dbus.Interface(proxy, "org.freedesktop.UDisks")

print "Devices:"

devices = {}

for device in proxy.EnumerateDevices():
    props = get_props_from_device(device)
    if props is not None:
        print 'Device props %s' % props
        devices[device] = props


iface.connect_to_signal('DeviceChanged', device_changed_callback)

#start the main loop
mainloop = gobject.MainLoop()
mainloop.run()