2011-07-03 100 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