GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Ubuntu – Déclencher une action lorsqu'un volume spécifique est connecté ?

J'ai une clé USB qui contient ma base de données de mots de passe keepass2 et j'aimerais effectuer certaines actions lorsqu'elle est branchée sur mon ordinateur, à savoir :

  • Montez-le automatiquement à un emplacement spécifique
  • Lorsque le montage est correctement effectué, lancer keepass2 sur le fichier de base de données de mots de passe

Des tâches simples je suppose, mais je ne trouve pas comment faire ça.

J'utilise Ubuntu 12.10, et il monte automatiquement l'appareil en tant que "clé USB multimédia" et essaie d'ouvrir les images dessus (même s'il n'y en a pas).

Quelle est la meilleure façon de faire cela et de désactiver le montage automatique d'ubuntu (pour qu'il n'y ait pas de conflit) ?

Réponse acceptée :

Lorsqu'un nouveau périphérique apparaît, udev en est averti. Il crée normalement un fichier de périphérique sous /dev basé sur des règles intégrées¹. Vous pouvez remplacer ces règles pour modifier l'emplacement du fichier de périphérique ou exécuter un programme arbitraire. Voici un exemple de règle udev :

KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"

Le NAME= change l'emplacement du fichier de périphérique, je l'ai inclus à des fins d'illustration mais ce n'est probablement pas utile pour votre cas d'utilisation. Le ATTRS les règles identifient l'appareil ; exécutez udevinfo -a -n /dev/sdz lorsque le lecteur est disponible en tant que /dev/sdz pour voir quels sont ses attributs. Attention, vous ne pouvez utiliser que ATTRS règles d'une seule section de udevinfo entrée (en plus, vous pouvez utiliser ATTR règles de la section initiale). Voir Comprendre la sortie de `udevadm info -a -n /dev/sdb` pour plus d'informations. Cette règle va dans un fichier appelé quelque chose comme /etc/udev/rules.d/local-storage-keypass.rules .

Mettez les commandes que vous souhaitez exécuter dans le script donné dans le RUN directif. Quelque chose comme :

#!/bin/sh
set -e
if [ -d /media/keypass-drive ]; then
  [ "$(df -P /media/keypass-drive | awk 'NR==2 {print $1}')" = "$(df -P /media | awk 'NR==2 {print $1}')" ]
else
  mkdir /media/keypass-drive
fi
mount "$1" /media/keypass-drive
su ereon -c 'keypass2' &

Si vous rencontrez des difficultés pour exécuter un programme graphique à partir d'un script déclenché depuis udev, consultez Puis-je lancer un programme graphique sur le bureau d'un autre utilisateur en tant que root ?

¹ Pas sur les systèmes modernes où /dev est sur udevtmpfs.


Ubuntu
  1. Comment ajouter un fichier d'échange sur Ubuntu

  2. Lorsque les fichiers exécutables ne le sont pas ?

  3. Pas de son de démarrage dans Ubuntu 11.10 ?

  4. Ajouter du volume d'échange ?

  5. Comment installer g ++ sur Ubuntu

Comment désactiver automatiquement le pavé tactile lorsque la souris est connectée à votre système Ubuntu

Comment installer CouchPotato sur Ubuntu

Comment renommer des fichiers dans Ubuntu 20.04

Que faire lorsque vous voyez l'erreur "Le référentiel n'a pas de fichier de version" dans Ubuntu

Le périphérique de sortie audio sélectionné ne persiste pas entre les redémarrages dans Gnome-control-center ?

Se connecter automatiquement au Vpn lors de l'utilisation d'un réseau spécifique dans Ubuntu Gnome 16.04 ?