代码之家  ›  专栏  ›  技术社区  ›  deimus

Linux:如何检测usb键盘是否已插入和拔出

  •  3
  • deimus  · 技术社区  · 14 年前

    当usb键盘从电脑上插上或拔下时,是否有任何守护程序/工具会触发某些信号/事件? 我需要知道在我的程序中usb键盘是什么时候插上和拔下的。有什么办法吗?

    当做, 莱翁

    3 回复  |  直到 14 年前
        1
  •  4
  •   peoro    14 年前

    udev(Linux设备管理器)是轮询硬件的设备管理器。当它检测到有关设备的某些更改时,它将执行关联的规则。

    您应该向udev添加一个规则,以便通知您的程序有关插入和删除USB键盘的信息。您可以找到有关udev规则的文档 here ,或查看 /etc/udev/rules.d/ /lib/udev/rules.d/ 找到很多例子。

        2
  •  2
  •   ephemient    14 年前

    udevadm monitor (udev管理二进制文件)或 udev_monitor (在歌剧中)。

    或者,如果在X11中运行输入热插拔,则可以监听XI扩展事件 DevicePresenceNotify .

        3
  •  -2
  •   abbot    14 年前

    如果HAL守护进程正在运行(这在大多数现代linux桌面上都是如此),那么您可以监听它的DBus信号。下面是一个如何检测USB鼠标是否已插入的示例(我手头没有USB键盘):

    import gobject
    import dbus
    from dbus.mainloop.glib import DBusGMainLoop
    
    DBusGMainLoop(set_as_default=True)
    bus = dbus.SystemBus()
    # enumerate all present mice:
    manager = dbus.Interface(bus.get_object("org.freedesktop.Hal",
                                            "/org/freedesktop/Hal/Manager"),
                             "org.freedesktop.Hal.Manager")
    mice = set(manager.FindDeviceByCapability('input.mouse'))
    
    def device_added(sender):
        dev = dbus.Interface(bus.get_object("org.freedesktop.Hal", sender),
                             "org.freedesktop.Hal.Device")
        try:
            caps = dev.GetProperty('info.capabilities')
            if 'input.mouse' in caps:
                print "mouse plugged in"
                mice.add(sender)
        except dbus.DBusException:
            pass
    
    def device_removed(sender):
        if sender in mice:
            print "mouse unplugged"
            mice.remove(sender)
    
    bus.add_signal_receiver(device_added, signal_name="DeviceAdded")
    bus.add_signal_receiver(device_removed, signal_name="DeviceRemoved")
    
    loop = gobject.MainLoop()
    loop.run()