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

时间:2010-11-19 12:08:13

标签: python linux keyboard dbus

是否有任何守护进程/工具会在usb键盘插入和拔出电脑时触发某些信号/事件? 我需要在我的程序中知道插入和拔出usb键盘的时候。任何想法如何做到这一点?

此致 列翁

3 个答案:

答案 0 :(得分:4)

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

您应该向udev添加规则,以便通知您的程序插入USB键盘的移除。您可以找到有关udev规则here的文档,或查看/etc/udev/rules.d//lib/udev/rules.d/中的文件以查找许多示例。

答案 1 :(得分:2)

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

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

答案 2 :(得分:-2)

如果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()