如何检测USB键盘的插入和拔出状态

6 投票
3 回答
8814 浏览
提问于 2025-04-16 07:19

有没有什么后台程序或者工具,可以在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/ 目录下的文件,里面有很多例子可以参考。

撰写回答