Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

udev again

35 réponses
Avatar
Pascal
Bonjour,
je reviens avec mes soucis de udev.

J'ai créé une règle udev qui au branchement d'une montre garmin lance un
script

Ce script lance une application (graphique) permettant la gestion des
courses sur ce type de montre.

La règle fonctionne a peu pret bien.
Je m'explique

Normalement à l'insertion d'un périphérique usb celui-ci est vmonté
automatiquement sans que je m'occupe de quoi que ce soit.

Dans mon cas de figure ça ne fonctionne pas vraiment lors du branchement
de la montre la règle est bien exécutée, l'application se lance mais je
dois attendre un gros moment avant que la montre soit montée.
Ce qui n'est pas le cas si j'enlève la règle

La règle :
SUBSYSTEM=="usb", ATTR{idVendor}=="091e",
ATTR{idProduct}=="25ca",RUN+="/bin/su pascal -c
'/home/pascal/Desktop/udev-turtlesport.sh'"

le script
#!/bin/bash
export DISPLAY=":0.0"
/usr/bin/turtlesport &


Une idée pour faire en sorte que ma règle soit exécutée après le montage ?

d'avance merci

10 réponses

1 2 3 4
Avatar
Pascal
Le 01/12/2012 22:13, Francois Lafont a écrit :
Le 01/12/2012 20:55, Pascal a écrit :

j'avais tenté ça en mettant juste un sleep avant mes commandes mais ça
ne marcbhait pas.
En fait on dirait que c'est la règle elle même qui "empêche " le montage



Oui et donc c'est pour ça quand dans le script à 2 centimes que je t'ai
mis dans mon premier message j'ai fait en sorte que le script rende la
main immédiatemment (via la structure { ... }&). Tu l'as testé pour
voir ? Ça donne quoi ?

Si on part du principe que tant que la règle n'a pas été appliquée et
qu'elle n'est pas « achevée » la clé ne se monte pas, alors
effectivement un truc comme ça ne marchera pas :

-----------------------------------------
#!/bin/bash
sleep 5

export DISPLAY=":0.0"
/usr/bin/turtlesport&
-----------------------------------------

car de toute façon la commande tutlesport sera lancée avant que la règle
ne s'achève, puisque la règle attend d'abord la fin du script, et donc
avant le montage de la clé.

Mais si tu regardes bien le script de mon premier message, j'ai mis ça :

-----------------------------------------
#!/bin/bash
{
# on attend le montage.
# Ensuite on lance la commande
}&
-----------------------------------------

Et la structure « { ... }& » fait que le script lancé par la règle
rendra la main immédiatement sans attendre la fin de son exécution. Donc
la règle sera terminée immédiatement (la règle aura seulement lancé le
script sans attendre qu'il se termine). Le script lui continuera tout
seul dans son coin son exécution *en* *arrière* *plan* mais la règle,
elle, sera bien appliquée et « achevée » et le mécanisme udev passera à
la suite. Et dans l'exécution du script, il y a une partie au début qui
fait en sorte d'attendre le montage de la clé avant de lancer turtlesport.

En résumé, l'idée est : puisque que la règle doit se terminer pour que
le montage ait lieu, alors il faut que la règle lance le script en
arrière plan.

Hmm pas sur d'être très clair.
En fait la règle est bien respectée c'est à dire qu'avant même que la
montre soit montée, l'application se lance, si je ne fais rien dans le
syslog je vois un timeout puis le disque se monte.Et si je quitte
l'application le disque se monte immédiatement après
Pourtant j'ai appelé ma règle 99...... en pensant qu'elle serait la
dernière à être executée mais rien n'y fait



Si j'ai bien compris tout ça. Mais alors, c'est peut-être moi qui ne
suis pas clair. J'espère qu'avec les lignes ci-dessus, ça l'ai un peu
plus. Non ?



Alors j'ai testé ça ne marche pas
j'ai l'impression que le résultat est le même si ce n'est que l'appli
n'est pas lancée du tout
voilà ce que j'ai fait :

La règle qui fonctionne :
SUBSYSTEM=="usb", ATTR{idVendor}=="091e",
ATTR{idProduct}=="25ca",RUN+="/bin/su pascal -c
'/home/pascal/Desktop/udev-turtlesport.sh'"


le script
#!/bin/bash
'/bin/su pascal -c '/home/pascal/Desktop/udev-turtlesport.sh''(err)
'mountpoint: /media/GARMIN: No such file or directory'
# On veut que le script rende la main tout de suite.
{
c=0

# On attend que le périphérique soit monté.
while ! mountpoint /media/GARMIN; do
sleep 0.5
c=$((c+1))
# Au bout d'un certain temps on abandonne.
if [ "$c" = 20 ]; then
exit 1
fi
done

export DISPLAY=":0.0"
/usr/bin/turtlesport
} &



En fait si je regarde les logs j'ai 20 fois la ligne
'/bin/su pascal -c '/home/pascal/Desktop/udev-turtlesport.sh''(err)
'mountpoint: /media/GARMIN: No such file or directory'

il ne vois pas la montre montée
au bout de 20 fois la montre est montée mais l'appli n'est pas lancée



hmm chuis clair ???


;-)
Avatar
Francois Lafont
Le 01/12/2012 22:25, Pascal a écrit :

C'est juste le script que je ne comprend pas tout à fait
J'ai du mal à piger la différence avec ma règle à laquelle j'ai mis
entre autre & après le script



Toi tu mets un & pour seulement le lancement de turtlemachin, alors que
dans le script le & s'applique tout le contenu du script. En fait,
l'idéal aurait été de pouvoir faire ceci :

RUN+="/bin/su pascal -c /home/pascal/Desktop/udev-turtlesport.sh &"

dans ta règle (avec un & à la fin donc). Mais chez moi, ça ne fonctionne
pas (udev ne doit pas comprendre le &).

Mais je vais essayer et je te tiens au courant



Ça peut ne pas marcher pour plein de raisons mais au niveau du *timing*
(qui est ton problème de départ) je pense que ça sera bon. Par exemple,
je bien de tester ceci au niveau du montage d'une clé USB perso :

---------------------------------------------
#!/bin/bash

{
c=0

# On attend que le périphérique soit monté.
while ! mountpoint /media/FRANKEY2; do
sleep 0.5
c=$((c+1))
# Au bout d'un certain temps on abandonne.
if [ "$c" = 20 ]; then
echo "Perdu" >> /home/francois/Bureau/out.txt
exit 1
fi
done

echo "Gagné" >> /media/FRANKEY2/out.txt

} &
---------------------------------------------

Et j'ai bien un fichier out.txt qui est écrit à la racine de ma clé, et
donc forcément après le montage de celle-ci (car c'est difficile
d'écrire dans un fichier d'une clé USB tant que celle-ci n'est pas montée).

--
François Lafont
Avatar
Francois Lafont
Le 01/12/2012 22:48, Pascal a écrit :

Alors j'ai testé ça ne marche pas
j'ai l'impression que le résultat est le même si ce n'est que l'appli
n'est pas lancée du tout
voilà ce que j'ai fait :

La règle qui fonctionne :
SUBSYSTEM=="usb", ATTR{idVendor}=="091e",
ATTR{idProduct}=="25ca",RUN+="/bin/su pascal -c
'/home/pascal/Desktop/udev-turtlesport.sh'"


le script
#!/bin/bash
'/bin/su pascal -c '/home/pascal/Desktop/udev-turtlesport.sh''(err)
'mountpoint: /media/GARMIN: No such file or directory'
# On veut que le script rende la main tout de suite.



Heu, j'imagine que là il y a un petit souci de copié-collé.

{
c=0

# On attend que le périphérique soit monté.
while ! mountpoint /media/GARMIN; do
sleep 0.5
c=$((c+1))
# Au bout d'un certain temps on abandonne.
if [ "$c" = 20 ]; then
exit 1
fi
done

export DISPLAY=":0.0"
/usr/bin/turtlesport
} &



En fait si je regarde les logs j'ai 20 fois la ligne
'/bin/su pascal -c '/home/pascal/Desktop/udev-turtlesport.sh''(err)
'mountpoint: /media/GARMIN: No such file or directory'

il ne vois pas la montre montée
au bout de 20 fois la montre est montée mais l'appli n'est pas lancée



hmm chuis clair ???



Oui. :-)

