Regle UDEV

Le système préconisé par la Fondation Raspberry Pi

Modérateurs : Francois, maxty01

Répondre
jmarc93
Messages : 2
Enregistré le : lun. 17 sept. 2018 09:07

Regle UDEV

Message par jmarc93 » lun. 17 sept. 2018 09:17

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/

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: Regle UDEV

Message par Artemus24 » lun. 17 sept. 2018 14:10

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.
jmarc93 a écrit :Je souhaite déclencher un script à l insertion d'une clé USB.
J'ai utilisé UDEV pour un autre usage que vous, dans stretch pour la rpi3+.
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"
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.

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>
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 :

Code : Tout sélectionner

ACTION=="add",SUBSYSTEM=="usb",KERNEL=="sda1",ATTRS{serial}=="070B83C150A9BA28",PROGRAM="/bin/sh -c '\
sudo mount /dev/sda1 /media/usb1\
'"
Vu que je n'ai pas testé, je ne sais pas si la syntaxe est correcte.

@+
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

jmarc93
Messages : 2
Enregistré le : lun. 17 sept. 2018 09:07

Re: Regle UDEV

Message par jmarc93 » lun. 17 sept. 2018 15:43

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

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: Regle UDEV

Message par Artemus24 » lun. 17 sept. 2018 19:51

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 :

Code : Tout sélectionner

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
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.

@+
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

Répondre

Retourner vers « Raspbian »