You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨Windows/macOS/Linux用Python检测USB键盘断开的pyusb问题求解

pyusb报错修复方法

你遇到的entity not found错误核心原因是使用了pyusb已废弃的旧API,配合以下步骤即可修复:

  • 第一步:替换废弃API。usb.busses()是pyusb 0.x版本的接口,目前主流的1.x版本已经移除该接口,替换为usb.core.find系列接口即可。
  • 第二步:修正libusb动态库放置路径。将libusb-1.0.dll放到C:\Windows\System32目录下(64位系统),32位系统放到C:\Windows\SysWOW64目录,避免因Python环境路径配置问题导致库加载失败。
  • 第三步:执行脚本时用管理员权限启动终端/编辑器,Windows下访问底层USB设备需要系统级权限,无权限调用也会触发实体找不到报错。

修复后的测试代码如下:

import usb.core

# 遍历所有USB设备,输出VID和PID
for dev in usb.core.find(find_all=True):
    print(f"设备VID: {hex(dev.idVendor)}, 设备PID: {hex(dev.idProduct)}")

运行后找到你目标键盘的VID和PID记录下来,后续轮询时直接指定ID查询即可,不用遍历所有设备:

# 替换为你自己键盘的VID、PID
TARGET_VID = 0x1234
TARGET_PID = 0x5678

dev = usb.core.find(idVendor=TARGET_VID, idProduct=TARGET_PID)
if dev is None:
    print("键盘已断开,执行自定义操作")
    # 此处添加熄屏等自定义逻辑
跨平台USB设备监听替代方案

pyusb方案需要处理各系统的驱动权限问题,Windows下部分默认使用系统HID驱动的键盘无法直接被pyusb识别,推荐使用更稳定的系统原生API适配方案,无需修改设备驱动:

轮询方案(实现简单,兼容性强)

各平台使用对应原生接口枚举输入设备,对比目标设备是否存在:

  • Windows:使用wmi库枚举键盘设备,先执行pip install wmi
import wmi
c = wmi.WMI()
target_kb_id = "你的键盘设备ID,首次运行遍历所有键盘即可获取"
is_connected = any(kb.DeviceID == target_kb_id for kb in c.Win32_Keyboard())
  • Linux:直接读取/proc/bus/input/devices文件过滤目标键盘,或者用pyudev库枚举设备
  • Mac:调用ioreg命令枚举HID设备,过滤目标键盘信息

事件监听方案(无需轮询,实时触发)

不想做周期性轮询的可以用各平台的设备插拔事件回调机制:

  • Windows:通过pywin32监听WM_DEVICECHANGE系统消息
  • Linux:用pyudev监听udev的设备插拔事件
  • Mac:用IOKit框架监听USB设备匹配通知

各平台熄屏触发命令可直接用os.system调用:

  • Windows:os.system("rundll32.exe user32.dll,LockWorkStation") 或者第三方工具nircmd.exe monitor off
  • Linux:os.system("xset dpms force off")
  • Mac:os.system("pmset displaysleepnow")

内容的提问来源于stack exchange,提问作者Darren Oakey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:36:05