3 votes

Comment lancer un programme lorsque le disque dur spécifique est connecté (dans Debian) ?

Je veux exécuter automatiquement une commande spécifique chaque fois qu'un lecteur (un lecteur spécifique, ou n'importe quel lecteur) est branché à chaud. J'utilise un système Debian sans tête.

Pour être plus précis, je veux monter automatiquement le disque. Je pourrais le faire avec AutoFS, mais c'est un lecteur Truecrypt, et AutoFS ne fonctionnera pas avec cela AFAIK. J'ai donc besoin d'exécuter une sorte de script chaque fois qu'un lecteur est connecté, qui détectera le lecteur et exécutera les commandes nécessaires.

Comment puis-je faire quelque chose automatiquement en réponse à la connexion d'un lecteur ? Mais aussi, comment faire autre chose en réponse au retrait du lecteur ?

4voto

MariusMatutiae Points 45233

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 :

  1. 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é ;
  2. 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.
  3. 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.
  4. 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.

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