2011-07-03 7 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")) 

私がしようとしたとき、我々は出力をキャッチそう

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 

にUSBデバイス(例えばキーボード)を挿入し、三回は毎回、それが唯一のONCを表示する方法を差し込むか 抜かれたショーに通知電子通知?

答えて

0

私はdbusのに慣れていないけど、あなたが取得しているデバイス名を見て:

usb_device_413c_2003_noserial 
usb_device_413c_2003_noserial_if0 
usb_device_413c_2003_noserial_if0_logicaldev_input 

最初のデバイスは、おそらく全体としてUSBデバイスを表します。第2の装置は、前記装置のインタフェース0を表す可能性が最も高い。 3番目のデバイスはおそらく、デバイスのディスクリプタに指定されていてもいなくてもよい、インタフェース0のエンドポイントまたはその他の機能を表しています。

物理デバイスが1つしか接続されていない場合でも、3つの異なる論理デバイスを取得します。この種のことは、複合USBデバイスを実装する人々にとって重要です。

あなたは一度だけ通知を受けたい場合は、通知ハンドラ機能で、デバイス名の文字列を見て気にするかどうかを決定することで気にしない通知をフィルタリングする必要がありますイベントについてかどうかたとえば、名前にif0のデバイスを気にしないようにして、擬似コードが

def notificationHandler(notification) 
    if notification.name does not contain `if0` 
    pass notification to higher level code 
    end 
end 
のようにすることができます
関連する問題