J'ai essayé de créer des règles udev pour monter et démonter mes lecteurs flash USB; les règles du moment sont très simples:
ACTION=="add",KERNEL=="sd[b-z]",RUN+="/root/scripts/plug_flash_drive.sh %k"
ACTION=="remove",KERNEL=="sd[b-z]",RUN+="/root/scripts/unplug_flash_drive.sh %k"
plug_flash_drive.sh est également très simple:
device_name=$1
mount_options="umask=000,utf8"
if [ ! -e "/media/$device_name" ]; then
mkdir "/media/$device_name"
fi
sleep 1
/usr/bin/mount "/dev/$device_name" "/media/$device_name" -o "$mount_options"
unplug_flash_drive.sh:
device_name=$1
umount "/dev/$device_name"
rmdir "/media/$device_name"
J'ai fait quelques tests afin de pouvoir vérifier que:
- Lorsqu'il est branché, mon lecteur flash est détecté; un fichier est créé dans / dev
- plug_flash_drive.sh est appelé par udev
- la partie mkdir du script fonctionne
- cependant, il semble que la partie "montage" du script ne soit pas exécutée, donc mon lecteur n'est pas monté
- quand j'appelle mes scripts sur la ligne de commande, ils fonctionnent parfaitement
Quelqu'un sait-il pourquoi le montage n'est pas exécuté lorsqu'il est appelé par udev?
EDIT 28/08/14: J'ai ajouté "grep -q / proc / mounts && echo success || echo failure" à la fin de mon script pour vérifier dans mon journal de débogage si le périphérique est réellement monté avant la fin du script. Il semble que le périphérique soit monté à ce point même lorsque le script est appelé par udev. Donc, le vrai problème est maintenant "mon périphérique de bloc est apparemment démonté après la fin du script de montage lorsqu'il est appelé via udev": s
set -xv
et exec >> "$HOME"/mount.log 2>&1
dans les .sh
fichiers?
mkdir "$mount_dir"
maisrmdir "/media/$device_name"
? Où est$mount_dir
placé?