# Udev et clef USB

**URL:** <https://www.debian-fr.org/t/udev-et-clef-usb/7245>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 3:46 UTC](https://www.debian-fr.org/t/udev-et-clef-usb/7245 "2016-02-20T15:46:07Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 3:46 UTC](https://www.debian-fr.org/t/udev-et-clef-usb/7245/1 "2016-02-20T15:46:07Z")

</div>

pmount c’est bien mais crée une entrée dans fstab c’est mieux. Les paquets existants sont un peu des usines à gaz. Donc un eplongée dans udev et finalement faire un système créant des répertoires et des entrées correspondantes dans fstab et les enlevant au retrait est très simple avec udev:

1. Le programme effectuant les manipulations:

[code]/lib/udev/usb\_fstab.sh:

#!/bin/sh  
date \>\> /tmp/dev\_usb  
echo $ACTION \>\> /tmp/dev\_usb  
echo $1 $ID\_FS\_TYPE $ID\_TYPE \>\> /tmp/dev\_usb  
echo $ID\_SERIAL \>\> /tmp/dev\_usb  
echo “----------”\>\> /tmp/dev\_usb

if [“$ACTION” = “add”] ; then  
NOM=$1\_$ID\_SERIAL  
DEVICE=/dev/$1  
if [“$ID\_FS\_TYPE” = “”] ; then  
ID\_FS\_TYPE=auto  
fi  
mkdir -p /media/$1  
echo “#$NOM” \>\> /etc/fstab  
if grep -q $DEVICE /etc/fstab \> /dev/null ; then  
echo -n “#” \>\> /etc/fstab  
fi  
echo $DEVICE /media/$1 $ID\_FS\_TYPE user,defaults 0 0 \>\> /etc/fstab  
fi  
if [“$ACTION” = “remove”] ; then  
NOM=.\*\_$ID\_SERIAL  
DEVICE=/dev/$1  
umount -f /media/$1  
rmdir /media/$1  
while [-f /tmp/fstab] ; do /bin/true ; done  
echo “sed -e '/^#”$NOM"/{N;d}’ /etc/fstab \> /tmp/fstab"\> /tmp/edite.$1  
cp /etc/fstab /tmp/fstab.$1  
sh /tmp/edite.$1  
mv /tmp/fstab /etc/fstab  
fi  
[/code]

et la règle appelant ce programme lors de l’insertion des clefs (c’est ça qui a été long à faire):

[code]/etc/udev/rules.d/z99\_clef.rules  
ACTION==“add”, ENV{SUBSYSTEM}==“block”, ENV{ID\_TYPE}==“floppy” , PROGRAM="/lib/udev/usb\_fstab.sh %k"  
ACTION==“add”, ENV{SUBSYSTEM}==“block”, ENV{ID\_FS\_TYPE}!="" , PROGRAM="/lib/udev/usb\_fstab.sh %k"  
ACTION==“remove”, ENV{SUBSYSTEM}==“block”, ENV{ID\_TYPE}==“floppy” , PROGRAM="/lib/udev/usb\_fstab.sh %k"  
ACTION==“remove”, ENV{SUBSYSTEM}==“block”, ENV{ID\_FS\_TYPE}!="" , PROGRAM="/lib/udev/usb\_fstab.sh %k"

[/code]

J’en ai fait un paquet plugusb disponible pour Etch sur

