5

USB キーボードが PC に接続されたり取り外されたりしたときに何らかのシグナル/イベントをトリガーするデーモン/ツールはありますか? USBキーボードがいつ差し込まれたり抜かれたりしたかをプログラムで知る必要があります。これを行う方法についてのアイデアはありますか?

4

3 に答える 3

4

udev (Linux デバイス マネージャー) は、ハードウェアをポーリングするものです。デバイスに関する何らかの変更が検出されると、関連付けられたルールが実行されます。

USB キーボードの挿入または取り外しについてプログラムに通知するために、udev にルールを追加する必要があります。ここでudev ルールに関するドキュメントを見つけることができます。/etc/udev/rules.d/または、 のファイルを見て、/lib/udev/rules.d/多くの例を見つけてください。

于 2010-11-19T12:22:40.430 に答える
2

udevadm monitor(udev管理バイナリ)またはudev_monitor(libudev内)。

または、入力ホットプラグを使用してX11で実行している場合は、XI拡張イベントをリッスンできますDevicePresenceNotify

于 2010-12-06T13:00:22.803 に答える
-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()
于 2010-12-06T12:50:33.017 に答える