2009-10-05 67 views
5

如何檢測閃存驅動器何時插入?我正在使用一個純粹的Debian安裝,沒有任何GUI,並且希望在我的Python腳本中出現新的閃存驅動器時收到通知...我知道D-BUS分發這些信息,但我不想使用D-BUS。有沒有更多的信息訪問這些信息?不應該在/ proc或/ sys下可用嗎?我如何「連接」到該源?如何檢測在Linux下插入閃存驅動器的時間?

再見 福斯塔夫

回答

6

您可以通過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

0

的/ 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

9

所有市長Linux發行版都包含udev,它允許您在硬件事件上編寫自定義腳本。

1

當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

4

如果您要定位嵌入式設備,則可以運行mdev而不是udev。 然後,您可以編寫非常簡單的mdev規則並觸發腳本。

當然,您不是直接從您的腳本進行監控,mdev正在執行此操作,但您可以啓動任何命令。你也許可以用udev做同樣的事情,但是對我來說,看起來總是很複雜。

+2

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

0

我這樣做是使用zenity在腳本和udev與規則上與RHEL6:

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

相關問題