(ubuntu 16.04) Как я могу обнаружить событие USB-вставки, не зависящее от устройства

Другое приложение: Blender обрабатывает ведущий // как ссылку на каталог проекта (каталог в который сохраняется в файле .blend ). Вот соответствующая страница руководства .

Это верно и для операционных систем, отличных от Unix (например, Windows).

6
16.10.2016, 16:13
2 ответа

Одним из способов перехвата всего трафика через USB является использование wirehark после вставки модуля ядра usbmon, как подробно описано в:

Мониторинг USB Wireshark

Это примерно как можно раньше. Но я предполагаю, что вы намерены использовать какой-то программный триггер, например событие, чтобы сделать что-то интересное, поэтому, учитывая, что запуск 'lsusb -t' дает вам статический список вставленных USB-устройств вместе с соответствующими драйверами. (если они существуют), вы можете создать задание cron для запуска lsusb и сравнить его с предыдущей версией, чтобы убедиться, что было вставлено новое устройство, даже если с ним не связан драйвер.

Обратной стороной этого простого решения является большая задержка, которую cron дает между вставкой и обнаружением.

0
27.01.2020, 20:30

Я не верю, что вы можете добиться этого с тупыми устройствами, как указано в комментарии @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, что, ИМХО, подтверждает, что тупые устройства, которые просто потребляют или подают питание, не могут быть обнаружены. .

Еще один простой способ обнаружить устройства, которые не являются бесшумными, — это сохранить исходную информацию и сравнить с ней текущую информацию. Есть множество способов сделать это. Одна простая альтернатива udevadm, упомянутая выше, которая сразу же приходит на ум, заключается в простом сборе исходных данных для системы без подключения обнаруживаемого устройства.Например: Соберите базовые данные: lsusb > baseline.txt Проверьте текущие данные и сравните:

пока верно; сделать lsusb > compare.txt ; diff compare.txt baseline.txt; спать 1; done

Раз в секунду текущие USB-подключения будут сравниваться с базовыми.

Если ваш скрипт обновляет базовые данные при обнаружении, вы также сможете обнаружить удаление устройства с помощью этого метода.

1
27.01.2020, 20:30

Теги

Похожие вопросы