udev su Ubuntu non funziona per il plug-in USB


0

Sto cercando di eseguire un'attività "semplice", eseguire uno script /usr/local/bin/USBTesting.shquando collego un dispositivo USB specifico. Ho creato /lib/udev/rules.d/99-USBTesting.rules /etc/udev/rules.d/10-USBTesting.rulesperché non ero sicuro di dove dovevo metterli. Per il contenuto di questi file ho usato tutti i seguenti (uno per uno):

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 naturalmente ha rilasciato il famigerato sudo udevadm control --reload-rulese ha persino riavviato il mio laptop "per ogni evenienza" un paio di volte.

Il contenuto di /usr/local/bin/USBTesting.sh:

#!/bin/sh -e
set -u

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

Niente di complicato, solo testandolo al momento. sudo chmod +x /usr/local/bin/USBTesting.shè stato applicato. Se corro /usr/local/bin/USBTesting.shfa quello che dovrebbe.

Sto davvero esaurendo le idee. Qualcuno è riuscito a far funzionare qualcosa di simile su un Ubuntu 14.04.1 LTS? Vorrei sentire la soluzione corretta.

EDIT: RUN+=“/usr/local/bin/USBTesting.sh”questo era nella mia regola udev RUN+="/usr/local/bin/USBTesting.sh"questo è quello corretto Un occhio non allenato (come il mio) non individuerà la differenza. e "sono diversi. E sembra che faccia la differenza.

La mia nuova regola udev è simile a: SUBSYSTEM=="usb", ATTRS{serial}=="f88331611c905b", RUN+="/usr/local/bin/USBTesting.sh"o

SUBSYSTEM=="usb", ATTRS{idVendor}=="18a5", ATTRS{serial}=="f88331611c905b", ATTRS{manufacturer}=="Verbatim", ATTRS{idProduct}=="0304", RUN+="/usr/local/bin/USBTesting.sh" - Ho ricevuto queste informazioni udevadm info -a -n sdc- Potrebbe essere necessario modificarle sdc.

Ora il mio script viene attivato ma due volte per ogni plugin.

EDIT 2: Si scopre che ho dovuto aggiungere ENV{DEVTYPE}=="usb_device"alla regola, e ora viene eseguito solo una volta. Ecco come appare la mia regola ora.

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

Risposte:


0

Ho provato qualcosa di simile e ha funzionato. Stai eseguendo un VirtualBox per caso? Ho avuto problemi con il mantenere attiva la porta USB, ma la macchina nativa Ubuntu 14.04 con kernel 4.0.5+ sembra funzionare bene. Le mie differenze stavano smorzando quello che dovevi (60-usb.rules):

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

Ho riutilizzato il tuo script per la stampa su /tmp/USBtesting.txt. Inoltre, l'unico comando aggiuntivo era:

$ sudo service udev restart

Dopo aver fatto ciò, USBtesting.txt viene scritto 6 volte per plug-in. Se si esegue direttamente lo script, viene chiamato il file USBtesting.txt?


Siamo spiacenti ma qual è stato il contenuto completo di 60-usb.rules? Non mi sembra di avere quel file sul mio PC. È una scatola fisica non virtuale.
elemer82,

La mia versione del kernel: 3.13.0-48-generic Se eseguo /usr/local/bin/USBTesting.sh dal terminale, viene chiamato (vengono aggiunte e timestamp le righe extra)
elemer82

Penso di aver trovato la causa del problema: RUN + = “/ usr / local / bin / USBTesting.sh” questo era nella mia regola udev RUN + = "/ usr / local / bin / USBTesting.sh" questo è quello corretto An occhio non allenato (come il mio) non individuerà la differenza. "E" sono diversi. E sembra che faccia la differenza.
elemer82

La mia regola udev ora viene attivata, ma due volte. Questa è la mia regola udev SUBSYSTEM == "usb", ATTRS {idVendor} == "18a5", ATTRS {serial} == "f88331611c905b", ATTRS {producer} == "Verbatim", ATTRS {idProduct} == "0304 ", RUN + =" / usr / local / bin / USBTesting.sh "
elemer82

Il file "60-usb.rules" è stato creato da me per il test e contiene solo quella riga. Hai detto che funziona ora, a causa del problema delle virgolette (probabilmente da copia / incolla), ma stampa due volte. Hai provato ad aggiungere di nuovo: ACTION == "add",
Crizzo

1

Su Ubuntu 14.04.3 LTS, sudo service udev restartè fondamentale:

La documentazione di udev dappertutto afferma che udev controlla le /etc/udev/rules.d/modifiche, ma questo non è il caso in questa distribuzione, quindi deve essere riavviato ogni volta che le regole vengono modificate.

Mi ha fatto allungare i capelli tutto il giorno! Grazie Crizzo!

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

Questo semplicemente sovrascrive /var/log/testquando quel particolare dispositivo è stato collegato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.