In my code I register to receive signals when USB devices are inserted.
def registerSignals(self):
for signal, callback, bus, interface in (('InterfacesAdded', self.onUSBInterfaceAdded, 'org.freedesktop.UDisks2', 'org.freedesktop.DBus.ObjectManager'),
('InterfacesRemoved', self.onUSBInterfaceRemoved, 'org.freedesktop.UDisks2', 'org.freedesktop.DBus.ObjectManager'),
('PropertiesChanged', self.onUSBMountPropertiesChanged, 'org.freedesktop.UDisks2', 'org.freedesktop.DBus.ObjectManager')):
print(self.__bus.add_signal_receiver(callback,
bus_name=bus,
signal_name=signal,
dbus_interface=interface))
def onUSBInterfaceAdded(self, path, interfaces):
print(path)
print(interfaces)
def onUSBInterfaceRemoved(self, path, interfaces):
print(path)
print(interfaces)
def onUSBMountPropertiesChanged(self, interface, properties, invalidated, path):
print(path)
print(interfaces)
Now, when I run this code, I get no signals. The problem is that when I run dbus-monitor --system
in the CLI, I do see the messages when I insert a USB device. Any idea how to debug this? Or what I am doing wrong here?
What D-Bus bindings are you using?
I find the pydbus bindings to be far easier to work with in Python. For example:
(venv) pi@raspberrypi:~/stack_overflow $ python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pydbus
>>> udisk2 = pydbus.SystemBus().get('.UDisks2')
>>> udisk2.on <-tab complete pressed->
udisk2.onInterfacesAdded udisk2.onInterfacesRemoved udisk2.onPropertiesChanged
>>> udisk2.onInterfacesAdded = print
>>>