USB 驱动器检测 (Linux)
Posted
技术标签:
【中文标题】USB 驱动器检测 (Linux)【英文标题】:USB-drive detection (Linux) 【发布时间】:2015-11-21 09:35:42 【问题描述】:在我的 Python 程序中,我需要不断检查是否有新的 USB 驱动器连接到我的设备,运行 x86 Linux (Ubuntu)。 其他 USB 设备不应被误认为是 USB 驱动器,例如键盘、鼠标或其他任何东西。 最好的方法是什么?
在我的特殊情况下,我有一个自定义媒体播放器设备,由运行 Linux 的 x86 单板 PC 驱动。
【问题讨论】:
【参考方案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 >
请参阅wiki 获取教程等。
在您的情况下,您可以监视 /mnt
以检测新安装的文件系统,或 /dev
以
发现/dev/sdb
和/dev/sdb1
等新设备。 Inotify 不是递归的,因此只返回直接在监视目录中的更改。
【讨论】:
以上是关于USB 驱动器检测 (Linux)的主要内容,如果未能解决你的问题,请参考以下文章