【免费下载链接】openpuck
Opensource firmware for NRF52840 Pro Micro that copycats the Steam Controller 2 Puck and adds an Xbox and Switch mode
OpenPuck是一款运行在 NRF52840 Pro Micro 上的开源固件,它模仿 Steam Controller 2 的 Puck 无线接收器,并额外提供 Xbox 和 Switch 等模式。在 Linux 上使用它的 WebUSB 配置面板时,一个高频问题就是:设备明明选对了,面板却提示Disconnected(已断开)。别急——这几乎总是WebUSB 权限问题导致的,按本文 3 步即可修复。
为什么 Linux 下会显示 Disconnected?
在 Windows 上,浏览器可以直接打开 USB 设备;但 Linux 出于安全考虑,默认不允许普通用户访问原始 USB 设备(raw USB)。
OpenPuck 通过 WebUSB 提供配置面板(切换模式、映射背键、升级固件都靠它),浏览器需要直接读取/dev/bus/usb/下的设备节点。如果你的用户不在对应的访问组里,浏览器一打开设备就会被系统拒绝,前端表现就是选择正确设备后仍然显示 "disconnected"。
💡 记住这个判断标准:Windows 正常、Linux 报 Disconnected → 90% 是权限问题,不是固件坏了。
修复步骤 1:查看浏览器设备日志,确认是权限错误
修复前先"验伤",避免改错方向:
- 在 Chrome / Chromium / Edge 地址栏输入
chrome://device-log/(Chromium 用chromium://device-log,Edge 用edge://device-log)。 - 重新在配置面板里选择一次 OpenPuck 设备。
- 观察日志输出。
如果看到下面这条错误,就确认是权限问题:
Failed to open /dev/bus/usb/xxx/xxx: Operation not permitted看到Operation not permitted就可以放心继续,按下面两步授权即可。
修复步骤 2:创建 udev 规则文件,放行 OpenPuck 的 USB Vendor ID
udev 规则按USB Vendor ID匹配设备。OpenPuck 在不同模式下会以不同厂商身份枚举(Steam 模式是 Valve 的 ID,Xbox 模式是 Microsoft 的 ID,Switch 模式是 Nintendo 的 ID……),所以规则要覆盖它枚举过的所有 Vendor ID。
各模式对应的 Vendor ID 参考表:
| 模式 | 厂商身份 | Vendor ID |
|---|---|---|
| Steam Controller / Lizard 模式 | Valve | 28de |
| Xbox 360 模式 | Microsoft | 045e |
| Switch Pro 模式 | Nintendo | 057e |
| Hori Pad 模式 | HORIPAD (Hori) | 0f0d |
| PS5 / DS4 / PS3 模式 | Sony | 054c |
| DirectInput 模式 | pid.codes | 1209 |
操作步骤:
- 以 root 身份创建规则文件
/etc/udev/rules.d/50-openpuck.rules。 - 将 docs/WEBUSB_LINUX.md 中的规则内容写入该文件,大致形如:
SUBSYSTEM=="usb", ATTR{idVendor}=="28de", MODE="0664", GROUP="plugdev" SUBSYSTEM=="usb", ATTR{idVendor}=="045e", MODE="0664", GROUP="plugdev" SUBSYSTEM=="usb", ATTR{idVendor}=="057e", MODE="0664", GROUP="plugdev" # ……其余模式对应行,完整清单以官方文档为准- 保存退出。
✂️ 如果你只用 Steam / Lizard 模式,只保留
28de(Valve)那一行就够了;其余规则是为各模拟模式准备的,因为 USB 身份会随模式切换而变化。
修复步骤 3:把当前用户加入 plugdev 组并重新加载规则
规则文件只是声明"plugdev 组的成员可以访问",还需要两件事让它生效:
1. 把当前用户加入plugdev组
sudo usermod -a -G plugdev $USER2. 重新加载 udev 规则(或直接重启)
sudo udevadm control --reload-rules3. 拔下再插上 OpenPuck
重新插拔后,浏览器应就能在Steam Controller 模式下正常连接面板了。此时状态从 Disconnected 变为已连接,即可开始切换模式、调整背键映射等操作。
⚠️ 特殊情况:Chromium 是通过 Snap 安装的
如果你用 Snap 方式安装了 Chromium,它还有一层独立的应用沙箱权限,需要额外放行 raw-usb:
snap connect chromium:raw-usb完成后再按上面流程重插设备即可。
修复没生效?按这份清单自查
| 现象 | 可能原因与对策 |
|---|---|
| 设备选择器里根本看不到 OpenPuck | 确认用的是支持 WebUSB 的浏览器(Chrome / Edge),设备插在本机USB 口,且处于 Steam Controller 模式 |
能看到设备但连接即断开,日志报Operation not permitted | udev 规则未生效:确认规则文件在/etc/udev/rules.d/下、已执行udevadm control --reload-rules,并重新插拔设备 |
| 加入组后仍然失败 | usermod的组变更需要重新登录或重启后才生效,查看组归属:groups $USER中应出现plugdev |
| 所有模式都想配,但某些模式下面板连不上 | 某些模拟模式的 USB 身份会变化,建议回到 Steam 模式(背键 ×4 + A)再重插接收器;Xbox 模式故意不提供 WebUSB 接口,需先切回 Steam 模式再配置 |
| Snap 版 Chromium 依旧失败 | 执行snap connect chromium:raw-usb |
相关文档与模块速查
| 资料 | 说明 |
|---|---|
| docs/WEBUSB_LINUX.md | 本文的官方原始出处,含完整 udev 规则清单 |
| README.md | 项目总览:各模式切换组合键、配对与配置流程 |
| docs/BUILD_AND_DEPLOY.md | 自行编译固件与烧录部署指南 |
| docs/PROTOCOL.md | OpenPuck 无线协议细节(连接状态包0x79等) |
| OpenPuck/webusb_config.cpp | WebUSB 配置面板的固件端实现 |
| OpenPuck/xinput_auth.cpp | Xbox 模式的主机侧鉴权实现 |
总结
Linux 下 OpenPuck 面板显示Disconnected的三步修复流程:
- 验证:
chrome://device-log/中确认Operation not permitted,锁定为权限问题; - 授权:创建
/etc/udev/rules.d/50-openpuck.rules,放行 OpenPuck 各模式的 Vendor ID; - 生效:
sudo usermod -a -G plugdev $USER+sudo udevadm control --reload-rules,Snap 版 Chromium 补一句snap connect chromium:raw-usb,重插设备收工。
完成后,你就可以在 WebUSB 面板里自由切换 Steam / Xbox / Switch 等模式了。🎮
【免费下载链接】openpuck
Opensource firmware for NRF52840 Pro Micro that copycats the Steam Controller 2 Puck and adds an Xbox and Switch mode
相关推荐
3步解决Devika终端故障:从命令执行到界面显示的完整修复指南
3步解决Devika终端故障:从命令执行到界面显示的完整修复指南 终端功能是Devika项目中实现代码运行和结果展示的核心模块,但在使用过程中可能会遇到命令执行
人工智能大模型AI Agent代码智能体本地部署前端昇腾CANN原子操作确定性计算样例
数据搬运随路原子操作做确定性计算的样例 概述 本样例首先介绍在数据搬运随路原子操作的场景下做确定性计算的必要性和具体实现方案,随后分别介绍在单个AIV核、多AI
人工智能深度学习算子库CANNAscend3步打造完美游戏界面:字体显示异常修复与个性化指南
3步打造完美游戏界面:字体显示异常修复与个性化指南 游戏字体优化是提升视觉体验的关键环节,不仅能解决烦人的"口口口"显示异常问题,还能通过个性化界面设计让游戏体
开发工具游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考