class MounterDesklet(object):
def __init__(self, config, basedir):
self._show_free_space = self.config['show_free_space']
def toggleMount(self):
f = open("/etc/mtab")
mtab = f.read()
f.close()
if self.config['use_sudo']:
sudo_prefix = "sudo "
else:
sudo_prefix = " "
if find(mtab, self.config['mount_point'])!=-1:
popen(sudo_prefix+"umount "+self.config['mount_point'])
else:
popen(sudo_prefix+"mount "+self.config['mount_point'])
self.display()
... 'use_sudo': True}
cfg_default = { 'mounted_icon': 'cdrom_mount.png',
...
'filemanager': 'rox',
'use_sudo': False }
username LOCALHOST= NOPASSWD: /bin/mount /mnt/cdrom ,/bin/umount /mnt/cdrom
/dev/usbkey /mnt/usbkey auto noauto,user 0 0
id3 = {'caption_font': 'VeraBd',
'caption_font_color': '666666',
'caption_font_size': 12,
'custom_caption': 'CDROM',
'delay': 60,
'filemanager': 'rox',
'filemanager_on_click': False,
'free_space_color': 'AAFFAA',
'free_space_width': 8,
'icon_height': 64,
'icon_width': 64,
'mount_point': '/mnt/cdrom',
'mounted_icon': 'cdrom_mount.png',
'padding': 4,
'show_free_space': True,
'unmounted_icon': 'cdrom_unmount.png',
'use_custom_caption': False
'caption_font': 'VeraBd',
'caption_font_color': '666666',
'caption_font_size': 12,
'custom_caption': 'Flash Drive',
'delay': 60,
'filemanager': 'rox',
'filemanager_on_click': False,
'free_space_color': 'AAFFAA',
'free_space_width': 8,
'icon_height': 64,
'icon_width': 64,
'mount_point': '/mnt/flash',
'mounted_icon': 'usbdisk_mount.png',
'padding': 4,
'show_free_space': True,
'unmounted_icon': 'usbdisk_unmount.png',
'use_custom_caption': False}
Traceback (most recent call last):
File ".desklets/mounter-0.3.0/mounter.py", line 227, in ?
Events(dirname(__file__)).pause()
File ".desklets/mounter-0.3.0/mounter.py", line 181, in __init__
adesklets.Events_handler.__init__(self)
File "/usr/lib/python2.3/site-packages/adesklets/events_handler.py", line 157, in __init__
self.ready()
File ".desklets/mounter-0.3.0/mounter.py", line 190, in ready
join(self.basedir,'config.txt'))
File ".desklets/mounter-0.3.0/mounter.py", line 44, in __init__
adesklets.ConfigFile.__init__(self,id,filename)
File "/usr/lib/python2.3/site-packages/adesklets/configfile.py", line 159, in __init__
self._load_and_save()
File "/usr/lib/python2.3/site-packages/adesklets/configfile.py", line 202, in _load_and_save
all= ConfigImport.load(buf[:])
File "/usr/lib/python2.3/site-packages/adesklets/configfile.py", line 41, in __call__
return dict(self._group(
File "/usr/lib/python2.3/compiler/transformer.py", line 50, in parse
return Transformer().parsesuite(buf)
File "/usr/lib/python2.3/compiler/transformer.py", line 120, in parsesuite
return self.transform(parser.suite(text))
File "<string>", line 25
'caption_font': 'VeraBd',
^
SyntaxError: invalid syntax
'use_custom_caption': False
--- mounter-orig.py 2005-08-01 16:05:29.903782616 +0200
+++ mounter.py 2005-08-01 16:04:33.580345080 +0200
@@ -40,7 +40,9 @@
'filemanager_on_click': False,
'filemanager': 'rox',
'mount_command': 'mount',
- 'unmount_command': 'umount' }
+ 'unmount_command': 'umount',
+ 'ejectable': True,
+ 'eject_command': 'eject'}
def __init__(self,id,filename):
adesklets.ConfigFile.__init__(self,id,filename)
@@ -80,6 +82,10 @@
adesklets.menu_add_item('Toggle_Mount')
else:
adesklets.menu_add_item('Filemanager')
+
+ if self.config['ejectable']:
+ adesklets.menu_add_item('Eject')
+
adesklets.window_show()
def display(self):
@@ -168,6 +174,10 @@
popen(self.config['mount_command']+" "+self.config['mount_point'])
self.display()
+ def eject(self):
+ popen(self.config['eject_command'] +" "+ self.config['mount_point'])
+
+
#-----------------------------------------------------------------------------
class Events(adesklets.Events_handler):
@@ -214,6 +224,9 @@
self._execute(self.config['filemanager'] + " " + self.config['mount_point'])
if item=='Toggle_Mount':
self.mounter_desklet.toggleMount()
+ if item=='Eject':
+ self.mounter_desklet.eject()
+
def button_press(self, delayed, x, y, button):
if self.config['filemanager_on_click']:
close failed: [Errno 10] No child processes
Traceback (most recent call last):
File "./mounter.py", line 235, in ?
Events(dirname(__file__)).pause()
File "/usr/lib/python2.4/site-packages/adesklets/events_handler.py", line 228, in pause
posix_signal.pause()
File "/usr/lib/python2.4/site-packages/adesklets/events_handler.py", line 214, in _fire_event
[x for x in
File "./mounter.py", line 228, in button_press
self.mounter_desklet.toggleMount()
File "./mounter.py", line 175, in toggleMount
self.display()
File "./mounter.py", line 141, in display
free_space_height = int((window_height-2) * self.__getFreeSpacePercentage())
File "./mounter.py", line 161, in __getFreeSpacePercentage
df_output = popen("df -h "+self.config['mount_point']).readlines()
IOError: [Errno 4] Interrupted system call
/dev/scd0 /mnt/cdrecorder iso9660 ro,user,noauto,unhide 0 0