Linux : How to detect is usb keyboard is plugged and unplugged

烈酒焚心 提交于 2019-11-29 01:57:39

问题


Is there any daemon/tool which will trigger some signal/event when usb keyboard is plugged and unplugged from pc ? I need to know in my program when usb keyboard is plugged and unplugged. Any ideas how to do this ?

Regards, Levon


回答1:


udev (Linux device manager) is the one that polls hardware. When it detects some changes about devices, it executes the rule associated.

You should add a rule to udev, in order to inform your program about insertion of removal of USB keyboard. You can find documentation about udev rules here, or Look at files in /etc/udev/rules.d/ or /lib/udev/rules.d/ to find many examples.




回答2:


udevadm monitor (the udev administration binary) or udev_monitor (in libudev).

Alternately, if you're running in X11 with input hotplugging, you can listen for the XI extension event DevicePresenceNotify.




回答3:


If HAL daemon is running (which is true for most modern linux desktops), you can listen to its DBus Signals. Here is an example how to detect if a USB mouse is plugged in (I don't have a USB keyboard at hand):

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


来源:https://stackoverflow.com/questions/4224796/linux-how-to-detect-is-usb-keyboard-is-plugged-and-unplugged

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!