Bon, on laisse de côté 2 minutes les règles udev. Quand ta montre est
montée automatiquement, que donne la commande « mount » ?

--
François Lafont
Avatar
Pascal
Le 01/12/2012 23:01, Francois Lafont a écrit :
Le 01/12/2012 22:48, Pascal a écrit :

Alors j'ai testé ça ne marche pas
j'ai l'impression que le résultat est le même si ce n'est que l'appli
n'est pas lancée du tout
voilà ce que j'ai fait :

La règle qui fonctionne :
SUBSYSTEM=="usb", ATTR{idVendor}=="091e",
ATTR{idProduct}=="25ca",RUN+="/bin/su pascal -c
'/home/pascal/Desktop/udev-turtlesport.sh'"


le script
#!/bin/bash
'/bin/su pascal -c '/home/pascal/Desktop/udev-turtlesport.sh''(err)
'mountpoint: /media/GARMIN: No such file or directory'
# On veut que le script rende la main tout de suite.



Heu, j'imagine que là il y a un petit souci de copié-collé.


heu oui mais par contre il s'agit bien de /media/GARMIN en majuscule et
tout le reste st bon
le script utilisé est bien celui que tu m'as filé sans le copié collé
maheureux


{
c=0

# On attend que le périphérique soit monté.
while ! mountpoint /media/GARMIN; do
sleep 0.5
c=$((c+1))
# Au bout d'un certain temps on abandonne.
if [ "$c" = 20 ]; then
exit 1
fi
done

export DISPLAY=":0.0"
/usr/bin/turtlesport
}&



En fait si je regarde les logs j'ai 20 fois la ligne
'/bin/su pascal -c '/home/pascal/Desktop/udev-turtlesport.sh''(err)
'mountpoint: /media/GARMIN: No such file or directory'

il ne vois pas la montre montée
au bout de 20 fois la montre est montée mais l'appli n'est pas lancée



hmm chuis clair ???



Oui. :-)

Bon, on laisse de côté 2 minutes les règles udev. Quand ta montre est
montée automatiquement, que donne la commande « mount » ?
/dev/sdc on /media/GARMIN type vfat (rw,nosuid,nodev,relatime,uid00,gid00,fmask22,dmask77,codepage=cp437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks)
Avatar
Francois Lafont
Le 01/12/2012 23:07, Pascal a écrit :

Heu, j'imagine que là il y a un petit souci de copié-collé.


heu oui mais par contre il s'agit bien de /media/GARMIN en majuscule et
tout le reste st bon
le script utilisé est bien celui que tu m'as filé sans le copié collé
maheureux



Zut alors. Franchement là je ne vois pas. Comme je l'ai dit dans un
message précédent, chez moi ça fonctionne et, via le script, j'arrive
même à créer un fichier dans ma clé usb (et donc après son montage).

J'espérais bien sûr que tu te sois trompé de point de montage. Chez moi,
la structure « { ... } & » permet de rendre la main à udev immédiatement
pour qu'il passe à la suite, on dirait que chez toi ce n'est pas le cas.

Juste pour info, tu as quoi comme système ? Perso, je suis sous Debian
Squeeze.

Peut-être que d'autres pourront t'aider car personnellement je n'ai plus
d'idée.

--
François Lafont
Avatar
Pascal
Le 01/12/2012 23:20, Francois Lafont a écrit :
Le 01/12/2012 23:07, Pascal a écrit :

