jetson orin nano super AI模型部署之路(三)VNC配置、USB摄像头配置以及docker内使用usb摄像头
  【无限机器人】   2026年01月22日   28   0

我们使用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>

image.png

编译并运行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里找到屏幕共享这个软件。
image.png
找到 + 按钮,然后输入jetson的用户名和IP。直接连接就可以了。
image.png
其他OS也有类似桌面共享的软件,就不展开说明了。

二、usb摄像头测试

先执行lsusb看下摄像头能不能被识别到。

可以看到可以识别到我这个海康的摄像头。
image.png
下面我们安装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 类型:
image.png
如果检测到以下 “USB Camera” 信息的,就表示为 USB 摄像头:
image.png
在 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月22日 0 0

暂无评论