如何让Rust程序获取摄像头访问权限?(Ubuntu 22.10环境)
解决Uvc库打开摄像头时的Access权限错误
问题重现
使用Rust的uvc库尝试打开摄像头时触发权限错误,代码如下:
use uvc::{Context, Frame}; fn main() { let ctx = Context::new().expect("Could not create context"); let dev = ctx .find_device(None, None, None) .expect("Could not find device"); let devh = dev.open().expect("Could not open device"); }
报错信息:
thread 'main' panicked at 'Could not open device: Access'
环境:Ubuntu 22.10,希望避免使用sudo运行程序。
解决方案
问题根源是普通用户缺少摄像头设备的访问权限——Ubuntu系统中摄像头设备默认归video用户组管理,只需将当前用户加入该组即可:
检查当前用户是否已在
video组:groups输出中如果没有
video,则执行下一步操作。将用户加入
video组:sudo usermod -aG video $USER使权限生效:
要么重新登录系统(最稳妥),要么执行以下命令临时切换组(仅当前终端会话有效):newgrp video验证权限:
查看摄像头设备的权限信息(以/dev/video0为例,若有多个摄像头可替换序号):ls -l /dev/video0输出中应包含
crw-rw----+ 1 root video ...,说明video组已拥有读写权限。
完成以上步骤后,直接运行cargo run即可正常打开摄像头。
内容的提问来源于stack exchange,提问作者altywalty
相关产品推荐
相关产品推荐

