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)的主要内容,如果未能解决你的问题,请参考以下文章

k800i刷机为啥电脑检测不到,USB驱动程序无法更新

请问Linux内核里,USB键盘和鼠标的驱动都是哪些文件?

如果将笔式驱动器插入 USB 端口,如何使用 c# 检测?

ESXI系统引导盘

Bash 脚本检测我的 USB 何时插入,然后将其与目录同步

如何检测硬盘是不是通过 USB 连接?