Bonjour,
Je souhaite déclancher un script à l insertion d'une clé USB.
En lançant manuellement le script, il fonctionne bien par contre à l insertion de ma clé, la commande CP et RM ne fonctionne pas, le pkill fonctionne.
Je suis avec un RPI3 et Raspbian STRETCH
J avais réussi à faire fonctionner avec une version jessie.
Ai je raté une commande ?
J ai créé une regle UDEV qui lance bien mon script.
KERNEL=="sda1", ACTION=="add", ATTRS{serial}=="070B83C150A9BA28",RUN+="/bin/bash -c '/home/transfert.sh %k &'"
Edit de transfert.sh ( /home/transfert.sh)
#!/bin/sh
sudo mount /media/usb1
pkill qiv
sudo rm -rf /home/pi/pics/*
sudo cp -f /media/usb1/images/* /home/pi/pics/
Regle UDEV
Modérateurs : Francois, maxty01
Re: Regle UDEV
Salut jmarc93.
Pourriez-vous utiliser le bbcode [ code ] ... [ /code ] pour visualiser votre script shell, svp ?
Il s'agit du bouton </> en haut de la fenêtre de saisie de votre message.
Dans le répertoire : "/etc/udev/rules.d>", j'ai créé sous le nom "72-static-name.rules", des règles de nommages des périphériques wifi.
Ainsi, à chaque fois que j'insère soit le câble ethernet, ou un dongle wifi, celui-ci aura toujours le même nom.
Comme vous pouvez le constater, le nom de la règle commence par "72-" et se termine par ".rules". C'est obligatoire, d'après ce que j'ai compris.
Quelques remarques :
1) pour le nom de votre règle, pourquoi ne pas la nommer : "10-my.rules".
2) Je constate que vous définissez votre fichier comme du "SH" mais par contre vous le lancez en tant que "BASH".
Je mettrai plutôt "/bin/sh" au lieu de "/bin/bash".
3) Au lieu de mettre "run+=", ne serait-il pas plus judicieux de mettre "program="
4) Avez-vous vérifié le passage de vos paramètres dans votre script shell ?
5) Avez-vous utilisez la commande "udevadm info" ?
Dans cet exemple, j'ai un disque dur.
A partir de cette commande, vous avez une multitude d'information qui vous serons utile.
5) vous n'êtes pas obligé de créer un script shell, mais d'insérer directement vos commandes dans la règle.
Vous pouvez vous inspirer de ce qui est présent dans "99-com.rules".
6) voici la règle que j'utiliserai :
Vu que je n'ai pas testé, je ne sais pas si la syntaxe est correcte.
@+
Pourriez-vous utiliser le bbcode [ code ] ... [ /code ] pour visualiser votre script shell, svp ?
Il s'agit du bouton </> en haut de la fenêtre de saisie de votre message.
J'ai utilisé UDEV pour un autre usage que vous, dans stretch pour la rpi3+.jmarc93 a écrit :Je souhaite déclencher un script à l insertion d'une clé USB.
Dans le répertoire : "/etc/udev/rules.d>", j'ai créé sous le nom "72-static-name.rules", des règles de nommages des périphériques wifi.
Code : Tout sélectionner
/etc/udev/rules.d> cat 72-static-name.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="b8:27:eb:85:80:79", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="b8:27:eb:d0:d5:2c", NAME="wlan0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:e0:4c:08:ac:db", NAME="wlan1"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:e0:4c:0b:f9:af", NAME="wlan2"
Comme vous pouvez le constater, le nom de la règle commence par "72-" et se termine par ".rules". C'est obligatoire, d'après ce que j'ai compris.
Quelques remarques :
1) pour le nom de votre règle, pourquoi ne pas la nommer : "10-my.rules".
2) Je constate que vous définissez votre fichier comme du "SH" mais par contre vous le lancez en tant que "BASH".
Je mettrai plutôt "/bin/sh" au lieu de "/bin/bash".
3) Au lieu de mettre "run+=", ne serait-il pas plus judicieux de mettre "program="
4) Avez-vous vérifié le passage de vos paramètres dans votre script shell ?
5) Avez-vous utilisez la commande "udevadm info" ?
Dans cet exemple, j'ai un disque dur.
Code : Tout sélectionner
/etc/udev/rules.d> udevadm info -an /dev/sda1
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1':
KERNEL=="sda1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{alignment_offset}=="0"
ATTR{discard_alignment}=="0"
ATTR{inflight}==" 0 0"
ATTR{partition}=="1"
ATTR{ro}=="0"
ATTR{size}=="204800"
ATTR{start}=="2048"
ATTR{stat}==" 196 14 10461 1200 2037 1508 48007 13240 0 2320 14430"
...
/etc/udev/rules.d>
5) vous n'êtes pas obligé de créer un script shell, mais d'insérer directement vos commandes dans la règle.
Vous pouvez vous inspirer de ce qui est présent dans "99-com.rules".
6) voici la règle que j'utiliserai :
Code : Tout sélectionner
ACTION=="add",SUBSYSTEM=="usb",KERNEL=="sda1",ATTRS{serial}=="070B83C150A9BA28",PROGRAM="/bin/sh -c '\
sudo mount /dev/sda1 /media/usb1\
'"
@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
Re: Regle UDEV
Merci pour votre réponse.
Je suis revenu à la version Jessie pour le Raspberry.
Tout fonctionne parfaitement.
dans mon script, seul les commande rm et cp semblait ne pas fonctionner.
Par contre, je vais suivre vos recommandation et modifier cela pour la version Strech.
Merci
Je suis revenu à la version Jessie pour le Raspberry.
Tout fonctionne parfaitement.
dans mon script, seul les commande rm et cp semblait ne pas fonctionner.
Par contre, je vais suivre vos recommandation et modifier cela pour la version Strech.
Merci
Re: Regle UDEV
Salut jmarc93.
Dans un script, il faut toujours indiquer où se trouve les commandes que vous allez utiliser.
CP et RM sont des exécutables et de ce fait, vous devez indiquer les répertoires où ils se trouvent :
En ce qui concerne votre script, vous devez lui attribuer le fait qu'il doit être un exécutable.
Mais l'appartenance à un user et à un group.
Il est inutile de préfixer vos commandes par sudo, si vous exécutez votre script en tant que root.
@+
Dans un script, il faut toujours indiquer où se trouve les commandes que vous allez utiliser.
CP et RM sont des exécutables et de ce fait, vous devez indiquer les répertoires où ils se trouvent :
Code : Tout sélectionner
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
Mais l'appartenance à un user et à un group.
Il est inutile de préfixer vos commandes par sudo, si vous exécutez votre script en tant que root.
@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32