Activar una acción cuando se conecta un volumen específico


10

Tengo una memoria USB que contiene mi base de datos de contraseñas keepass2 y me gustaría realizar algunas acciones cuando está conectada a mi computadora, a saber:

  • Montarlo automáticamente en una ubicación específica
  • Cuando el montaje se realiza correctamente, iniciando keepass2 en el archivo de base de datos de contraseñas

Tareas simples, supongo, pero no puedo encontrar cómo hacerlo.

Estoy usando Ubuntu 12.10, y monta automáticamente el dispositivo como una "clave usb de medios" e intenta abrir las imágenes (aunque no haya ninguna).

¿Cuál es la mejor manera de hacer eso y deshabilitar el montaje automático de ubuntu (para que no entre en conflicto)?

Respuestas:


8

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.


1
Nota importante sobre esto: al escribir reglas utilizando la información de 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á cubierto man 7 udev, pero es un pequeño comentario que fácilmente se pasa por alto.
Patrick

1

La mejor manera de hacerlo sería escribir sus propias reglas de udev para este dispositivo. Lamentablemente, no puedo dar ningún consejo sobre cómo hacer esto, ya que nunca lo he hecho. Entonces, a menos que alguien más tenga una respuesta más detallada, busque 'reglas de udev' en Google y busque ejemplos en / lib / udev. Sus reglas de udev personalizadas deben ir en /etc/udev/rules.d


Gracias por la info. Esto al menos hará que mis búsquedas sean más eficientes.
antes del
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.