Linux: как обнаружить USB-клавиатура подключена и отключена - PullRequest
3 голосов
/ 19 ноября 2010

Есть ли какой-нибудь демон / инструмент, который вызовет какой-либо сигнал / событие, когда USB-клавиатура подключена и отключена от ПК?Мне нужно знать в моей программе, когда USB-клавиатура подключена и отключена.Есть идеи как это сделать?

С уважением, Левон

Ответы [ 3 ]

4 голосов
/ 19 ноября 2010

udev (диспетчер устройств Linux) опрашивает оборудование. Когда он обнаруживает некоторые изменения в устройствах, он выполняет соответствующее правило.

Вы должны добавить правило в udev, чтобы сообщить вашей программе о необходимости удаления USB-клавиатуры. Вы можете найти документацию о правилах udev здесь или просмотреть файлы в /etc/udev/rules.d/ или /lib/udev/rules.d/, чтобы найти много примеров.

2 голосов
/ 06 декабря 2010

udevadm monitor (двоичный файл администрирования udev) или udev_monitor (в libudev).

В качестве альтернативы, если вы работаете в X11 с горячим подключением ввода, вы можете прослушать событие расширения XI DevicePresenceNotify.

0 голосов
/ 06 декабря 2010

Если запущен демон 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()
...