marceloufpa
(usa Ubuntu)
Enviado em 27/12/2010 - 13:01h
A tarefa está quase pronta. O script (anexo) de detecção e ejeção já está funcional, precisando apenas de alguns ajustes. Após isso proceder com a inclusão do mesmo para carregamento na sessão do usuário.
#problema principal: ícone do pendrive não é removido do desktop (falta fazer), e a pasta de drives pra o pendrive também não é removida.
#entretanto: o pendrive é desmontado, mas memso assim aparece a mensagem errada.
#! /usr/bin/python
import gtk
import commands
import getpass
import os
try:
import egg.trayicon
except:
print "You need to install the python-eggtrayicon package"
class EggTrayIcon:
USER = getpass.getuser()
pen_list = commands.getoutput("mount | grep $USER | grep ltspfs | grep -v isquete | awk '{print $3}'").split("\n")
mount_point = "/home/"+USER+"/Drives/"
def __init__(self):
self.tray = egg.trayicon.TrayIcon("TrayIcon")
eventbox = gtk.EventBox()
image = gtk.Image()
image.set_from_file("/usr/share/icons/Boto/22x22/actions/media-eject.png")
eventbox.connect("button-press-event", self.icon_clicked)
eventbox.add(image)
self.tray.add(eventbox)
self.tray.show_all()
def icon_clicked(self, widget, event):
if event.button == 1 or 3:
menu = gtk.Menu()
#menuitem_eject.connect("activate", self.eject)
# TODO: if len(pen_list) > 0
for i in self.pen_list:
label = i[::-1].split("/")[0][::-1].replace("_"," ") # name from mountpoint
menu_item = gtk.MenuItem("Ejetar "+label)
menu.append(menu_item)
menu_item.connect("activate", self.eject, i, label)
menu.show_all()
menu.popup(None, None, None, event.button, event.time, self.tray)
def eject(self, widget, mountpoint, label):
if os.system("fusermount "+mountpoint+" -u -z") == 0:
message_dialog = gtk.MessageDialog(parent=None,
flags=0,
type=gtk.MESSAGE_INFO,
buttons=gtk.BUTTONS_CLOSE,
message_format="O dispositivo chamado \""+label+"\" pode agora ser removido de modo seguro")
else:
message_dialog = gtk.MessageDialog(parent=None,
flags=0,
type=gtk.MESSAGE_ERROR,
buttons=gtk.BUTTONS_CLOSE,
message_format="Falha ao tentar remover o dispositivo")
message_dialog.run()
message_dialog.destroy()
#TODO: Close message at close button
#TODO: Remove item from menu
#TODO: Remove icon from desktop
#TODO: Try to detect when busy
EggTrayIcon()
gtk.main()