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.