(ubuntu 16.04) 장치 독립적인 USB 플러그인 이벤트를 감지하는 방법

(ubuntu 16.04) 장치 독립적인 USB 플러그인 이벤트를 감지하는 방법

어떤 장치이든 USB가 연결된 것을 감지하려고 합니다. 예: 휴대폰, 배터리 팩, 생체 인식 시스템 등은 Linux에서 인식되거나 인식되지 않을 수 있습니다(드라이버가 없거나 "운전/실행"이 없음). 아마도 Linux는 USB 연결(장치와 무관)을 감지한 다음 인식된 장치에서만 등록 및 작동을 진행합니다. 예를 들어 /dev/bus/usb/ 등에 인식된 USB 장치 세부 정보가 나열됩니다. 대신 USB 슬롯에 연결된 모든 것을 캡처/처리하고 싶습니다. 이는 아마도 인식된 장치에서만 시작되기 때문에 udevadm과 같은 것에 의존할 수 없다는 것을 의미할 것입니다. 이는 또한 곡선 초기에 삽입 이벤트를 포착해야 함을 의미합니다. 어떻게 해야 하나요?

답변1

@meuh의 댓글에 언급된 어리석은 장치를 사용하여 이 작업을 수행할 수 있다고 생각하지 않습니다.여기.. 실제 통신을 사용하는 장치는 udevadm monitor정상적으로 작동합니다. 다음은 Android 휴대폰을 연결하고 연결 해제하는 예입니다(전원 켜짐).

$ 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)

플래시 드라이브는 유사하지만 더 자세한 결과를 생성합니다. 이 정보를 사용하여 일부 작업을 트리거하려면 출력을 파일로 리디렉션하고 이를 사용하여 tail해당 파일에서 새 활동을 모니터링할 수 있습니다.

Android 휴대폰(꺼져 있지만 충전 중)으로 테스트한 결과 lsusb -v |grep Power출력에는 변화가 없었으며, IMHO는 전원만 공급하거나 전원을 공급하는 멍청한 장치를 감지할 수 없음을 확인했습니다.

장비를 테스트하는 또 다른 간단한 방법바보가 아니야기준 정보를 저장하고 현재 정보를 해당 정보와 비교하는 것입니다. 이를 수행하는 방법에는 여러 가지가 있습니다. udevadm생각나는 간단한 대안은 계측하려는 장치를 연결하지 않고 시스템에 대한 기준 데이터를 간단히 수집하는 것입니다. 예: 기준 데이터 수집: lsusb > baseline.txt 현재 데이터 확인 및 비교:

사실이지만 lsusb > Compare.txt;를 실행합니다.

매초마다 현재 USB 연결을 기준선과 비교합니다.

감지 시 스크립트가 기준 데이터를 업데이트하는 경우 이 방법을 통해 장치 삭제를 감지할 수도 있습니다.

답변2

USB의 모든 트래픽을 캡처하는 한 가지 방법은 usbmon 커널 모듈을 연결한 후 Wireshark를 사용하는 것입니다. 자세한 내용은 아래에 나와 있습니다.

Wireshark USB 모니터링

그것은 당신이 얻을 수 있는 "곡선의 초기"에 관한 것입니다. 그러나 나는 귀하의 의도가 일종의 프로그래밍 방식 트리거(예: 이벤트)를 사용하여 흥미로운 작업을 수행하는 것이라고 가정하고 있습니다. 따라서 "lsusb -t"를 실행하면 연결된 USB 장치 및 해당 드라이버 프로그램의 정적 목록이 제공됩니다( 있는 경우) cron 작업을 생성하여 lsusb를 실행하고 이전 버전과 비교하여 연결된 드라이버가 없더라도 새 장치가 연결되었는지 확인할 수 있습니다.

이 간단한 솔루션의 단점은 cron이 삽입과 감지 사이에 큰 지연을 발생시킨다는 것입니다.

관련 정보