regra udev para anexar / desmarcar usb não acionando

5

Estou executando o RHEL6 e estou tentando gravar uma regra do udev que é acionada ao conectar e remover dispositivos usb. Eu criei um arquivo chamado 80-usb.rules em /etc/udev/rules.d/ e dei o seguinte conteúdo (até agora nada muito específico, só quero testar):

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

Salvei o arquivo e conectei uma unidade USB para testar. No entanto, o arquivo /tmp/test não foi criado.

Eu acho que minha regra do udev deve corresponder à minha unidade USB, pois posso executar udevadm info na unidade USB e pelo menos um dos dispositivos pai possui o atributo SUBSYSTEMS=="usb" .

Por que a regra do udev não é acionada?

Eu tentei executar udevadm test --action=add /path/to/device e está claro que o arquivo .rules que eu escrevi está sendo processado e que minhas regras estão sendo correspondidas. Aqui estão algumas linhas relevantes da saída:

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'

Mas ainda assim, /tmp/test não existe. Estou tão confuso. Claramente esta regra está sendo correspondida e as regras estão sendo aplicadas. Então, por que o comando especificado por RUN execute?

    
por jayhendren 23.04.2013 / 01:40

2 respostas

1

Sua regra deve fornecer um caminho absoluto para o executável:

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

Editar:

E se você quiser executar um script, você deve dizer qual shell irá executá-lo:

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh /path/to/your/script"
    
por 03.01.2016 / 14:24
1

Você precisa garantir o seguinte:

  • Os caminhos no comando RUN devem ser absolutos
  • O arquivo precisa ser executável
  • O ambiente PATH é limitado dentro da execução do seu comando

Adicione primeiro este arquivo de script a /lib/udev/touch.sh

vim /lib/udev/touch.sh

nesse arquivo, escreva:

#!/bin/bash
touch /tmp/test

torne-o executável:

chmod +x /lib/udev/touch.sh

e altere seu arquivo de regras para:

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

recarregue suas regras do udev

udevadm control --reload-rules

Isso lerá suas regras em /lib/udev/rules.d/* novamente. As alterações não serão aplicadas até agora.

Observe que o udev executa seu script com um ambiente PATH reduzido. Você precisa garantir que qualquer binário que não esteja nos caminhos configurados tenha que ser acessado com um caminho completo. Você também pode estender o ambiente PATH dentro do seu script.

Verifique qual caminho está definido registrando a saída set em um arquivo de log do seu script de wrapper:

set >>/tmp/udev-env-test

Pode parecer assim:

PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
    
por 06.11.2013 / 14:29

Tags