如何检测在Linux下插入闪存驱动器的时间?

问题描述:

如何检测闪存驱动器何时插入?我正在使用一个纯粹的Debian安装,没有任何GUI,并且希望在我的Python脚本中出现新的闪存驱动器时收到通知...我知道D-BUS分发这些信息,但我不想使用D-BUS。有没有更多的信息访问这些信息?不应该在/ proc或/ sys下可用吗?我如何“连接”到该源?如何检测在Linux下插入闪存驱动器的时间?

再见 福斯塔夫

您可以通过Netlink插座读uevents from kernel并查找事件,其中"ACTION""add"(你也可以看,如果来自设备的分区中安装或卸载,或者如果设备被移除)。这与人们可以在用户空间中获得的事件来源接近。据我所知,这是udev如何检测插入的可移动媒体。

但可能using D-Bus/HAL API via Python bingings会更容易(没有uevents数据解析等)。不知道你为什么反对这一点。既然你使用Python,我怀疑资源并不是真正的问题。

+0

谢谢!我尝试了你的或者PeterMmm的方法,即时通讯还不确定是否要使用udev ...嗯,我使用python在我的机器上编写原型,它没有任何资源问题,但目标是嵌入式设备,想要安装所有的D-Bus/HAL的东西... – falstaff 2009-10-05 08:58:06

的/ proc /分区显示了所有已知的内核的分区。

+0

是的,但是如何帮助检测插入事件?特别是因为并非所有Linux发行版都默认自动安装(尽管大多数都是这样)。 – sleske 2009-10-05 08:38:25

+0

即使未安装的分区显示在/ proc /分区 - 您可以轮询文件。然而,Peter的答案(udev)可能更好,因为udev在那里,除非福斯塔夫正在使用2.4系列内核 – Kimvais 2009-10-05 09:20:56

+0

这是真的,没有想到它。通常情况下,udev仍然是一个更好的解决方案,但是如果您必须完成轮询,那应该可行。 – sleske 2009-10-06 08:05:36

所有市长Linux发行版都包含udev,它允许您在硬件事件上编写自定义脚本。

当USB设备插入系统日志时,将与此有关的消息写入/ var/log/messages。 “dmesg”命令显示此日志。您可以在日志末尾查看设备连接到哪个通道,通常是/ dev/sd(letter)(数字),具体取决于插入系统的分区和串行磁盘的数量。

+0

但为了这个工作,你必须投票dmesg,这是非常丑陋的(轮询吃性能和干扰电源管理)。 – sleske 2009-10-05 08:37:23

+0

我提到它附加到/ dev/sd ** ...好吧无论如何很多投票继续。前面的一个也提到了一些轮询。 – whatnick 2009-10-05 15:30:49

+0

@whatnick:是的,这就是为什么最初低估它: - /。 – sleske 2009-10-06 08:06:37

如果您要定位嵌入式设备,则可以运行mdev而不是udev。 然后,您可以编写非常简单的mdev规则并触发脚本。

当然,您不是直接从您的脚本进行监控,mdev正在执行此操作,但您可以启动任何命令。你也许可以用udev做同样的事情,但是对我来说,看起来总是很复杂。

+2

+1,以获取嵌入式目标。 – whatnick 2009-10-05 15:32:01

我这样做是使用zenity在脚本和udev与规则上与RHEL6:

KERNEL == “SD [BD]”,DRIVERS == “USB”,ACTION == “添加”,RUN + = “/ path/to/script”