Não é possível executar script usando regras do udev

4

Prescrição: já pesquisei perguntas semelhantes, mas não consegui encontrar uma resposta útil.

Antecedentes: Estou usando o Fedora de 64 bits. Eu quero executar um script específico /bin/usbattached.sh quando um usb está conectado. Estou usando o pendrive Kingston Datatraveller cujo Id do fornecedor é 0951 e o Id do produto é 1660 (conforme encontrado no dmesg e em outros métodos). Eu encontrei dois diretórios udev rules.d em minha máquina, ou seja, /etc/udev/rules.d e /lib/udev/rules.d Como não tenho certeza de qual diretório usar, eu criei meu arquivo de regras em ambos diretórios acima mencionados. Abaixo está minha regra

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1660", RUN+="/bin/usbattached.sh"

Eu removi ACTION, mudei RUN + = para RUN =, escrevi em novo arquivo, bem como arquivos de regras pré-existentes, tudo sem sorte.

eu uso

udevadm control --reload-rules 

e

systemctl restart udev.service  

para reiniciar o udev.

Quando executo o teste do udevadm no meu dispositivo, ele mostra que ele lê meu arquivo de regras, mas o script não funciona. Qualquer método para depurá-lo será muito apreciado.

O script /bin/usbattached.sh envia uma notificação para o canto superior direito da tela, echo é uma mensagem na tela e acrescenta a data / hora atual ao arquivo ~ / op, quando executado manualmente. Infelizmente, nenhuma das ações mencionadas acima está sendo executada quando o usb está conectado.

EDIT: Ao adicionar o sleep 10 ao meu script usbattached.sh, noto que o usb é montado aproximadamente após 18 segundos. Este tempo muda quase linearmente com a mudança do valor de 10 também. Parece que o script está sendo executado, mas eu não estou tendo nenhuma notificação, nem há uma nova linha anexada ao arquivo de saída

    
por Hamzahfrq 06.02.2014 / 12:09

2 respostas

5

Apenas alguns erros bobos da minha parte. Abaixo estão as razões para nenhuma saída

  1. O udev não produz saída para nenhum tipo de terminal / notificação. Eu o encontrei aqui !

udev does not run these programs on any active terminal, and it does not execute them under the context of a shell. Be sure to ensure your program is marked executable, if it is a shell script ensure it starts with an appropriate shebang (e.g. #!/bin/sh), and do not expect any standard output to appear on your terminal.

  1. para redirecionar a saída para o arquivo, eu estava usando ~ em vez de todo o caminho do diretório inicial do usuário. Alterá-lo para o caminho absoluto produziu a saída. Para o registro, eu coloquei minha regra em 12-hf-usb.rules . O único problema que estou enfrentando é que o script é executado duas vezes, mesmo depois de usar RUN= . Vou editar a resposta assim que a encontrar. Parece que tenho que tornar a regra mais específica, para corresponder a apenas um dispositivo. Não é importante para mim no momento, então vou ignorá-lo

Muitas pessoas estão enfrentando problemas ao usar o udev. Aqui está alguma ajuda para resolver os problemas:

udevinfo e as ferramentas relacionadas foram substituídas por udevadm . Abaixo estão alguns comandos úteis:

  • udevadm monitor --udev para visualizar a atividade do udev ao adicionar / remover hardware em tempo real
  • lsusb para ver dispositivos USB conectados
  • udevadm info --attribute-walk --name /dev/sdc? para ver detalhes hierárquicos de dispositivos

Fonte: link

    
por 07.02.2014 / 10:44
4

Sobre o script sendo executado duas vezes.

Isso ocorre porque o script é executado para os eventos sdc e sdc1 . Para corrigir, use uma regra do udev com ATTR {partition}. ou seja:

 ACTION=="add", SUBSYSTEM=="block", ATTR{partition}=="*", RUN+=...
    
por 17.07.2014 / 17:24

Tags