Обнаружение USB-накопителя (Linux)

В моей программе Python мне нужно постоянно проверять, подключен ли новый USB-накопитель к моему устройству под управлением x86 Linux (Ubuntu). Другие USB-устройства не следует путать с USB-накопителем, например, клавиатуры, мыши или что-то еще. Как лучше всего это сделать?

В моем конкретном случае у меня есть специальный медиаплеер, работающий на одноплатном ПК с архитектурой x86 под управлением Linux.


person Leo Ervin    schedule 27.08.2015    source источник


Ответы (1)


В большинстве Linux-систем уже есть какой-то механизм, который обнаруживает новые USB-устройства и автоматически монтирует их, если они являются устройствами хранения, и так далее. Что вы можете сделать, так это использовать интерфейс Python для библиотеки inotify для мониторинга /mnt или /dev.

Чтобы увидеть, как это работает, установите inotify-tools или пакет с аналогичным именем, и вы можете сделать:

$ inotifywait -m -e create /tmp &

Эта команда отслеживает (-m) /tmp создание (-e create) новых файлов или каталогов. Например, touch /tmp/x, и он выведет

/tmp/ CREATE x

Вы можете сделать то же самое из python и его python-inotify или аналогичного пакета. Есть команда pyinotify, но с большей пользой вы можете написать эквивалентную программу на python:

import pyinotify
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm)
wm.add_watch('/tmp', pyinotify.IN_CREATE)
notifier.loop()

Когда вы rm и воссоздаете /tmp/x, это печатает:

<Event dir=False mask=0x100 maskname=IN_CREATE name=x path=/tmp pathname=/tmp/x wd=1 >

См. вики для получения руководства и т. д.


В вашем случае вы можете отслеживать /mnt для обнаружения недавно смонтированных файловых систем или /dev для обнаружения новых устройств, таких как /dev/sdb и /dev/sdb1. Inotify не является рекурсивным, поэтому возвращаются только изменения непосредственно в отслеживаемом каталоге.

person meuh    schedule 27.08.2015