La regla udev para conectar/desconectar USB no se activa

La regla udev para conectar/desconectar USB no se activa

Estoy ejecutando RHEL6 y estoy intentando escribir una regla udev que se activa al conectar y quitar dispositivos USB. Creé un archivo llamado 80-usb.rulesin /etc/udev/rules.d/y le di el siguiente contenido (hasta ahora nada demasiado específico, solo quiero probar):

ACTION=="add", SUBSYSTEMS=="usb", RUN+="touch /tmp/test"

Guardé el archivo y conecté una unidad USB para probar. Sin embargo, el archivo /tmp/testno fue creado.

Calculo que mi regla udev debería coincidir con mi unidad USB, ya que puedo ejecutarla udevadm infoen la unidad USB y al menos uno de los dispositivos principales tiene el atributo SUBSYSTEMS=="usb".

¿Por qué podría no activarse la regla udev?

Intenté ejecutarlo udevadm test --action=add /path/to/devicey está claro que el .rulesarchivo que escribí se está procesando y que mis reglas coinciden. Aquí hay algunas líneas relevantes del resultado:

parse_file: reading '/etc/udev/rules.d/80-usb.rules' as rules file
udev_rules_apply_to_event: RUN '/bin/touch /tmp/test' /etc/udev/rules.d/80-usb.rules:1
udevadm_test: run: '/bin/touch /tmp/test'

Pero aún así, /tmp/testno existe. Estoy muy confundido. Es evidente que esta regla se está cumpliendo y se están aplicando. Entonces, ¿por qué no se ejecuta el comando especificado por RUN?

Respuesta1

Su regla debe dar una ruta absoluta para el ejecutable:

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/usr/bin/touch /tmp/test"

Editar:

Y si desea ejecutar un script, debe indicar qué shell lo ejecutará:

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh /path/to/your/script"

Respuesta2

Tienes que asegurar lo siguiente:

  • Las rutas en el RUNcomando deben ser absolutas.
  • El archivo tiene que ser ejecutable.
  • El PATHentorno está limitado dentro de la ejecución de su comando.

Al principio agregue este archivo de script a/lib/udev/touch.sh

vim /lib/udev/touch.sh

en ese archivo escribe:

#!/bin/bash
touch /tmp/test

hacerlo ejecutable:

chmod +x /lib/udev/touch.sh

y cambie su archivo de reglas a:

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/lib/udev/touch.sh"

recarga tus reglas udev

udevadm control --reload-rules

Esto leerá tus reglas /lib/udev/rules.d/*nuevamente. Los cambios no se aplicarán hasta ahora.

Tenga en cuenta que udev ejecuta su script en un PATHentorno reducido. Debe asegurarse de que se pueda acceder a cualquier binario que no esté dentro de las rutas configuradas con una ruta completa. También puedes ampliar el PATHentorno dentro de tu script.

Verifique qué ruta está definida registrando la setsalida en un archivo de registro desde su script contenedor:

set >>/tmp/udev-env-test

Podría verse así:

PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

información relacionada