2011-07-03 134 views
4

我需要檢測一個USB設備,當它被插入和拔出,並且我用dbus編寫了一個python程序。關於檢測USB設備的問題

但它是非常奇怪的裝置將被安裝三次,至少當它被插入或拔出

監控代碼如下:

  device = dbus.Interface(self.bus.get_object("org.freedesktop.Hal", udi), 
            "org.freedesktop.Hal.Device") 

      self.notify_message(device.GetProperty("info.udi")) 

然後我們捕捉到的輸出,當我嘗試插入USB設備(例如,鍵盤)

Mon Jul 4 03:47:31 2011 /org/freedesktop/Hal/devices/usb_device_413c_2003_noserial 

Mon Jul 4 03:47:31 2011 /org/freedesktop/Hal/devices/usb_device_413c_2003_noserial_if0 

Mon Jul 4 03:47:31 2011 /org/freedesktop/Hal/devices/usb_device_413c_2003_noserial_if0_logicaldev_input 

這樣,則通知節目三次每次它被插入或拔出 如何僅ONC顯示電子通知?

回答

0

我不熟悉DBUS,而是看你所得到的設備名稱:

usb_device_413c_2003_noserial 
usb_device_413c_2003_noserial_if0 
usb_device_413c_2003_noserial_if0_logicaldev_input 

第一設備可能代表了USB設備的全過程。第二個設備很可能代表所述設備的接口0。第三個設備可能代表了接口0的一個端點或其他一些特性,它可能會或可能不會在設備的描述符中指定。

即使只插入一個物理設備,也會得到三種不同的邏輯設備。對於實現複合USB設備的人來說,這種事情非常重要。

要回答這個問題,雖然:如果你只想通知一次,那麼在你的通知處理函數中,你應該通過查看設備名稱字符串來篩選出你不關心的通知,並決定你是否在意關於事件與否。例如,您可能會認爲您並不關心名稱中含有if0的設備,因此您的僞代碼將爲:

def notificationHandler(notification) 
    if notification.name does not contain `if0` 
    pass notification to higher level code 
    end 
end