求助:WSL无法访问摄像头,Win10下Ubuntu Shell运行Python代码遇问题
WSL 2访问Windows摄像头的最新方案
嘿,好消息!现在WSL 2已经完全支持访问Windows的摄像头了,不管是笔记本集成的还是USB外接的都有可行的办法,不用再像一两年前那样卡壳啦~下面分两种场景给你详细说:
一、访问笔记本集成摄像头(Win10 21H2+ / Win11)
确认WSL版本:先确保你用的是WSL 2,在Windows的PowerShell或命令行里敲:
wsl --list --verbose看到你的Ubuntu发行版对应的VERSION是2就行;如果是1,用这条命令转换:
wsl --set-version Ubuntu 2(把
Ubuntu换成你实际用的发行版名字)安装WSL端依赖:打开Ubuntu Shell,更新包并安装摄像头检测工具:
sudo apt update && sudo apt install v4l-utils验证摄像头识别:执行这条命令查看WSL是否识别到Windows的摄像头:
v4l2-ctl --list-devices如果能看到类似
Integrated Camera的设备,并且对应/dev/video0这样的路径,就说明成功了。Python代码调用注意事项:
- 用OpenCV的话,直接用
cv2.VideoCapture(0)即可(如果有多个设备,尝试1、2等编号)。 - 如果遇到权限报错,给设备文件加读写权限:
sudo chmod 666 /dev/video0 - 确保你的OpenCV是最新版本,更新一下:
pip install --upgrade opencv-python
- 用OpenCV的话,直接用
二、访问USB外接摄像头
如果是外接USB摄像头,或者集成摄像头识别有问题,可以用USB直通工具:
在Windows上安装usbipd-win:这个工具能把Windows的USB设备直通到WSL里,直接在Windows上安装即可。
绑定并附加USB摄像头到WSL:
- 打开管理员权限的PowerShell,列出所有USB设备:
usbipd wsl list - 找到你的摄像头对应的总线ID(比如
1-2),执行命令附加到WSL:usbipd wsl attach --busid 1-2
- 打开管理员权限的PowerShell,列出所有USB设备:
回到WSL验证:同样用
v4l2-ctl --list-devices确认设备,之后的Python调用步骤和上面一致。
常见问题排查
- 如果识别不到设备,试试重启WSL:在PowerShell里敲
wsl --shutdown,再重新打开Ubuntu Shell。 - 检查Windows的摄像头权限:打开Windows设置→隐私和安全性→摄像头,确保“允许应用访问摄像头”开关打开,并且“适用于Linux的Windows子系统”的权限也已开启。
内容的提问来源于stack exchange,提问作者gladys0313




