Cuando aparece un nuevo dispositivo, se notifica a udev . Normalmente crea un archivo de dispositivo /devbasado en reglas integradas¹. Puede anular estas reglas para cambiar la ubicación del archivo del dispositivo o ejecutar un programa arbitrario. Aquí hay una muestra de dicha regla udev:
KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"
La NAME=directiva cambia la ubicación del archivo del dispositivo, lo incluí con fines ilustrativos, pero probablemente no sea útil para su caso de uso. Las ATTRSreglas identifican el dispositivo; ejecutar udevinfo -a -n /dev/sdzcuando la unidad está disponible /dev/sdzpara ver qué atributos tiene. Tenga en cuenta que solo puede usar ATTRSreglas de una sola sección de la udevinfoentrada (además, puede usar ATTRreglas de la sección inicial). Consulte Comprender la salida de `udevadm info -a -n / dev / sdb` para obtener más información. Esta regla entra en un archivo llamado algo así /etc/udev/rules.d/local-storage-keypass.rules.
Ponga los comandos que desea ejecutar en el script dado en la RUNdirectiva. Algo como:
#!/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 tiene problemas para ejecutar un programa GUI desde un script activado desde udev, consulte ¿Puedo iniciar un programa gráfico en el escritorio de otro usuario como root?
¹ No en sistemas modernos donde /devestá en udevtmpfs.
udevadm info -a -n /dev/sdX, no puede coincidir en función de varios antepasados. Solo puede coincidir en función de los datos del propio dispositivo y un solo antepasado. Esto está cubiertoman 7 udev, pero es un pequeño comentario que fácilmente se pasa por alto.