Linux:如何检测是USB键盘插入和拔出

有没有任何守护进程/工具,这将触发一些信号/事件时,USB键盘插入和从电脑拔出? 我需要知道在我的程序中,当USB键盘插入和拔出。 任何想法如何做到这一点?

问候,Levon

udev(Linux设备管理器)是一个轮询硬件的人。 当它检测到关于设备的一些变化时,它执行相关的规则。

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

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

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

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