Réponses:
Il y a une solution beaucoup plus agréable avec systemd maintenant. Vous créez un service qui dépend et qui est recherché par votre média, 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 script de déclenchement. L'avantage par rapport à la règle udev est que le script se déclenche vraiment après le montage, pas 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é l'appareil, je dois taper le mot de passe. Si j'ai raccordé le script de sauvegarde à udev, le script tente de s'exécuter au moment où je tape le mot de passe, ce qui échouera.
Ressource: Script avec udev
Remarque: vous pouvez trouver votre appareil avec:systemctl list-units -t mount
systemctl enable your.service
. Le fichier de script doit être exécutable.
Requires=
, After=
et les WantedBy=
lignes avec media-bb.mount
et media-BB.mount
parce que Nautilus me montre le volume en tant que "BB", pas "bb". Même message d'erreur, sauf pour la capitalisation. Qu'est-ce qui ne va pas? Dois-je en quelque sorte créer ce media-<something>.mount
service?
Commencez par trouver votre appareil dans lsusb
. Notez l'ID (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 ajoutez 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
.
Ensuite, il vous suffit d'écrire le script pour effectuer le travail. Une simple commande de montage devrait fonctionner. Vous aurez peut-être besoin d'une sleep 5
commande pour attendre que le système de fichiers s'initialise (si vous laissez gnome faire le montage principal - mais vous êtes libre de le monter en premier et vous n'aurez peut-être pas besoin de sommeil).
Addition à partir d'Allan: Les scripts longs peuvent bloquer "tous les événements ultérieurs pour ce périphérique ou un périphérique dépendant". La page de manuel My Mint indique également "Les tâches de longue durée doivent être immédiatement détachées du processus d'événement lui-même." Aucune astuce n'est donnée pour savoir où acquérir l'habileté pour le faire.
Réponse de Oli: Envelopper comme ça: https://askubuntu.com/a/106359/449
/root/
ou à un endroit où seul root peut le modifier.
Une autre façon d'obtenir les valeurs pour ATTRS {idVendor} et ATTRS {idProduct} (testé dans Ubuntu 12.04) est la suivante:
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 ...
Utilisez udevadm pour obtenir les informations sur ce 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
Maintenant, utilisez l'ID de modèle pour ATTRS {idProduct} et l'ID de fournisseur pour ATTRS {idVendor}
ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
Dans Nautilus, sous Edition> Préférences> Multimédia, vous pouvez choisir "autre action" et que "commande costum". pour différents types de médias à exécuter. À ce moment-là, le lecteur USB est déjà monté, mais je suppose que vous pouvez toujours le lier (avec une commande costum) au dossier dans lequel vous souhaitez que le lecteur apparaisse. Je ne saurais dire si c'est plus facile ou meilleur que d'utiliser udev.
Si vous ne souhaitez 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 appareil, je vous suggère de ne pas suivre la route udev.
Utilisez plutôt udisks-glue si votre système utilise des udisks (presque tous le font).
Après l’installation, créez simplement un fichier de configuration ~/.udisks-glue.conf
dans votre répertoire personnel, comme ceci.
L'exemple suivant met à jour les données GPS-Assist sur mon appareil photo chaque fois que je connecte 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 que vous vous connectez. C'est à dire via les applications de démarrage de gnome
La réponse de @ sumid a un problème. Vous ne devriez pas démarrer le service. Vous devez juste l'activer.
fichier: /etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Activez ensuite le service:
sudo systemctl enable your.service
C'est tout.
Remarque: vous pouvez trouver votre étiquette médiane avec:sudo systemctl list-units -t mount
Remarque 2: Si le service échoue d'une manière ou d'une autre (par exemple, le script n'est pas exécutable), votre point de montage deviendra la <old_mount_point_name>1
prochaine fois que vous monterez le périphérique USB. Pour résoudre ce problème, il vous suffit d'exécutersudo systemctl reset-failed