Heu, j'imagine que là il y a un petit souci de copié-collé.


heu oui mais par contre il s'agit bien de /media/GARMIN en majuscule et
tout le reste st bon
le script utilisé est bien celui que tu m'as filé sans le copié collé
maheureux



Zut alors. Franchement là je ne vois pas. Comme je l'ai dit dans un
message précédent, chez moi ça fonctionne et, via le script, j'arrive
même à créer un fichier dans ma clé usb (et donc après son montage).

J'espérais bien sûr que tu te sois trompé de point de montage. Chez moi,
la structure « { ... }& » permet de rendre la main à udev immédiatement
pour qu'il passe à la suite, on dirait que chez toi ce n'est pas le cas.

Juste pour info, tu as quoi comme système ? Perso, je suis sous Debian
Squeeze.

Peut-être que d'autres pourront t'aider car personnellement je n'ai plus
d'idée.



debian sid
Je refais les tests au calme demain et je te tiens au courant
merci encore pour ton aide !!
Avatar
Lucas Levrel
Le 1 décembre 2012, Francois Lafont a écrit :

Mais c'est ce que j'utilise justement dans le petit script que j'ai
laissé en exemple dans le message précédent. Simplement, cela a
l'inconvénient d'être obligé de connaître à l'avance le point de montage.



Peut-être le système donne-t-il un /dev/... fixe, ou un alias fixe, auquel
cas on peut remplacer mountpoint par mount | grep (...) .

Pour le PO, est-ce qu'il ne faut pas mettre la commande de montage dans la
règle ? Peut-être que (chez lui) l'automontage est désactivé dès qu'il
existe une règle explicite ?

--
LL
Avatar
Pascal
Pour le PO, est-ce qu'il ne faut pas mettre la commande de montage dans la
règle ? Peut-être que (chez lui) l'automontage est désactivé dès qu'il
existe une règle explicite ?



Bonjour,
PO ??

Le fait de rajouter le montage dans mon script désactiverait l'automontage ??

sur Debian SID

Merci
Avatar
Lucas Levrel
Le 3 décembre 2012, Pascal a écrit :

Pour le PO, est-ce qu'il ne faut pas mettre la commande de montage dans la
règle ? Peut-être que (chez lui) l'automontage est désactivé dès qu'il
existe une règle explicite ?



Bonjour,
PO ??



Posteur originel.

Le fait de rajouter le montage dans mon script désactiverait l'automontage ??



Il y a des chances que l'automontage échoue si le périph est déjà monté,
oui.

Ce que je voulais dire c'est que, peut-être, l'automontage est désactivé
par la simple présence d'un script (même s'il ne monte rien). Tant qu'on
est dans les bizarreries... Est-ce que la manip de François pour une clef
USB marche chez toi pour une clef USB ?

--
LL
Avatar
Pascal
-------- Message original --------

Le 3 décembre 2012, Pascal a écrit :

Pour le PO, est-ce qu'il ne faut pas mettre la commande de montage dans la
règle ? Peut-être que (chez lui) l'automontage est désactivé dès qu'il
existe une règle explicite ?



Bonjour,
PO ??



Posteur originel.

Le fait de rajouter le montage dans mon script désactiverait l'automontage ??



Il y a des chances que l'automontage échoue si le périph est déjà monté,
oui.

Ce que je voulais dire c'est que, peut-être, l'automontage est désactivé
par la simple présence d'un script (même s'il ne monte rien). Tant qu'on
est dans les bizarreries... Est-ce que la manip de François pour une clef
USB marche chez toi pour une clef USB ?



j'ai fait la manip de françois sans succès.
Je suis censé refaire un test "from scratch" pour être bien sur que ça ne
fonctionne pas.
Là, comme je l'expliquais, j'ai la nette impression que ma règle empêche le
montage de ma "clé" (montre garmin vue comme un disque usb)

Merci
1 2 3 4