udev no Ubuntu não funciona para plug USB

0

Estou tentando fazer uma tarefa "simples", executar um script /usr/local/bin/USBTesting.sh quando eu conectar um dispositivo USB específico. Eu criei /lib/udev/rules.d/99-USBTesting.rules /etc/udev/rules.d/10-USBTesting.rules porque eu não tinha certeza sobre onde deveria colocá-los. Para o conteúdo desses arquivos, usei todos os itens a seguir (um por um):

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh"
ACTION==“add”, SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18a5”, SYSFS{idProduct}==“0304”, RUN+=“/usr/local/bin/USBTesting.sh”
ACTION=="add", KERNEL=="sd[a-z]*", RUN+=“/usr/local/bin/USBTesting.sh”
SYSFS{idVendor}==“18a5”, SYSFS{idProduct}==“0304”, RUN+=“/usr/local/bin/USBTesting.sh”
ACTION==“add”, SUBSYSTEM==“usb_device”, RUN+=“/usr/local/bin/USBTesting.sh”
ACTION==“add”, KERNEL=="sd*[!0-9]", RUN+=“/usr/local/bin/USBTesting.sh”
ATTRS{model}=="STORE N GO      ", ATTRS{vendor}=="Verbatim", RUN+=“/usr/local/bin/USBTesting.sh”
SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh"
KERNEL=="*", RUN+=“/usr/local/bin/USBTesting.sh”

E, claro, emitiu o infame sudo udevadm control --reload-rules e até mesmo reiniciou o meu Laptop "apenas no caso" algumas vezes.

O conteúdo do /usr/local/bin/USBTesting.sh :

#!/bin/sh -e
set -u

echo $(date) Started >> /tmp/USBTesting.txt
echo $(date) Started >> /home/elemer/USBTesting.txt

Nada complicado, apenas testando no momento. sudo chmod +x /usr/local/bin/USBTesting.sh foi aplicado. Se eu executar /usr/local/bin/USBTesting.sh , ele faz o que deveria.

Estou realmente ficando sem ideias. Alguém conseguiu obter algo semelhante trabalhando em um 14.04.1 LTS do Ubuntu? Gostaria de ouvir a solução correta.

EDITAR: RUN+=“/usr/local/bin/USBTesting.sh” esta estava na minha regra do udev RUN+="/usr/local/bin/USBTesting.sh" este é o correto Um olho destreinado (como o meu) não detectará a diferença. e " são diferentes. E parece que faz a diferença.

Minha nova regra do udev se parece com: SUBSYSTEM=="usb", ATTRS{serial}=="f88331611c905b", RUN+="/usr/local/bin/USBTesting.sh" ou

SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{serial}=="f88331611c905b", ATTRS{manufacturer}=="Verbatim", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh" - obteve essas informações de udevadm info -a -n sdc - talvez seja necessário alterar sdc para você.

Agora meu script é acionado, mas duas vezes para cada plug-in.

EDIT 2: Acontece que eu tive que adicionar ENV{DEVTYPE}=="usb_device" à regra e agora ela é executada apenas uma vez. É assim que minha regra se parece agora.

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="18a5", ATTRS{serial}=="f88331611c905b", ATTRS{manufacturer}=="Verbatim", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting"

    
por elemer82 09.03.2015 / 19:56

2 respostas

0

Eu tentei algo parecido e funcionou. Você está executando um VirtualBox por acaso? Eu tive problemas em fazer com que a porta USB permanecesse ativa, mas a máquina nativa Ubuntu 14.04 com kernel 4.0.5+ parece funcionar bem. Minhas diferenças estavam emburrecendo o que você tinha (60-usb.rules):

RUN+=“/usr/local/bin/USBTesting.sh”

Eu reutilizei seu script para impressão no /tmp/USBtesting.txt. Além disso, o único comando extra era:

$ sudo service udev restart

Depois de fazer isso, o USBtesting.txt é escrito 6 vezes por plug in. Se você executar o script diretamente, seu arquivo USBtesting.txt será chamado?

    
por 29.03.2015 / 00:51
1

No Ubuntu 14.04.3 LTS, sudo service udev restart é crítico:

A documentação do udev em todos os locais diz que o udev monitora /etc/udev/rules.d/ para alterações, mas este não é o caso sob esta distro, então ele precisa ser reiniciado toda vez que o regras são alteradas.

Me fez esticar meu cabelo o dia todo! Obrigado Crizzo!

Meu /etc/udev/rules.d/test.rules : (todas uma linha) ACTION=="add", SUBSYSTEMS=="usb", ENV{ID_SERIAL}=="Lattice_Lattice_FTUSB_Interface_Cable", RUN+="/bin/sh -c 'echo blah > /var/log/test'"

Isso sobrescreve /var/log/test quando esse dispositivo específico foi conectado.

    
por 02.02.2016 / 03:02