WSL2 里 RealSense D435i 免 sudo 出深度流:3 条命令写对 udev 规则
【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense
把 D435i 插进 WSL2 的 Ubuntu 24.04,lsusb 能查到 8086:0b3a,librealsense(RealSense SDK)示例却报设备打不开,只能反复输 sudo。本文用仓库自带的 udev 规则和一句用户组授权,3 条命令让相机免 sudo 直接出深度流。
先对号入座:“找不到设备”和“没权限”是两种卡法
卡住时你大概会看到这几种样子:
lsusb | grep 8086有输出(能看到8086:0b3a),但程序枚举不到相机;- 程序能列出设备,
wait_for_frames()却抛RealSense error,提示打开设备失败; - 一切正常,但只在
sudo前缀下才能跑通。
三种表现的共同根源只有一层:内核把 Intel 的 USB 设备节点默认收归 root 管理,普通进程没有读写权限,SDK 自然打不开设备。udev 规则的作用就是在设备插入的瞬间改节点权限、把它划进一个你所在的组,之后访问就不再依赖 root。
原因清楚了,动手。总共 3 条命令加一次拔插。
🔧 三步落盘 udev 规则并把自己加进 plugdev 组
1. 确认内核已认到相机,排除 WSL 没透传设备的情况。
lsusb | grep 8086看到8086:0b3a就说明 D435i 已透传进 WSL2;如果什么都没有,先修 USB 透传,别急着改规则。
2. 把仓库自带的规则文件复制进 udev 规则目录,让系统知道该给哪些设备开口子。
在 librealsense 仓库根目录执行:
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/这条命令只是搬文件,不动任何权限;覆盖旧版本也没关系,以 config/99-realsense-libusb.rules 里的最新版为准。D435i 对应的就是其中这一行:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3a", MODE:="0666", GROUP:="plugdev"逐项拆开看:
SUBSYSTEMS=="usb":只在 USB 设备事件上触发,其他设备不受影响ATTRS{idVendor}=="8086":锁定 Intel 的厂商 IDATTRS{idProduct}=="0b3a":锁定 D435i 这一具体型号(同一文件还覆盖 D400 全系、T265 及 DFU 恢复模式设备)MODE:="0666":把设备节点权限放开到全员可读写GROUP:="plugdev":设备归属 plugdev 组,组内成员自动获得访问权
3. 把自己加进规则指定的用户组,权限跟着组走而不是跟着 root 走。
sudo usermod -aG plugdev $USER执行完注销再登录一次,组变更才会写进新会话。
4. 让 udev 重读规则,并对已插着的设备重新应用。
sudo udevadm control --reload-rules && sudo udevadm trigger重载加触发一句完成;稳妥起见顺手拔插一次相机,trigger 会按新规则重设节点权限。
规则落盘后,先验收再写代码。
✅ 免 sudo 跑通深度流:一条命令看结果
不加 sudo,直接跑仓库自带的示例(源码编译的话可执行文件在 build 目录里):
./rs-hello-realsense预期输出是终端持续刷新这样一行:
The camera is facing an object 1.234 meters away数字随你离相机的距离实时变化。能稳定刷出它,说明 udev 规则已生效,相机免 sudo 出流成功。如果手头还有 RealSense Viewer,枚举界面里能列出设备也是同一个信号:
要是第一条命令没跑通,别硬试,对着表查。
卡住时对照这三条自查
表现:
lsusb有 8086:0b3a,程序仍报No device found或打开失败。原因:规则重载了,但没对已存在的设备重新应用。解法:拔插一次相机,或补一句sudo udevadm trigger。表现:
usermod执行成功,groups里却查不到 plugdev。原因:用户组变更只对新登录会话生效,旧终端不继承。解法:注销重新登录;赶时间可在当前终端newgrp plugdev临时生效。表现:规则文件明明在
/etc/udev/rules.d/,节点权限却还是 640 或 root 独占。原因:同目录其他99-*.rules或一份更旧的规则抢在前面匹配。解法:从仓库重新sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/覆盖,再跑一遍 reload + trigger 组合命令。
udev 规则是 RealSense 在 Linux 上免 sudo 的根,一次配好,长期有效。想深入定位其他问题看 doc/troubleshooting.md;想一键装或卸这套规则,跑 scripts/setup_udev_rules.sh 即可。
【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考