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