Quitter le forum et retourner au site
Exécution automatique au démontage d’une clé USB
- juice
- Messages : 247
- Inscription : dim. 29 juin 2008, 10:06
- Distribution : Archlinux
- Niveau : Confirmé
- Localisation : Oberentzen
Exécution automatique au démontage d’une clé USB
Bonjour à tous
J’ai la problématique suivante : ma clé usb en fat32 qui contient ma musique en mp3 et que je lis
sur l’autoradio de ma voiture nécessite l’exécution de fatsort pour que les morceaux soient biens
listés dans l’ordre des noms de fichiers et non selon l’ordre d´écriture sur la partition. J’aimerai exécuter
cette commande automatiquement après le démontage du périphérique mais udev ne détecte pas
l’action de démontage ; chose que udisks sait faire. Inversement je je sais pas si udisks sait
gérer des règles comme udev.
Si quelqu’un à une piste je suis preneur…
J’ai la problématique suivante : ma clé usb en fat32 qui contient ma musique en mp3 et que je lis
sur l’autoradio de ma voiture nécessite l’exécution de fatsort pour que les morceaux soient biens
listés dans l’ordre des noms de fichiers et non selon l’ordre d´écriture sur la partition. J’aimerai exécuter
cette commande automatiquement après le démontage du périphérique mais udev ne détecte pas
l’action de démontage ; chose que udisks sait faire. Inversement je je sais pas si udisks sait
gérer des règles comme udev.
Si quelqu’un à une piste je suis preneur…
- le Manchot Masqué
- Administrateur du site
- Messages : 728
- Inscription : lun. 26 mai 2008, 21:05
- Distribution : Debian, Ubuntu
- Niveau : Moitié plein !
- Localisation : Guebwiller
Re: Execution automatique au démontage d’une clé USB
Tu es vraiment certain qu'udev ne marche pas ?
Cf. à la fin de http://superuser.com/questions/305723/u ... -insertion, on a bien une action remove qui appelle un script...
Et même sur Arch : cf. https://bbs.archlinux.org/viewtopic.php?id=119111
Cf. à la fin de http://superuser.com/questions/305723/u ... -insertion, on a bien une action remove qui appelle un script...
Et même sur Arch : cf. https://bbs.archlinux.org/viewtopic.php?id=119111
- juice
- Messages : 247
- Inscription : dim. 29 juin 2008, 10:06
- Distribution : Archlinux
- Niveau : Confirmé
- Localisation : Oberentzen
Re: Execution automatique au démontage d’une clé USB
Voici ce que je tente pour le moment :
Selon moi ça ne marchera pas car le RUN+="…" est exécuté après le remove ce qui est quelque peu problématique.
Je n’ai pas trouvé comment voir avec udevadm si la commande avait réusssie ou échouée.
Code : Tout sélectionner
ACTION=="remove", SUBSYSTEMS=="usb" ATTRS{idProduct}=="168a", RUN+="/usr/bin/fatsort -f /dev/disk/by-label/JCC_MUSIC"
Je n’ai pas trouvé comment voir avec udevadm si la commande avait réusssie ou échouée.
- le Manchot Masqué
- Administrateur du site
- Messages : 728
- Inscription : lun. 26 mai 2008, 21:05
- Distribution : Debian, Ubuntu
- Niveau : Moitié plein !
- Localisation : Guebwiller
Re: Execution automatique au démontage d’une clé USB
Alors j'ai commencé par un petit script bidon,
avec le fichier /media/macle/aa qui contient 3 lignes à trier:
En lançant /media/macle/aa en ligne de commande, pas de problème : j'ai bien un fichier bb trié à partir de mon fichier source aa !
Ma clé USB étant montée chez moi en /dev/sde, j'ai repéré son idVendor via la commande lsusb.
J'ai ensuite rajouté la règle udev suivante et relancer udev:
A noter ici que je ne fais aucune vérification de l'identité de ma clé au niveau du démontage, ce qui est évidemment à proscrire dans une version finale.
J'ai ensuite laissé udev faire son boulot au démontage, via nautilus. Mes logs apparaissent bien dans les journaux système, mais le code de retour de la commande sort (2) laisse à penser que le périphérique est effectivement déjà démonté...
J'ai donc voulu tester un peu plus loin. J'ai commencé par
qui n'était pas assez précis : l'action doit être appelée au niveau de la partition /dev/sde1, et non au niveau du périphérique de bloc /dev/sde. Je suis donc passé à :
pour repérer l'arborescence complète de ma clé USB sous la forme "/devices/pci...sde1"
Puis j'ai testé avec :
et là effectivement, les lignes
laisse à penser qu'udev vire les liens existants avant d'appeler le script.
Bref, à moins d'intercepter les événements au niveau noyau avant udev, cette méthode me semble sérieusement compromise. De toute évidence, udev fait bien son boulot, mais il n'a apparemment pas été prévu pour écrire sur une clé en cours de démontage...
Au final, par rapport à ton problème bien spécifique, je crois qu'un petit script maison, avec une petite icône sympa sur le bureau, qui appellerait ta commande de tri et démonterait ensuite la clé, serait beaucoup moins casse-tête.
Code : Tout sélectionner
$ cat /home/monuser/coucou.sh
#!/bin/bash
/usr/bin/logger COUCOU!
/usr/bin/sort -u /media/macle/aa -o /media/macle/bb
# resultat de la dernière commande (doit être égal à 0 si ok)
/usr/bin/logger $?
Code : Tout sélectionner
aa
cc
bb
Ma clé USB étant montée chez moi en /dev/sde, j'ai repéré son idVendor via la commande lsusb.
J'ai ensuite rajouté la règle udev suivante et relancer udev:
Code : Tout sélectionner
$ cat /etc/udev/rules.d/macle.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="048d", MODE="0666", GROUP="plugdev"
KERNEL=="sde1", SUBSYSTEM=="block", ACTION=="remove", RUN+="/home/monuser/coucou.sh"
J'ai ensuite laissé udev faire son boulot au démontage, via nautilus. Mes logs apparaissent bien dans les journaux système, mais le code de retour de la commande sort (2) laisse à penser que le périphérique est effectivement déjà démonté...
J'ai donc voulu tester un peu plus loin. J'ai commencé par
Code : Tout sélectionner
udevadm info -a -p /sys/block/sde
Code : Tout sélectionner
udevadm info -a -n /dev/sde1
Puis j'ai testé avec :
Code : Tout sélectionner
udevadm test --action=remove /devices/pci0000:00/0000:00:1d.7/usb4/4-3/4-3.4/4-3.4:1.0/host263/target263:0:0/263:0:0:0/block/sde/sde1
Code : Tout sélectionner
...
udev_node_remove: keeping device node of existing device'/dev/sde1'
...
udevadm_test: run: '/home/monuser/coucou.sh'
...
Bref, à moins d'intercepter les événements au niveau noyau avant udev, cette méthode me semble sérieusement compromise. De toute évidence, udev fait bien son boulot, mais il n'a apparemment pas été prévu pour écrire sur une clé en cours de démontage...
Au final, par rapport à ton problème bien spécifique, je crois qu'un petit script maison, avec une petite icône sympa sur le bureau, qui appellerait ta commande de tri et démonterait ensuite la clé, serait beaucoup moins casse-tête.
- juice
- Messages : 247
- Inscription : dim. 29 juin 2008, 10:06
- Distribution : Archlinux
- Niveau : Confirmé
- Localisation : Oberentzen
Re: Execution automatique au démontage d’une clé USB
Je croit bien que ça finira en quelque chose du genre…
- le Manchot Masqué
- Administrateur du site
- Messages : 728
- Inscription : lun. 26 mai 2008, 21:05
- Distribution : Debian, Ubuntu
- Niveau : Moitié plein !
- Localisation : Guebwiller
Re: Exécution automatique au démontage d’une clé USB
Je complète un peu avec les infos suivantes :
Pour avoir toutes les combinaisons possibles d'un appareil (ex : /dev/sdg) :
Et à chaque modification/test dans /etc/udev/monfichier.rules, on recharge les règles UDEV :
Pour avoir toutes les combinaisons possibles d'un appareil (ex : /dev/sdg) :
Code : Tout sélectionner
udevadm info -a -p $(udevadm info -q path -n /dev/sdg)
Code : Tout sélectionner
udevadm hwdb --update
udevadm control --reload-rules
udevadm trigger