Mám USB klíč, který obsahuje moji databázi hesel keepass2, a rád bych provedl nějaké akce, když je připojen k mému počítači, konkrétně:
- Automaticky jej připojit k určitému konkrétnímu umístění
- Když je připojení provedeno správně, spustí se keepass2 v souboru databáze hesel
Myslím, že jednoduché úkoly, ale nemůžu najít, jak to udělat.
Používám Ubuntu 12.10 a automaticky připojí zařízení jako „mediální usb klíč“ a pokusí se na něm otevřít obrázky (i když žádné nejsou).
Jaký je nejlepší způsob, jak to udělat a jak deaktivovat automatické připojování ubuntu (aby to nebylo v konfliktu)?
Přijatá odpověď:
Když se objeví nové zařízení, udev je upozorněn. Normálně vytvoří soubor zařízení pod /dev
na základě vestavěných pravidel¹. Tato pravidla můžete přepsat a změnit umístění souboru zařízení nebo spustit libovolný program. Zde je příklad takového pravidla udev:
KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"
NAME=
direktiva mění umístění souboru zařízení, zahrnul jsem ji pro ilustrační účely, ale pravděpodobně to není užitečné pro váš případ použití. ATTRS
pravidla identifikují zařízení; spusťte udevinfo -a -n /dev/sdz
když je disk dostupný jako /dev/sdz
abyste viděli, jaké má atributy. Pozor, můžete použít pouze ATTRS
pravidla z jedné části udevinfo
vstup (kromě toho můžete použít ATTR
pravidla z úvodní části). Další informace naleznete v části Vysvětlení výstupu `udevadm info -a -n /dev/sdb`. Toto pravidlo jde do souboru nazvaného něco jako /etc/udev/rules.d/local-storage-keypass.rules
.
Vložte příkazy, které chcete spustit, do skriptu uvedeného v RUN
směrnice. Něco jako:
#!/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' &
Pokud máte potíže se spuštěním programu GUI ze skriptu spouštěného z udev, přečtěte si článek Mohu spustit grafický program na ploše jiného uživatele jako root?
¹ Ne na moderních systémech, kde je /dev
je na udevtmpfs.