Estoy tratando de familiarizarme con udev, en Ubuntu 13.10.
Aquí está mi primera regla simple 95.usbbackup.rules:
ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"
y aquí está el script (que ha sido modificado + x) my_backup.sh:
#!/bin/bash
touch /tmp/test
No ocurre nada cuando conecto unidades externas. ¿Cómo puedo verificar (un registro, un comando, cualquier cosa) si la regla se disparó?
Muchas gracias
SUBSYSTEMS=="usb"
. Es decir, el doble==
que prueba la igualdad en lugar del único=
que asigna un valor a una clave.Respuestas:
Estoy bastante seguro de que esto debería funcionar. ¿Recargó sus reglas de udev después de editar sus reglas?
udevadm control --reload-rules && udevadm trigger
como raízfuente
KERNEL!="sdz*"
y debería obtener todo (excepto sdz [1-9])udevadm monitor
Puede dar un comando como root como este:
Se mostrará cuando se haya activado una regla.
fuente
udevadm monitor
solo muestra los eventos de udev, pero no si se activó una regla correspondiente. Sin embargo, puede buscar el evento que debe activar la regla, pero luego no sabe si su regla funciona.Estoy ejecutando el kernel 3.0.35, pero lo siguiente funciona para mí.
Para obtener la ruta del dispositivo, puede hacer algo como esto:
Obtendrá más información de la que necesita, pero le interesa el DEVPATH. Luego, para ver qué reglas de udev se ejecutan, ejecute esto:
No creo que esto realmente ejecute las reglas, la documentación dice que 'simula' los eventos para el dispositivo dado. Para obtener más información, consulte esta página de manual: https://www.freedesktop.org/software/systemd/man/udevadm.html
fuente
Con udev / systemd versión 241 y similar, como root:
O para hacerlo permanente, nuevamente como root:
PD: la respuesta incorrecta más frecuente pero en mi humilde opinión se parece a:
udevadm -d test / devices / where / is / my / device | y menos... pero esto tiene varios problemas. Los principales:
where/is/my/device
? Tedioso, complicado y propenso a errores.Al comparar las respuestas anteriores con la salida reciente de udev versión 241,
udevadm test
parece mostrar menos información que antes.udevadm -d test
es solo una simulación ! Cada vez que advierte:Este programa es solo para depuración, no ejecuta ningún programa especificado por una tecla RUN. Puede mostrar resultados incorrectos, porque algunos valores pueden ser diferentes o no estar disponibles en una ejecución de simulación.
udevadm test
es para desarrollar una nueva regla, no es para solucionar problemas de reglas rotas, faltantes o anuladas.fuente
Estaba teniendo el mismo problema con Raspberry Pi 3 B +. Intenté invocar un script al insertar un dispositivo de almacenamiento USB. Las reglas no se registran en syslog, por lo que se hace muy difícil entender qué regla funcionó o qué falló.
Entonces hice lo siguiente:
sudo /etc/init.d/udev restart
y cuando revisé, funcionó.
Una información, que puede o no ser útil, es que los sistemas de archivos son de solo lectura para udev hasta que se ejecute el comando en el paso 2.
fuente
udevadm test $(udevadm info --query=path --name=device_name)
debería decirle qué comandos se ejecutarían en un dispositivo conectado, citando lasudev
reglas involucradas. Por ejemplo:fuente