【发布时间】:2011-05-12 14:34:27
【问题描述】:
当 USB 键盘从电脑上插拔时,是否有任何守护程序/工具会触发某些信号/事件? 我需要在我的程序中知道何时插入和拔出 USB 键盘。关于如何做到这一点的任何想法?
【问题讨论】:
标签: python linux keyboard dbus
当 USB 键盘从电脑上插拔时,是否有任何守护程序/工具会触发某些信号/事件? 我需要在我的程序中知道何时插入和拔出 USB 键盘。关于如何做到这一点的任何想法?
【问题讨论】:
标签: python linux keyboard dbus
udev(Linux 设备管理器)是轮询硬件的一种。当它检测到有关设备的一些变化时,它会执行相关的规则。
您应该向 udev 添加一条规则,以便通知您的程序插入移除 USB 键盘。您可以找到有关 udev 规则 here 的文档,或查看 /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()
【讨论】: