Ubuntu系统Chrome中SpaceMouse Compact无法适配JS Gamepad API怎么办
Chrome 配置标识调整
- 打开Chrome地址栏输入
chrome://flags进入实验性功能配置页 - 分别搜索以下两个配置项,修改状态为
Enabled后重启浏览器生效:#enable-gamepad-extensions:开启游戏控制器扩展支持,兼容非标准6自由度控制器#enable-experimental-web-platform-features:开启实验性Web API,包含Gamepad API的更新迭代支持
系统权限配置(核心修复项)
Gazebo可正常运行是因为适配了spacenavd的上层接口,而Chrome的Gamepad API默认直接读取底层HID输入设备,需要用户持有对应设备的读写权限,操作步骤:
- 新建udev规则文件:执行命令
sudo nano /etc/udev/rules.d/99-spacemouse.rules - 写入以下规则内容:
SUBSYSTEM=="usb", ATTRS{idVendor}=="256f", MODE="0666", GROUP="plugdev" SUBSYSTEM=="input", ATTRS{idVendor}=="256f", MODE="0666", GROUP="plugdev"
- 保存退出后执行命令重载udev规则:
sudo udevadm control --reload-rules && sudo udevadm trigger - 将当前用户加入设备访问组:
sudo usermod -aG plugdev $USER - 注销当前用户重新登录后生效
适配层桥接方案
如果以上操作后依然无法识别,可以使用信号桥接工具将SpaceMouse信号模拟为标准游戏手柄信号:
- 安装依赖包:
sudo apt install libspnav-dev libusb-1.0-0-dev git build-essential - 编译安装spacenav-gamepad-bridge工具,启动后保持后台运行即可,Chrome会将SpaceMouse识别为标准XBox类游戏控制器,完全适配Gamepad API的读取逻辑
注意事项
- 不要使用Snap/Flatpak格式安装的Chrome,沙箱限制会阻止HID设备的访问,建议安装官方deb格式的Chrome包
- 不要同时运行3DxWare 10和spacenavd,二者会抢占设备导致识别冲突,保留spacenavd即可
内容的提问来源于stack exchange,提问作者Mateusz Goik
相关产品推荐
相关产品推荐

