Quelle est la méthode de pointe pour exécuter automatiquement des scripts personnalisés sur un plug-in de périphérique USB dans les distributions Linux actuelles comme Debian/CentOS/Fedora?
Par exemple, si vous souhaitez monter/copier automatiquement certains fichiers/démonter un périphérique de stockage de masse USB en fonction de son UUID (ou de son ID, etc.).
Mettez une ligne comme celle-ci dans un fichier dans /etc/udev/rules.d
:
KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"
Ajoutez une clause comme NAME="subdir/mydisk%n"
si vous souhaitez utiliser un chemin d'entrée personnalisé sous /dev
.
Courir udevadm info -a -n sdb
pour voir quels attributs vous pouvez comparer (attribute=="value"
; remplacez sdb
par le nom de périphérique attribué automatiquement au disque, correspondant à la nouvelle entrée créée dans /dev
lorsque vous le branchez). Notez que vous pouvez utiliser les clauses ATTRS
à partir de n'importe quelle strophe one: vous pouvez choisir n'importe quelle strophe, mais les clauses ATTRS
doivent toutes provenir de la même strophe, vous pouvez ' t mélanger et assortir. Vous pouvez mélanger des clauses ATTRS
avec d'autres types de clauses répertoriées dans une strophe différente.
J'ai examiné /lib/udev/rules.d
pour des exemples de règles relatives au disque. Sur un système Ubuntu, un fichier de règles fournit la variable d'environnement ID_FS_UUID_ENC
que vous pouvez utiliser dans vos propres fichiers de règles.
J'ai donc mis un fichier de règles personnalisé sous /etc/udev/rules.d/foodevice.rules
. Puisqu'il n'est pas préfixé d'un nombre, il est enfin exécuté par udev. Btw, le démon udev a regardé /etc/udev/rules.d
pour les modifications telles que vous n'avez pas besoin de le redémarrer lors des modifications de fichier.
Le contenu de /etc/udev/rules.d/foodevice.rules
est:
ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
RUN+="/usr/bin/Sudo -u juser /home/juser/path/script.sh"
(c'est une règle - vous devez supprimer la nouvelle ligne après la clause ENV car udev n'a pas de mécanisme de continuation de ligne)
Un programme démarré par udev bloque le démon - il ne devrait donc pas fonctionner pendant longtemps. Je l'ai résolu via at
- c'est-à-dire en se détachant du processus faisant le vrai travail:
$ cat /home/juser/path/script.sh
#!/bin/sh
echo ~/path/mountcopystuff.sh | at now