我们使用jetson一般就是通过ssh连接,但是有些场景还是有桌面环境比较方便,比如摄像头相关的,这时候使用VNC就比较方便。一般可视化界面也是为了视觉相关的任务,对于外接摄像头,jetson支持usb摄像头和CSI摄像头。这篇我们先讲配置usb摄像头以及在docker内使用usb摄像头,后面会给大家分享CSI摄像头的使用方法。
一、jetson VNC配置
使用VNC需要jetson插着显示器的输出接口,或者买个HDMI dummy plug也可以,用来骗jetson自己插着桌面输出显示。
安装 VNC
Step 1. 安装VNC
sudo apt update
sudo apt install vino
Step 2. 配置VNC开机自动启动
cd /usr/lib/systemd/user/graphical-session.target.wants
sudo ln -s ../vino-server.service ./.
Step 3. 配置VNC
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false
Step 4. 给VNC配置个密码
# 把下面的 thepassword 替换成你自己想要的密码
gsettings set org.gnome.Vino authentication-methods "['vnc']"
gsettings set org.gnome.Vino vnc-password $(echo -n 'thepassword'|base64)
Step 5. 编辑org.gnome
cd /usr/share/glib-2.0/schemas
sudo cp org.gnome.Vino.gschema.xml org.gnome.Vino.gschema.xml.old
sudo vi org.gnome.Vino.gschema.xml
把下面的代码粘贴到org.gnome.Vino.gschema.xml文件中,注意要在如图所示的正确的位置插入。
<key name='enabled' type='b'>
<summary>Enable remote access to the desktop</summary>
<description>
If true, allows remote access to the desktip via the RFB
protocol. Users on remote machines may then connect to the
desktop using a VNC viewer.
</description>
<default>false</default>
</key>
编译并运行VNC
编译:
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
sudo reboot
运行(这一步如果error或者warning也不影响):
/usr/lib/vino/vino-server
在其他电脑连接jetson的VNC
首先要确保jetson有插着HDMI连接电脑,或者有插着HDMI Dummy plug,不然会连接失败。
这里只介绍在MacOS上的方法:
在app里找到屏幕共享这个软件。
找到 + 按钮,然后输入jetson的用户名和IP。直接连接就可以了。
其他OS也有类似桌面共享的软件,就不展开说明了。
二、usb摄像头测试
先执行lsusb看下摄像头能不能被识别到。
可以看到可以识别到我这个海康的摄像头。
下面我们安装cheese,使用cheese来测试usb摄像头。
# 安装额外的驱动包
sudo apt-get update
sudo apt-get install cheese
cheese 是一个简单的视频捕获和编辑工具,安装cheese时,它通常会自动安装必要的摄像头驱动。
我们直接在terminal启动cheese就可以
cheese
通过VNC连接,我们可以看到摄像头的数据。
如果报下面的错误或者闪退的话,尝试下面的修改:
报错信息
chees(base) oscar@ubuntu:~$ cheese
JPEG parameter struct mismatch: library thinks size is 584, caller expects 728
修改方法:
sudo rm /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvideo4linux2.so
sudo rm /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvjpeg.so
rm ~/.cache/gstreamer-1.0/registry.aarch64.bin
三、docker内使用usb摄像头
1.在host上接入摄像头
第一件任务就是要判断摄像头的种类与数量,用最简单的 “ls /dev/video*” 指令并不能分辨其种类,因为对于csi摄像头来说,执行ls /dev/video的输出和usb摄像头一样。因此最好的方法还是使用 v4l2 工具。请先执行以下指令安装这个工具:
sudo apt install -y v4l-utils
安装好之后,请执行以下指令:
v4l2-ctl --list-devices
如果检测到以下 “imx219” 之类的信息,表示这个摄像头为 CSI 类型:
如果检测到以下 “USB Camera” 信息的,就表示为 USB 摄像头:
在 Jetson Orin 开发套件的 USB 摄像头都会占用 2 个 video 口,例如上图中的一台 USB 摄像头占用 video0 与 video1 两个端口,但实际能调用作为输入功能的是第一个 video0 的编号,如果设备上有多个摄像头的时候,就需要特别注意这些细节。
2. 相关配置
2.1 确认 DISPLAY 环境变量(关键步骤)
在host上执行
export DISPLAY=:0 # 默认本地显示器(常见于物理机直接操作)
2.2 配置 X Server 访问权限
安装 X11 基础工具(宿主机和容器内均需要):
sudo apt install x11-xserver-utils xauth x11-apps libgl1-mesa-glx libgtk-3-0
# 在宿主机(非容器内)执行以下命令
xhost +local:docker # 允许所有本地 Docker 容器访问 X 服务
检查 X 服务是否运行:
ps aux | grep Xorg # 确认 Xorg 进程存在
3. docker run指令
确保 Docker 命令包含必要的 X11 参数:
docker run -it \
--env DISPLAY=$DISPLAY \
--volume /tmp/.X11-unix:/tmp/.X11-unix \
--device /dev/video0 \ # 若使用摄像头
your_image
完整的指令如下:
sudo docker run --runtime nvidia --gpus all --net host --ipc host -it \
--device /dev/video0 --device /dev/video1 --name yolo_usb3 \
-v /home:/home -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
dustynv/nanoowl:r36.4.0_my
进入到docker container后,记得安装 X11基础工具:
sudo apt install x11-xserver-utils xauth x11-apps libgl1-mesa-glx libgtk-3-0
4. docker container内测试
在container中,执行
xclock # 若弹出时钟窗口,则 X11 转发成功
xclock # 若弹出时钟窗口,则 X11 转发成功
此时应该会弹出一个时钟的窗口。若弹出,代表X11服务从host到docker转发成功。
如果使用opencv打开usb摄像头,一定记得使用 cap = cv2.VideoCapture(0, cv2.CAP_V4L2)来打开摄像头。
到现在基本的cv开发的环境就配置好了。下面我们就用配置好的环境实际来部署一下yolov10的算法,我们直接使用现有的docker深度学习环境,通过usb摄像头,执行实时检测任务。
暂无评论
2026-01-28
2026-01-28
2026-01-27
2026-01-27
2026-01-27
回复评论