Bon, j'ai fait un truc pour toi en python qui utilise dbus:
#!/usr/bin/python
import gtk
import dbus
import os
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
dbus_loop = DBusGMainLoop()
def device_added1(truc):
pos=truc.find("storage_serial_")
if pos>=0:
print "Added "+truc[pos+15:]
os.system("ls -l /dev/disk/by-path/")
#print 'Device %s was added'%truc
def device_removed1(truc):
pos=truc.find("storage_serial_")
if pos>=0:
print "Removed "+truc[pos+15:]
bus = dbus.SystemBus(mainloop=dbus_loop)
hal_manager_obj = bus.get_object ( 'org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
hal_manager_iface = dbus.Interface(hal_manager_obj, "org.freedesktop.Hal.Manager")
devices = hal_manager_iface.GetAllDevices ()
#for d in devices:
# print 'Found device %s'%d
bus.add_signal_receiver (device_added1, 'DeviceAdded',
'org.freedesktop.Hal.Manager',
'org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
bus.add_signal_receiver (device_removed1, 'DeviceRemoved',
'org.freedesktop.Hal.Manager',
'org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
gtk.main()
Sauve ce contenu dans un fichier monitordbus.py et lance-le avec "python monitordbus.py".
Tu dois avoir installé sur ta bécane (sans doute par défaut sous ubuntu) python-dbus et python-gtk2.
Quand tu insères ou retires un stick ou un disque externe, tu auras un message qui affiche une info, ici j'insère/retire un stick puis un disque:
phil@shuttle:/mnt/bigdisk/home/phil$ python testdbus.py
Added Memorex_TD_Classic_003B_07710C1702FF_0_0
Removed Memorex_TD_Classic_003B_07710C1702FF_0_0
Added HITACHI__DK23BA_10________________________________0_0
Removed HITACHI__DK23BA_10________________________________0_0
^CTraceback (most recent call last):
File "testdbus.py", line 40, in <module>
gtk.main()
KeyboardInterrupt
phil@shuttle:/mnt/bigdisk/home/phil$
Quand le stick est inséré et reconnu, va voir dans /dev/disk/by-path le nom que porte ton device quand il est inséré dans ce slot USB en particulier.
shuttle:/mnt/bigdisk/home/phil# ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root 9 4 jun 17:24 pci-0000:00:1a.7-usb-0:2:1.0-scsi-0:0:0:0 -> ../../sdc
lrwxrwxrwx 1 root root 9 4 jun 17:24 pci-0000:00:1a.7-usb-0:2:1.0-scsi-0:0:0:1 -> ../../sdd
lrwxrwxrwx 1 root root 9 4 jun 18:47 pci-0000:00:1a.7-usb-0:3:1.0-scsi-0:0:0:0 -> ../../sdf
lrwxrwxrwx 1 root root 10 4 jun 18:47 pci-0000:00:1a.7-usb-0:3:1.0-scsi-0:0:0:0-part1 -> ../../sdf1
lrwxrwxrwx 1 root root 9 4 jun 18:12 pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0 -> ../../sdb
lrwxrwxrwx 1 root root 9 4 jun 18:12 pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:1 -> ../../sde
lrwxrwxrwx 1 root root 9 4 jun 17:24 pci-0000:00:1f.2-scsi-1:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 4 jun 17:24 pci-0000:00:1f.2-scsi-1:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 4 jun 17:24 pci-0000:00:1f.2-scsi-1:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 4 jun 17:24 pci-0000:00:1f.2-scsi-1:0:0:0-part3 -> ../../sda3
lrwxrwxrwx 1 root root 9 4 jun 17:24 pci-0000:00:1f.5-scsi-1:0:0:0 -> ../../sr0
shuttle:/mnt/bigdisk/home/phil#
Chez moi, c'est /dev/disk/by-path/pci-0000:00:1a.7-usb-0:3:1.0-scsi-0:0:0:0 le disque, et /dev/disk/by-path/pci-0000:00:1a.7-usb-0:3:1.0-scsi-0:0:0:0-part1 la partition sur ce disque. Ça c'est pour que ton programme ne formatte que la clé qui est insérée dans ce slot là et pas un autre.
Attention, le *-part1 n'arrive que plusieurs secondes après la détection du device (recherche des partitions).
Alors:
- soit tu veux juste reformater la partition existante sur le stick, alors dans le code, tu remplaces le os.system("ls -l ...") par os.system("mkfs.vfat /dev/...-part1")
- soit tu veux écraser la table de partition aussi (on ne sait jamais que quelqu'un boote avec sa clé insérée et qu'il y a un virus de secteur boot), alors tu fais le repartitionnement d'un clé à la main, et tu utilises la commande sfdisk dans ton os.system() pour toutes les repartitionner pareil avant de reformater.
Tu peux aussi rajouter un effacement "dur" avec un dd /dev/zero avant toute autre manip.
J'espère que cela te fait avancer...