Linux下无sudo权限无法运行Python GStreamer脚本问题求助
问题背景
- 硬件平台:Jetson Orin
- 操作系统:Ubuntu 20.05 Linux
- 故障表现:Python 调用 GStreamer pipeline 时,普通用户权限执行脚本会启动失败,必须在命令前加
sudo提权才能正常运行,已尝试多种常规排查手段均未解决。
最简复现代码:
import sys import cv2 def read_cam(): G_STREAM_TO_SCREEN = "videotestsrc num-buffers=50 ! videoconvert ! appsink" cap = cv2.VideoCapture(G_STREAM_TO_SCREEN, cv2.CAP_GSTREAMER) if cap.isOpened(): cv2.namedWindow("demo", cv2.WINDOW_AUTOSIZE) while True: ret_val, img = cap.read() cv2.imshow('demo',img) cv2.waitKey(1) else: print("camera open failed") cv2.destroyAllWindows() if __name__ == '__main__': read_cam()
修复方案
按以下优先级逐一排查验证:
- 用户组权限缺失
Jetson平台访问视频、编解码相关硬件接口需要用户在对应系统组内,执行以下命令将当前登录用户加入相关用户组,执行完成后重启设备生效:sudo usermod -aG video $USER sudo usermod -aG gpio $USER sudo usermod -aG i2c $USER - GStreamer用户缓存权限异常
之前用sudo运行脚本会在当前用户目录生成root属主的GStreamer缓存,普通用户无读写权限就会启动失败,执行命令直接清理异常缓存即可:rm -rf ~/.cache/gstreamer-1.0/ - GStreamer插件目录权限错误
Jetson预装的GStreamer硬件加速插件默认存放在系统路径,若目录权限配置错误会导致普通用户无法加载插件,执行命令修复全局可读权限:sudo chmod -R a+rX /usr/lib/aarch64-linux-gnu/gstreamer-1.0/ - 普通用户环境变量缺失
sudo运行时会加载系统级环境变量,普通用户环境未配置GStreamer插件路径时会出现加载失败,先执行以下命令测试是否为环境变量问题:
如果上述命令能正常运行,将环境变量写入用户shell配置文件持久化生效:GST_PLUGIN_PATH=/usr/lib/aarch64-linux-gnu/gstreamer-1.0 python3 你的脚本文件名.pyecho 'export GST_PLUGIN_PATH=/usr/lib/aarch64-linux-gnu/gstreamer-1.0' >> ~/.bashrc source ~/.bashrc
禁止长期用sudo运行视频采集、图形显示类脚本,反复提权运行会不断生成root属主的用户配置、缓存文件,会反复触发普通用户运行的权限问题。
内容的提问来源于stack exchange,提问作者Magnus_G
相关产品推荐
相关产品推荐

