USBキーボードをPCから抜いたときに信号/イベントをトリガーするデーモン/ツールはありますか? 私のプログラムで、USBキーボードが接続され、プラグが抜かれていることを知る必要があります。どのようにこれを行うにはどのようなアイデア?Linux:USBキーボードが接続されているかどうかを検出する方法
よろしく、
レヴォンUSBキーボードをPCから抜いたときに信号/イベントをトリガーするデーモン/ツールはありますか? 私のプログラムで、USBキーボードが接続され、プラグが抜かれていることを知る必要があります。どのようにこれを行うにはどのようなアイデア?Linux:USBキーボードが接続されているかどうかを検出する方法
よろしく、
レヴォンのudev(Linuxデバイスマネージャ)を一度ポーリングハードウェアです。デバイスに関するいくつかの変更を検出すると、関連付けられたルールが実行されます。
USBキーボードの取り外しの挿入についてプログラムに通知するには、udevにルールを追加する必要があります。 udevルールhereに関するドキュメント、または/etc/udev/rules.d/
または/lib/udev/rules.d/
のファイルを参照すると、多くの例が見つかります。
HALデーモンが実行されている場合(ほとんどの現代のLinuxデスクトップで当てはまります)、そのDBus信号を聞くことができます。
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()
HALは1年以上使用されなくなりました。 – ephemient
実際には、HALは廃止され、もはやudevのために維持されません。時代遅れのアプリケーションだけがそれを使用します。しかし、あなたのソリューションは私のものより簡単であり、ルートアクセスを必要としないことに同意します。推奨されていないツールでも同様のことが可能かどうかは分かりませんが、HALは避けるべきです。 – peoro
HALは廃止されることがありますが、DeviceKitの交換は一部の面では非常に貧弱です。 X.Org Wikiを引用する "DeviceKitやudisks/upower/etcの置換えは、入力デバイスにこのような機能を提供するものではなく、DeviceKitの作者は、そのような機能を提供する予定はなく、OSの直接使用を示唆している代わりにlibudevなどのインタフェースを使用してください。ほとんどのディストリビューションにはまだ含まれているので、私はこれらの関数にHALを使用し続けます。 – abbot
udevadm monitor
(udevの管理バイナリ)または(libudev中)udev_monitor
:ここではUSBマウスが接続されている場合(私は手元にUSBキーボードを持っていない)を検出する方法の例です。
入力ホットプラグでX11で実行している場合は、XI拡張イベントDevicePresenceNotify
を聞くことができます。
ハードウェアの変更を監視するという単純なことは、それほど難しいものではなく、root特権を必要とする必要はありません。私の答えは、DBusとHALを使ってこれを行う方法を参照してください。 – abbot