2009-12-17 5 views
2

Je travaille sur un utilitaire qui va monter automatiquement une clé USB insérée sur Linux. J'ai lié à D-Bus pour recevoir une notification de quand un périphérique est inséré, et cela fonctionne très bien. Cependant, j'ai besoin de déterminer quel périphérique dans/dev est mappé sur la clé USB insérée. Je reçois la notification D-Bus, puis je numérise le système USB avec pyUSB (0.4). Je filtre les classes USB_MASS_STORAGE_DEVICE et je peux voir le périphérique ajouté ou supprimé. J'ai besoin de monter cet appareil pour que je puisse l'interroger sur l'espace disponible et le signaler à notre application afin que nous puissions déterminer si suffisamment d'espace libre existe pour que nous puissions écrire nos données. Je suis en train d'utiliser python pour cette tâche.Linux USB Mapping Question

Je ne suis pas sûr de ce que sera notre distribution cible, mais seulement que ce sera au moins 2.6

edit: Ma question est: Comment puis-je déterminer quel périphérique dans/dev correspond au numéro de périphérique de bus que je reçois de pyUSB .

+0

Comment avez-vous remplacé le en construit opération de montage Linux qui a lieu quand une clé USB est inséré? –

Répondre

2

Vous devriez probablement demander à HAL à ce sujet. Vous dites que vous recevez déjà des notifications de HAL par D-Bus ... Il gère la liste des périphériques USB, ainsi que leurs ID et noms de périphériques (propriété block.device).

Voici un bel exemple de la façon d'obtenir le nom de fichier de périphérique en même temps que la notification du nouveau périphérique USB: How can I listen for 'usb device inserted' events in Linux, in Python?

+0

Parfait. Exactement ce que je cherchais. Merci. – Therealstubot

0

Pourquoi ne pas utiliser "os" Module pour monter le système de fichiers:

os.system ("mount ... ") 

Ou si vous voulez examiner l'utilisation de sortie "popen":

l = op.popen ("mount ....").readlines() 
+0

Je vais, une fois que je sais quoi monter. c'est-à-dire que le premier argument de mount est l'appareil. C'est ce que j'essaie de savoir. – Therealstubot

0

ce que sur l'utilisation dmesg sortie pour trouver le nom de l'appareil (sdc1 etc ...)

l'utiliser juste après que dbus vous dise que quelque chose a été inséré dans le port USB . vous pourriez faire tail dmesg par exemple

+0

Je n'ai pas aimé cette solution car elle manque de "atomicité". Cela fonctionnerait en dernier recours, même si cela ne me rendrait jamais heureux. – Therealstubot

+0

ce n'est pas vraiment différent d'écouter d'une autre façon. c'est aussi écouter, juste vérifier les chaînes. – dusoft