Comment exécuter des scripts personnalisés sur un plug-in de périphérique USB?

Quelle est la méthode la plus avancée pour exécuter automatiquement des scripts personnalisés sur un plug-in de périphérique USB sous les dissortingbutions Linux actuelles comme Debian / CentOS / Fedora?

Par exemple, si vous souhaitez monter / copyr automatiquement certains files / démonter un périphérique de stockage de masse USB en fonction de son UUID (ou de son ID de périphérique, etc.).

Mettez une ligne comme celle-ci dans un file 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 path d'access personnalisé sous /dev .

Exécutez udevadm info -a -n sdb pour voir à quels attributes vous pouvez faire correspondre ( atsortingbute=="value" ; remplacez sdb par le nom du périphérique atsortingbué automatiquement au disque, correspondant à la nouvelle input créée dans /dev lorsque vous le twigz ). Notez que vous pouvez utiliser les clauses ATTRS de n'importe quelle strophe: vous pouvez choisir n'importe quelle strophe, mais les clauses ATTRS doivent provenir de la même strophe, vous ne pouvez pas mélanger. Vous pouvez mélanger des clauses ATTRS avec d'autres types de clauses répertoriées dans une autre strophe.

J'ai regardé dans /lib/udev/rules.d pour des exemples de règles liées au disque. Sur un système Ubuntu, un file de règles fournit la variable d'environnement ID_FS_UUID_ENC que vous pouvez utiliser dans vos propres files de règles.

Ainsi, je mets un file de règles personnalisé sous /etc/udev/rules.d/foodevice.rules . Comme il n'est pas précédé d'un nombre, il est enfin lancé par udev. Btw, le démon udev a regardé /etc/udev/rules.d pour des modifications telles que vous n'avez pas besoin de le redémarrer lors des changements de file.

Le contenu de /etc/udev/rules.d/foodevice.rules est le suivant:

 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 lancé par udev bloque le démon – il ne doit donc pas fonctionner longtime. Je l'ai résolu via at – c'est- at -dire en me détachant du process faisant le vrai travail:

 $ cat /home/juser/path/script.sh #!/bin/sh echo ~/path/mountcopystuff.sh | at now