如何检测USB键盘的插入和拔出状态
有没有什么后台程序或者工具,可以在USB键盘插入或拔出电脑时发出信号或事件?我想在我的程序里知道USB键盘什么时候被插入或拔出。有什么好主意吗?
3 个回答
-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()
3
udevadm monitor
(这是一个用来管理设备的工具)或者udev_monitor
(这是libudev库中的一个功能)。
另外,如果你在使用X11系统并且开启了输入设备的热插拔功能,你可以监听一个叫做DevicePresenceNotify
的事件。
4
udev 是 Linux 系统中的一个设备管理工具,它负责监控硬件的变化。当它发现设备有变化时,就会执行相应的规则。
如果你想让你的程序知道 USB 键盘的插入或拔出,你需要在 udev 中添加一个规则。你可以在 这里 找到关于 udev 规则的文档,或者查看 /etc/udev/rules.d/
或 /lib/udev/rules.d/
目录下的文件,里面有很多例子可以参考。