Skip to content
  • david@fubar.dk's avatar
    [PATCH] D-BUS patch for udev-008 · 5aebfbcb
    david@fubar.dk authored
    Attached is a patch against udev-008 to send out a D-BUS message when a
    device node is added or removed.
    
    Using D-BUS lingo, udev acquires the org.kernel.udev service and sends
    out a NodeCreated or NodeDeleted signal on the
    org.kernel.udev.NodeMonitor interface. Each signal carries two
    parameters: the node in question and the corresponding sysfs path.
    
    [Note: the D-BUS concepts of service, interface, object can be a bit
    confusing at first glance]
    
    An example program listening for these messages looks like this
    
    #!/usr/bin/python
    
    import dbus
    import gtk
    
    def udev_signal_received(dbus_iface, member, service, object_path, message):
        [filename, sysfs_path] = message.get_args_list()
        if member=='NodeCreated':
            print 'Node %s created for %s'%(filename, sysfs_path)
        elif member=='NodeDeleted':
            print 'Node %s deleted for %s'%(filename, sysfs_path)
    
    def main():
        bus = dbus.Bus(dbus.Bus.TYPE_SYSTEM)
        bus.add_signal_receiver(udev_signal_received,
                                'org.kernel.udev.NodeMonitor',  # interface
                                'org.kernel.udev',              # service
                                '/org/kernel/udev/NodeMonitor') # object
    
        gtk.mainloop()
    
    if __name__ == '__main__':
        main()
    
    and this is the output when hot-plugging some usb-storage.
    
    [david@laptop udev-008]$ ~/node_monitor.py
    Node /udev/sda created for /block/sda
    Node /udev/sda1 created for /block/sda/sda1
    Node /udev/sda1 deleted for /block/sda/sda1
    Node /udev/sda deleted for /block/sda
    
    The patch requires D-BUS 0.20 or later while the python example program
    requires D-BUS from CVS as I only recently applied a patch against the
    python bindings.
    
    5aebfbcb