55 votes

Comment lancer un script quand un flash-drive spécifique est monté ?

Existe-t-il un moyen d'exécuter un script lorsqu'un périphérique USB particulier est monté ?

Je garde mes vidéos sur une clé USB séparée et je voudrais exécuter un script qui monterait le dossier vidéo sur le périphérique USB vers celui du dossier d'accueil.

43voto

llazzaro Points 1392

Il existe une solution beaucoup plus agréable avec systemd maintenant. Vous créez un service qui dépend et est souhaité par vos médias, par exemple : /etc/systemd/system/your.service

[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount

[Service]
ExecStart=/home/you/bin/triggerScript.sh

[Install]
WantedBy=media-YourMediaLabel.mount

Ensuite, vous devez démarrer/activer le service :

sudo systemctl start your.service
sudo systemctl enable your.service

Après le montage, systemd déclenche votre trigger script. L'avantage par rapport à la règle udev est que le script se déclenche réellement après le montage, et non après l'ajout d'un périphérique système.

Cas d'utilisation : J'ai une partition cryptée que je veux sauvegarder automatiquement. Après avoir ajouté le périphérique, je dois taper le mot de passe. Si j'ai accroché la sauvegarde script à udev, le script tente de s'exécuter au moment où je tape le mot de passe, ce qui échouera.

Ressource : Scripting avec udev

Note : Vous pouvez trouver l'unité de votre appareil avec :

systemctl list-units -t mount

31voto

Mufaka Points 54

Commencez par trouver votre appareil dans lsusb . Notez l'identifiant (par exemple 0a81:0101 )

Créez un nouveau fichier de règles udev dans /etc/udev/rules.d/ via sudoedit /etc/udev/rules.d/100-mount-videos.rules et y insérer une nouvelle règle comme celle-ci :

ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"

Notez comment j'ai utilisé l'ID de lsusb .

Il vous suffit alors d'écrire le script pour faire le travail. Une simple commande mount devrait fonctionner. Vous pourriez avoir besoin d'un sleep 5 pour attendre l'initialisation du système de fichiers (si vous laissez gnome faire le montage principal - mais vous êtes libre de le monter d'abord et vous n'aurez peut-être pas besoin du sleep).

Ajout d'Allan : De longs scripts en cours d'exécution pourraient bloquer "tous les autres événements pour ce dispositif ou un dispositif dépendant". Ma page de manuel Mint indique en outre que "les tâches en cours d'exécution prolongée doivent être immédiatement détachées du processus d'événement lui-même". Aucun conseil n'est donné sur l'endroit où acquérir la compétence pour le faire.

Réponse d'Oli : Enveloppez-le comme ça : https://askubuntu.com/a/106359/449

8voto

emont01 Points 181

Une autre façon d'obtenir les valeurs de ATTRS{idVendor} et ATTRS{idProduct} (testé dans Ubuntu 12.04) est la suivante :

  1. Trouvez où votre USB est monté :

    $ mount | grep /dev/sd*

    cela montre quelque chose comme ce qui suit :

    /dev/sdb on /media/SOMEDIR type vfat ...
  2. Utilisez udevadm pour obtenir ces informations sur le périphérique :

    udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'

    la sortie devrait être quelque chose comme :

    E: ID_MODEL_ID=001a
    E: ID_VENDOR_ID=002b
  3. Utilisez maintenant l'id du modèle pour ATTRS{idProduct} et l'id du fournisseur pour ATTRS{idVendor}.

    ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...

2voto

Jeremy Gruenwald Points 1112

Dans Nautilus sous Edit>Preferences>Media vous pouvez choisir "other action" et ensuite "custom command" pour différents types de scripts/commandes à exécuter. À ce moment-là, le lecteur usb est déjà monté, mais je suppose que vous pourriez toujours le lier (avec une commande personnalisée) au dossier dans lequel vous voulez que le lecteur apparaisse. Je ne pourrais pas dire si cela est plus facile ou meilleur que d'utiliser udev.

1voto

Matthew Points 31

Si vous ne voulez pas interférer avec le contrôle de votre gestionnaire de fichiers (nautilus, konquerer, gnome, etc) sur le montage et le démontage de votre périphérique, je vous suggère de ne pas suivre la route udev.

Au lieu de cela, utilisez udisks-glue si votre système utilise des udisks (presque tous le font).

Après l'installation, il suffit de créer un fichier de configuration ~/.udisks-glue.conf dans votre répertoire personnel comme ceci.

L'exemple suivant met à jour les données GPS-Assist de mon appareil photo chaque fois que je branche la carte SD.

filter BT16EXTREME {
  optical = false
  partition_table = false
  usage = filesystem
  label = BT16EXTREME
}
match BT16EXTREME {
  post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}

Ensuite, assurez-vous que udisks-glue démarre lorsque vous démarrez ou vous connectez. C'est-à-dire via les applications de démarrage de gnome.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X