Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Linux:如何检测USB键盘是否插拔_Python_Linux_Keyboard_Dbus - Fatal编程技术网

Python Linux:如何检测USB键盘是否插拔

Python Linux:如何检测USB键盘是否插拔,python,linux,keyboard,dbus,Python,Linux,Keyboard,Dbus,当usb键盘从pc上拔下时,是否有任何守护程序/工具会触发某些信号/事件? 我需要在我的程序中知道usb键盘何时被插入和拔出。有什么办法吗 问候,, Levon(Linux设备管理器)是轮询硬件的设备。当它检测到有关设备的某些更改时,它将执行关联的规则 您应该向udev添加一条规则,以便通知您的程序USB键盘的插入和移除。您可以找到有关udev规则的文档,或者查看/etc/udev/rules.d/或/lib/udev/rules.d/中的文件以查找许多示例。如果HAL守护进程正在运行(对于大多

当usb键盘从pc上拔下时,是否有任何守护程序/工具会触发某些信号/事件? 我需要在我的程序中知道usb键盘何时被插入和拔出。有什么办法吗

问候,, Levon(Linux设备管理器)是轮询硬件的设备。当它检测到有关设备的某些更改时,它将执行关联的规则

您应该向udev添加一条规则,以便通知您的程序USB键盘的插入和移除。您可以找到有关udev规则的文档,或者查看
/etc/udev/rules.d/
/lib/udev/rules.d/
中的文件以查找许多示例。

如果HAL守护进程正在运行(对于大多数现代linux桌面来说都是如此),您可以侦听其DBus信号。下面是一个如何检测USB鼠标是否插入的示例(我手边没有USB键盘):

(udev管理二进制文件)或(在libudev中)


交替地,如果你在X11席上运行了输入热插拔,你可以听到XI扩展事件<代码> DevicePresenceNotify < /C>。

这样的简单的事情,如观察硬件更改不必那么难,并且不需要根权限。下面我的答案是如何使用DBus和HAL实现这一点。HAL已经被弃用一年多了。实际上,HAL已经弃用,不再支持udev;只有过时的应用程序才使用它。但是,我同意您的解决方案比我的简单,并且不需要root访问。不知道是否可以使用未弃用的工具执行类似操作,但应避免使用HAL。HAL可能已弃用,但其替换设备套件在某些方面非常差。引用X.Org Wiki,“DeviceKit和udisks/upower/etc.替代品都没有为输入设备提供任何此类功能,DeviceKit的作者表示他们不打算提供此类功能,建议直接使用操作系统接口,如libudev。”我将继续为这些功能使用HAL,因为它仍然包含在大多数发行版中。、、等。HAL要么已经从默认安装中删除,要么即将删除。是的,我知道这一事实。但是:a)商业支持的linux发行版继续使用HAL,b)没有完全的用户级替代品。不,真的,根用户权限只是为了获取有关插入/拔出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()