C'est en fait assez simple : vous devez écrire une règle udev personnalisée, que vous pouvez placer dans le répertoire
/etc/udev/rules.d/10-local.rules
L'avantage de cette méthode est que votre règle personnalisée sera lue avant les autres règles.
Ce fichier contiendra une seule ligne de cette forme
<conditions to be met> KERNEL=="sd?1", NAME="my_usb_adapter", RUN+="/home/my_name/bin/my_program"
La signification de ceci est :
- Les "conditions à remplir" sont un certain nombre de conditions, spécifiques à votre disque, qui l'identifient de manière unique, de sorte qu'aucune action n'est effectuée lorsqu'un autre disque dur est inséré ;
- KERNEL=="sd?1" indique à udev de commencer à vérifier cette règle uniquement lorsque de nouvelles partitions /dev/sda1, /dev/sdb1,... sont détectées. Si vous avez besoin, vous pouvez faire la même chose non pas avec une partition, mais avec le périphérique, auquel cas KERNEL=="sd ?" est l'instruction appropriée.
- NAME="my_usb_adapter" créera un noeud persistant à /dev/my_usb_adapter, afin que vous sachiez où trouver le dev à monter, si vous avez besoin de le monter.
- La règle RUN est évidente. N'oubliez pas de faire
my_program
exécutable sans nécessiter d'entrée ou de sortie du terminal.
Vous pouvez obtenir les informations nécessaires pour effectuer la correspondance avec la commande :
udevadm info -a -p $(udevadm info -q path -n /dev/sdb)
si votre disque est /dev/sdb, sinon modifiez comme bon vous semble. Cela fournira une grande quantité d'informations. Je chercherais
ATTRS{idVendor}=="18a5"
ATTRS{idProduct}=="0302"
ATTRS{serial}=="TT0E4E008XW3DT9H"
(ces valeurs sont pour un de mes dongles USB, vos valeurs seront différentes). Une mise en garde importante : les règles de correspondance doivent provenir du même dispositif parent, vous ne pouvez pas les mélanger.
Maintenant, nous pouvons écrire la règle finale comme :
ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0302", ATTRS{serial}=="TT0E4E008XW3DT9H", KERNEL=="sd?1", NAME="my_usb_adapter", RUN+="/home/my_name/bin/my_program"
Gardez à l'esprit que les fichiers udev ne peuvent pas casser les lignes : si vous le faites, udev verra la ligne cassée comme deux règles distinctes. Il n'y aura pas de sortie sur votre terminal. De plus, j'ai été assez prudent en distinguant =
, ==
y +=
: assurez-vous de ne pas introduire d'erreurs dans ce domaine.