deb [boisson.homeip.net/debian](http://boisson.homeip.net/debian) etch divers

Finalement, udev est plus souple que hotplug à l’usage 🙂

---

<div class="post-metadata">

**Author:** ![usinagaz](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/ecae2f/32.png) [@usinagaz](https://www.debian-fr.org/u/usinagaz)\
**Post date:** [Février 20, 2016, 3:46 UTC](https://www.debian-fr.org/t/udev-et-clef-usb/7245/2 "2016-02-20T15:46:07Z")

</div>

merci fran.b … je teste trés bientôt … busy, so busy avec mes usines à moi 😃

---

<div class="post-metadata">

**Author:** ![NaiosKAE](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/n/b9e5f3/32.png) [@NaiosKAE](https://www.debian-fr.org/u/NaiosKAE)\
**Post date:** [Février 20, 2016, 4:17 UTC](https://www.debian-fr.org/t/udev-et-clef-usb/7245/3 "2016-02-20T16:17:25Z")

</div>

Bonjour, je profite du sujet actuel pour poser ma question…

d’abord, mes deux règles udev :

`cat /etc/udev/rules.d/z80_local.rules
KERNEL=="sd?2", DRIVERS=="usb", ATTRS{idProduct}=="1000", ATTRS{idVendor}=="090c", ACTION=="add", NAME="key", RUN+="/home/erwann/bin/auto_connect"
KERNEL=="sd?2", DRIVERS=="usb", ATTRS{idProduct}=="1000", ATTRS{idVendor}=="090c", ACTION=="remove", RUN+"/home/erwann/bin/auto_disconnect"
`

la règle correspondant à l’action “add” fonctionne

par contre, rien ne se passe au remove, je ne comprend pas pourquoi

si ça peut aider, voilà le udevmonitor lors de la déconnexion de la clef :

```auto
UEVENT[1186579006.517954] remove@/class/usb_endpoint/usbdev1.15_ep81
UEVENT[1186579006.517972] remove@/class/usb_endpoint/usbdev1.15_ep02
UEVENT[1186579006.517978] remove@/class/scsi_generic/sg3
UEVENT[1186579006.517983] remove@/class/scsi_device/18:0:0:0
UEVENT[1186579006.517989] remove@/class/scsi_disk/18:0:0:0
UEVENT[1186579006.517994] remove@/block/sdc/sdc2
UEVENT[1186579006.517999] remove@/block/sdc/sdc1
UEVENT[1186579006.518004] remove@/block/sdc
UEVENT[1186579006.518009] remove@/devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host18/target18:0:0/18:0:0:0
UEVENT[1186579006.518015] remove@/class/scsi_host/host18
UEVENT[1186579006.518020] remove@/devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0
UEVENT[1186579006.518025] remove@/class/usb_device/usbdev1.15
UEVENT[1186579006.518031] remove@/class/usb_endpoint/usbdev1.15_ep00
UEVENT[1186579006.518036] remove@/devices/pci0000:00/0000:00:1a.7/usb1/1-4
UDEV [1186579006.518487] remove@/class/usb_endpoint/usbdev1.15_ep81
UDEV [1186579006.520965] remove@/class/usb_endpoint/usbdev1.15_ep02
UDEV [1186579006.521031] remove@/block/sdc/sdc2
UDEV [1186579006.521789] remove@/class/scsi_generic/sg3
UDEV [1186579006.521849] remove@/block/sdc/sdc1
UDEV [1186579006.522428] remove@/devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0/host18/target18:0:0/18:0:0:0
UDEV [1186579006.522442] remove@/class/scsi_device/18:0:0:0
UDEV [1186579006.523036] remove@/class/scsi_disk/18:0:0:0
UDEV [1186579006.523804] remove@/block/sdc
UDEV [1186579006.524279] remove@/devices/pci0000:00/0000:00:1a.7/usb1/1-4/1-4:1.0
UDEV [1186579006.524571] remove@/class/scsi_host/host18
UDEV [1186579006.524931] remove@/class/usb_device/usbdev1.15
UDEV [1186579006.525529] remove@/devices/pci0000:00/0000:00:1a.7/usb1/1-4
UDEV [1186579006.525592] remove@/class/usb_endpoint/usbdev1.15_ep00
```

---

<div class="post-metadata">

**Author:** ![NaiosKAE](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/n/b9e5f3/32.png) [@NaiosKAE](https://www.debian-fr.org/u/NaiosKAE)\
**Post date:** [Février 20, 2016, 4:17 UTC](https://www.debian-fr.org/t/udev-et-clef-usb/7245/4 "2016-02-20T16:17:25Z")

</div>

j’ai trouvé…

comme ça ça fonctionne :

```auto
cat /etc/udev/rules.d/z80_local.rules
KERNEL=="sd?2", DRIVERS=="usb", ATTRS{idProduct}=="1000", ATTRS{idVendor}=="090c", ACTION=="add", NAME="key", RUN+="/home/erwann/bin/auto_connect"
DRIVERS=="usb", ACTION=="remove", RUN+="/home/erwann/bin/auto_disconnect"
```

des tests supplémentaire sont faits dans le deuxième script du coup.

---

<div class="post-metadata">

**Author:** ![bloodaxe70](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/ecae2f/32.png) [@bloodaxe70](https://www.debian-fr.org/u/bloodaxe70)\
**Post date:** [Février 20, 2016, 4:18 UTC](https://www.debian-fr.org/t/udev-et-clef-usb/7245/5 "2016-02-20T16:18:19Z")

</div>

Est ce que c’est possible de detecter l’insertion de cd/dvd dans le lecteur et de le monter via des règles udev? Avec udevmonitor, on ne voit rien lors de l’insertion d’un media dans le lecteur je pense que non, mais a tous hazard je demande.

Merci

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 4:18 UTC](https://www.debian-fr.org/t/udev-et-clef-usb/7245/6 "2016-02-20T16:18:19Z")

</div>

> [@](#):
>
> pmount c’est bien mais crée une entrée dans fstab c’est mieux.

Pourquoi ?
