(ubuntu 16.04) Como posso detectar um evento de inserção USB independente do dispositivo

7

Estou tentando detectar uma inserção USB, independentemente do dispositivo. Por exemplo: um telefone, uma bateria, um sistema biométrico, etc., que pode ou não ser reconhecido pelo Linux (sem drivers ou nada para "Drive / run"). Presumivelmente, o Linux detectará a inserção USB (independente do dispositivo) e, em seguida, procederá para registrar e atuar somente em dispositivos reconhecidos. Por exemplo, ele listará os detalhes reconhecidos do dispositivo USB em / dev / bus / usb / etc. Em vez disso, eu gostaria de capturar / processar tudo o que é inserido em um slot USB. Isso supõe, presumivelmente, que não posso depender de coisas como o udevadm, pois ele só entra em dispositivos reconhecidos. Isso também significa que eu preciso interceptar o evento de inserção no início da curva. Como faço isso?

    
por Vivek 09.10.2016 / 05:17

2 respostas

0

Uma maneira de capturar todo o tráfego através do USB é usar o wireshark após inserir o módulo do kernel usbmon, conforme detalhado em:

Monitoramento Wireshark USB

Isso é o mais cedo possível na curva. Mas estou supondo que sua intenção é usar algum tipo de gatilho programático, como um evento, para fazer algo interessante - então, considerando que executar 'lsusb -t' fornece uma lista estática de dispositivos USB inseridos, juntamente com seus respectivos drivers (se existirem), você poderia criar um cron job para executar o lsusb e compará-lo com a versão anterior para verificar se um novo dispositivo foi inserido, mesmo que não tenha um driver associado a ele.

A desvantagem desta solução simples é a grande latência que o cron fornece entre inserção e detecção.

    
por 30.12.2016 / 21:32
0

Eu não acredito que você possa fazer isso com dispositivos burros, como mencionado em @meuh comment aqui. . Com dispositivos que realmente se comunicam, udevadm monitor funciona bem. Aqui está um exemplo de conectar e desconectar um telefone Android (ligado):

$ udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[115749.498687] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
KERNEL[115749.499591] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
UDEV  [115749.511659] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
UDEV  [115749.516846] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
KERNEL[115767.515839] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
KERNEL[115767.516143] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
UDEV  [115767.517088] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0 (usb)
UDEV  [115767.522116] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)

Uma unidade flash produz resultados semelhantes, mas muito mais detalhados. Se você quisesse usar essas informações para acionar alguma ação, poderia redirecionar a saída para um arquivo e usar tail para monitorar o arquivo em busca de nova atividade.

Os testes com um telefone Android (desligado, mas carregando) não indicaram nenhuma alteração na lsusb -v |grep Power de saída, que a IMHO confirma que dispositivos burros que apenas consomem ou fornecem energia não podem ser detectados.

Outra forma simples de detectar dispositivos que não são burros é armazenar informações de linha de base e comparar as informações atuais com isso. Existem várias maneiras de fazer isso. Uma alternativa simples ao udevadm mencionado acima é simplesmente coletar dados de linha de base para o sistema sem que o dispositivo seja detectado conectado. Por exemplo: Coletar dados de linha de base: lsusb > baseline.txt Verifique os dados atuais e compare:

while true; do lsusb > compare.txt ; diff compare.txt baseline.txt; sleep 1; done

Isto irá comparar as conexões USB atuais com a linha de base uma vez a cada segundo.

Se o seu script atualizar os dados da linha de base após a detecção, você também poderá detectar a remoção do dispositivo por esse método.

    
por 30.08.2017 / 22:03