[udev] Script à l'insertion de clé usb

Reconnaissance et configuration du matériel / kernel linux
Néwick
Hankyu
Messages : 10
Inscription : mer. 06 févr. 2013, 19:21

[udev] Script à l'insertion de clé usb

Message par Néwick »

Bonjour à tous !

Je vais traiter et poser mon problème au sujet de udev, sujet maintes fois traité mais les réponses que j'ai trouvées ne m'ont pas permis de résoudre mon soucis.
Le problème : je veux synchroniser un dossier de ma clé usb à l'insertion de celle-ci, et je veux que l'on me demande confirmation.
(tout n'est peut-être pas à synchroniser...)
Ma solution partielle :
1) j'utilise unison pour la synchronisation
2) j'ai créé un profil d'utilisation nommé "portfolio" pour unison qui détaille mes dossiers à synchroniser
3) j'ai fait une règle UDEV

Code : Tout sélectionner

# /etc/udev/rules.d/10-local.rules
ACTION=="add", KERNEL=="sd*",SUBSYTEM=="block", ATTRS{size}=="7897088", RUN+="/home/newick/scripts/unison-portfolio-launcher"
4) j'ai fait un script pour lancer ma synchronisation (unison-portfolio-launcher)

Code : Tout sélectionner

#unison-portfolio-launcher
#!/bin/bash
if [ "$ACTION" != 'add' ] ; then
   exit
fi

#Tout d'abord, trouver où afficher tout ça : (trouver le ndu de l'affichage X local)
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
LocalDisplay=':0'
X11User=`who | grep $LocalDisplay | cut -f 1 -d ' '`
if [ -z "$X11User" ] ; then 
	exit
fi

#Envoyer la commande dans l'affichage local
export DISPLAY=$LocalDisplay
export HOME=/home/$X11User
nice -n 5 su $X11User -c "/home/newick/scripts/unison-portfolio | at now"

exit
5) ...qui appelle le code suivant :

Code : Tout sélectionner

#unison-portfolio
#!/bin/bash
# Script permettant la synchronisation du Portfolio
if zenity --question --title="Confirmation" --text="Lancer la synchronisation du portfolio ?" 
then
	unison-gtk2 portfolio
else
	exit
fi
  • Ce qui marche :
  • La règle UDEV : à l'insertion de ma clef, le script est bien exécuté (j'ai la boîte de dialogue)
  • Le problème d'affichage a été résolu par le LocalDislay
  • L'exécution s'interrompait rapidement toute seule: ça été résolu par la commande "at now"
  • Mon script unison-portfolio seul
  • Ce qui ne fonctionne pas :
  • Lors de l'appel à unison, celui-ci démarre mais ne reconnait pas ma clef. Et tant que je ne suis pas allé sur Thunar voir ma clef, ça ne fonctionne pas (pourtant celle-ci est considérée comme montée)
  • Mon script est exécuté deux fois
Si quelqu'un a des conseils, une idée... :)

Merci beaucoup !

Eric
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [udev] Script à l'insertion de clé usb

Message par oktoberfest »

Salut,
Néwick a écrit :
  • Ce qui ne fonctionne pas :
  • Lors de l'appel à unison, celui-ci démarre mais ne reconnait pas ma clef. Et tant que je ne suis pas allé sur Thunar voir ma clef, ça ne fonctionne pas (pourtant celle-ci est considérée comme montée)
  • Mon script est exécuté deux fois
Udev ne fait que créer le périphérique dans /dev, il ne le monte pas. Donc normal que ta clé ne soit pas montée. Tu peux le vérifier en faisant un 'grep /proc/mounts' dans ton script : ta clé ne devrait pas apparaitre.
Pour le double démarrage, j'imagine que c'est ta règle udev qui est parsée deux fois, maintenant je ne connais pas bien le mécanisme udev, d'autres pourront sans doute mieux répondre que moi.
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [udev] Script à l'insertion de clé usb

Message par tuxce »

Pour le double lancement, la règle est vraie pour tout sd*, ce qui inclue par exemple /dev/sdb (ta clé) et /dev/sdb1 (la partition).
Tu devrais rajouter ENV{DEVTYPE}=="partition"
Néwick
Hankyu
Messages : 10
Inscription : mer. 06 févr. 2013, 19:21

Re: [udev] Script à l'insertion de clé usb

Message par Néwick »

Merci tuxce : ta solution fonctionne effectivement :)

J'ai donc créé un point de montage via fstab, j'ai rajouté un mount dans mon script et un script de démontage lorsque la clé est retirée. Ils fonctionnent.
Ma clé est bien montée. Cependant, unison me dit que la clé est vide, si je vais dans thunar, il faut que je clique 2 fois sur ma clé pour mettre à jour les informations. Elles apparaissent ensuite et si je lance unison après, pas de soucis. Y'a t'il une action de plus après le montage à faire ?

NB : il est intéressant de noter que ma règle ne fonctionnait pas en position 10 je l'ai renommée en position 96 (96-local.rule) et ça roule...
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [udev] Script à l'insertion de clé usb

Message par tuxce »

T'es sûr que la clé est montée quand tu y accèdes avec unison ? Il faudrait un peu plus infos. mount avant, lors du premier accès et après le 2eme accès par thunar par exemple.
Néwick
Hankyu
Messages : 10
Inscription : mer. 06 févr. 2013, 19:21

Re: [udev] Script à l'insertion de clé usb

Message par Néwick »

Ben en tout cas je la monte :
j'ai modifié mon fstab comme suis :

Code : Tout sélectionner

UUID=_monUUID_	/media/Portfolio	ntfs-3g	rw,user,noauto,nofail,sync 0 0
Dans la règle UDEV j'ai mis : (rajout du symlink et du démontage)

Code : Tout sélectionner

ACTION=="add", KERNEL=="sd*", ENV{SUBSYSTEM}=="block", ENV{DEVTYPE}=="partition", ATTRS{size}=="7897088", SYMLINK+="Portfolio", RUN+="/home/newick/scripts/unison-portfolio-launcher"
ACTION=="remove", KERNEL=="sd*", ENV{SUBSYSTEM}=="block",ATTRS{size}=="7897088", RUN+="/home/newick/scripts/portfolio-umount"
et enfin dans le script unison-portfolio-launcher j'ai rajouté le code pour monter la clef

Code : Tout sélectionner

mount /dev/Portfolio /media/Portfolio
J'ai cru que j'avais fait une erreur pour le montage, j'ai donc mis le code suivant :

Code : Tout sélectionner

mount /dev/Portfolio
Et là, j'ai cru crier victoire, car unison se lance bien et synchronise correctement. Mais là c'est Thunar qui ne peut plus accéder à ma clef "Noeud final de transport n'est pas connecté"...
Donc ça avance, mais c'est pas ça !

[Edit] Dans le fstab, j'ai mis /dev/Portfolio au lieu de l'UUID. Mais ça ne résout rien. Mount m'indique ma clé est bien montée.[/Edit]
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [udev] Script à l'insertion de clé usb

Message par tuxce »

La sortie de

Code : Tout sélectionner

mount
histoire de savoir comment c'est monté.
Néwick
Hankyu
Messages : 10
Inscription : mer. 06 févr. 2013, 19:21

Re: [udev] Script à l'insertion de clé usb

Message par Néwick »

Voilà le résultat de mount :

Code : Tout sélectionner

systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=29,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
tmpfs on /tmp type tmpfs (rw)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
[...]
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=100)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
/dev/sdc1 on /media/Portfolio type fuseblk (rw,nosuid,nodev,relatime,sync,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096)
Répondre