Jetson Nano Jetson Nano - 如何实现VNC远程桌面控制
本文教你如何实现VNC到你的Jetson Nano,这样就不需要连接屏幕来实现远程桌面控制啦。
树莓派官方系统默认是安装了RealVNC的服务,只需在电脑上到RealVNC官方下载软件VNC Viewer,即可方便VNC实现树莓派远程桌面控制。然而……Jetson Nano就没这么直接了。
事不宜迟,以下是搭建VNC服务的正式教程:
1. 安装VNC服务
首先在Jetson Nano桌面以下快捷键打开终端: Ctrl + Alt + T
或,通过ssh远程到Jetson Nano的代码行,输入以下代码:
sudo apt update
sudo apt install vino
2. 搭建VNC服务程序
到用户主目录下,新创建bash执行文件
cd
nano openvino
进入nano界面,将以下代码复制到新建文本下:
#!/bin/bash
export DISPLAY=:0
gsettings set org.gnome.Vino enabled true
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false
/usr/lib/vino/vino-server &
然后快捷键,保存文本: Ctrl + x
回到终端,修改openvino文件权限为可执行,并执行
chmod +x ~/openvino
sudo reboot
重启一下Jetson Nano
3. 开启VNC服务
重新进入Jetson Nano的命令行,运行程序,开启VNC服务
~/openvino
(提示:以后每次开启系统或关闭VNC服务之后,需要运行此口令重新开启VNC服务)
报出提示“No such key “enabled”,忽略… 并如无意外出现以下运行提示:
jetson@jetson:~$ 18/11/2019 13时39分54秒 Autoprobing TCP port in (all) network interface
18/11/2019 13时39分54秒 Listening IPv6://[::]:5900
18/11/2019 13时39分54秒 Listening IPv4://0.0.0.0:5900
18/11/2019 13时39分54秒 Autoprobing selected port 5900
18/11/2019 13时39分54秒 Advertising security type: 'TLS' (18)
18/11/2019 13时39分54秒 Re-binding socket to listen for VNC connections on TCP port 5900 in (all) interface
18/11/2019 13时39分54秒 Listening IPv6://[::]:5900
18/11/2019 13时39分54秒 Listening IPv4://0.0.0.0:5900
18/11/2019 13时39分54秒 Clearing securityTypes
18/11/2019 13时39分54秒 Advertising security type: 'TLS' (18)
18/11/2019 13时39分54秒 Clearing securityTypes
18/11/2019 13时39分54秒 Advertising security type: 'TLS' (18)
18/11/2019 13时39分54秒 Advertising authentication type: 'No Authentication' (1)
18/11/2019 13时39分54秒 Re-binding socket to listen for VNC connections on TCP port 5900 in (all) interface
18/11/2019 13时39分54秒 Listening IPv6://[::]:5900
18/11/2019 13时39分54秒 Listening IPv4://0.0.0.0:5900
18/11/2019 13时39分54秒 Clearing securityTypes
18/11/2019 13时39分54秒 Clearing authTypes
18/11/2019 13时39分54秒 Advertising security type: 'TLS' (18)
18/11/2019 13时39分54秒 Advertising authentication type: 'No Authentication' (1)
18/11/2019 13时39分54秒 Advertising security type: 'No Authentication' (1)
以上代表我们的VNC服务已经成功开启!
按Ctrl + c可返回口令行,继续进行其他口令操作 (这不会关闭VNC服务的,其进程已在后台持续运行当中)
3. 取得IP地址
ifconfig | grep -A 1 wlan0
## 得到以下信息:
wlan0: flags=4163 mtu 1500
inet 192.168.199.119 netmask 255.255.255.0 broadcast 192.168.199.255
以上inet后面的192.168.199.119就是小编Jetson nano的ip地址
4. 打开VNC Viewer
接下来可以到我们电脑下载并打开VNC Viewer了
跳出安全提示,按continue继续,
看到用户界面了,成功!

如果出现以下提示:
Reading version failed: not an RFB server?
代表我们之前在Jetson nano并未能成功开启VNC服务,需要回到前面debug一下了,或给我们留意 =)
5. 关闭VNC服务
如果我们需要关闭VNC服务,那我们得先找出vino-server后台程序编号是多少,然后将其kill掉。
回到Jetson Nano的口令行,输入以下:
ps -ef | grep vino
#得到以下信息:
jetbot 7096 1 0 13:39 pts/0 00:00:00 /usr/lib/vino/vino-server
jetbot 10082 6770 0 13:48 pts/0 00:00:00 grep --color=auto vino
以上7096就是我当前vnc服务程序运行的编号, 大家根据自己情况修改以下程序编号来kill掉这进程:
kill 7096
这样VNC服务就会关闭了。
6. 配置开机自启动
每次重启后都要手动运行脚本太麻烦,我们可以将其设置为systemd服务自动启动。
创建systemd服务文件
sudo nano /etc/systemd/system/vnc.service
添加以下内容:
[Unit]
Description=VNC Server for Jetson Nano
After=network.target graphical.target
[Service]
Type=simple
User=jetbot
Environment=DISPLAY=:0
ExecStart=/usr/lib/vino/vino-server
Restart=on-failure
RestartSec=5
[Install]
WantedBy=graphical.target
保存并退出(Ctrl+X,然后Y)。
启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable vnc.service
sudo systemctl start vnc.service
验证服务状态:
sudo systemctl status vnc.service
现在每次开机都会自动启动VNC服务了。
7. 安全配置建议
默认配置下VNC没有密码保护,这在生产环境中存在安全风险。以下是几种安全加固方案:
方案1:设置VNC密码
gsettings set org.gnome.Vino require-encryption true
gsettings set org.gnome.Vino authentication-methods "['vnc']"
gsettings set org.gnome.Vino vnc-password $(echo -n "你的密码" | base64)
方案2:使用SSH隧道(推荐)
通过SSH隧道加密VNC流量:
# 在你的电脑上执行,建立SSH隧道
ssh -L 5900:localhost:5900 jetbot@192.168.199.119
然后在VNC Viewer中连接 localhost:5900,这样所有流量都通过SSH加密传输。
方案3:防火墙限制访问
只允许特定IP访问5900端口:
sudo ufw allow from 你的电脑IP to any port 5900
sudo ufw deny 5900
8. 性能优化技巧
如果VNC连接卡顿或延迟较高,可以尝试以下优化:
降低颜色深度
在VNC Viewer设置中将颜色模式改为 “Low color (8-bit)” 或 “Medium color (16-bit)“。
禁用桌面特效
# 禁用GNOME动画效果
gsettings set org.gnome.desktop.interface enable-animations false
# 禁用合成器
gsettings set org.gnome.desktop.wm.preferences compositing-manager false
调整VNC编码
# 使用更快的编码
gsettings set org.gnome.Vino encoding "tight"
使用替代方案:x11vnc
如果vino性能不够理想,可以尝试x11vnc:
sudo apt install x11vnc
# 设置密码
x11vnc -storepasswd
# 启动服务
x11vnc -display :0 -rfbauth ~/.vnc/passwd -forever -loop
x11vnc通常比vino有更好的性能,支持更多高级特性。
9. 常见问题排查
问题1:VNC Viewer连接失败
症状:提示 “Connection refused” 或超时
排查步骤:
- 检查vino服务是否运行:
ps aux | grep vino - 检查防火墙:
sudo ufw status - 确认IP地址正确:
ifconfig | grep inet - 尝试ping测试网络连通性
解决方案:
# 重启vino服务
sudo systemctl restart vnc.service
# 或直接运行
~/openvino
问题2:连接成功但黑屏
原因:DISPLAY变量设置错误或桌面环境未启动
解决方案:
# 确认DISPLAY设置
export DISPLAY=:0
# 检查桌面环境
ps aux | grep gnome-session
问题3:鼠标移动延迟严重
原因:网络延迟或性能瓶颈
解决方案:
- 使用有线网络代替WiFi
- 降低VNC颜色深度
- 关闭不必要的桌面特效
- 考虑使用x11vnc替代vino
问题4:分辨率不合适
调整桌面分辨率:
# 查看可用分辨率
xrandr
# 设置分辨率
xrandr --output HDMI-0 --mode 1920x1080
10. 总结与最佳实践
通过VNC远程控制Jetson Nano可以大幅提升开发效率,无需连接显示器即可完成所有操作。以下是关键要点:
必须做的:
- 配置开机自启动服务
- 设置密码或使用SSH隧道保护安全
- 记住IP地址获取方法(
ifconfig) - 准备备用访问方式(SSH)
推荐的:
- 使用x11vnc替代vino获得更好性能
- 禁用桌面特效减少延迟
- 配置防火墙限制访问
- 定期更新系统保持安全
注意事项:
- 生产环境务必启用认证和加密
- 不要将VNC直接暴露到公网
- 定期检查日志排查问题
掌握了这些技巧,你就可以在任何地方通过笔记本电脑或平板远程开发Jetson Nano项目了!
VNC 高级配置
1. 性能优化
提高 VNC 连接速度:
# 1. 降低颜色深度
vncserver :1 -geometry 1280x720 -depth 16
# 2. 使用 TightVNC 编码器(压缩率更高)
vncserver :1 -localhost no -geometry 1920x1080
# 3. 配置 x0vncserver 优化参数
x0vncserver -display :0 -compresslevel 6 -quality 6
VNC 客户端优化设置:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| ColorLevel | 256 colors | 减少带宽占用 |
| CompressLevel | 6 | 中等压缩 |
| Quality | 6 | 平衡质量和速度 |
| Encoding | Tight | 高效编码 |
2. 自动启动配置
设置 VNC 开机自启:
# 创建 systemd 服务
sudo nano /etc/systemd/system/vncserver@.service
[Unit]
Description=Start VNC Server at tty%i
After=display-manager.service
[Service]
Type=forking
User=your_username
ExecStart=/usr/bin/vncserver :%i -geometry 1920x1080 -depth 24
ExecStop=/usr/bin/vncserver -kill :%i
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
# 启用服务
sudo systemctl enable vncserver@1.service
sudo systemctl start vncserver@1.service
3. 安全加固
使用 SSH 隧道:
# 客户端通过 SSH 连接
ssh -L 5901:localhost:5901 user@jetson_ip
# 然后 VNC 客户端连接 localhost:5901
配置防火墙:
# 只允许 SSH 访问
sudo ufw default deny incoming
sudo ufw allow ssh
sudo ufw enable
# 不开放 VNC 端口
# VNC 只通过 SSH 隧道访问
启用 VNC 密码:
# 设置 VNC 密码
vncpasswd
# 强制使用密码认证
echo "Authentication=VncAuth" >> ~/.vnc/config
4. 多显示器支持
# 配置双显示器
vncserver :1 -geometry 3840x1080
# 或使用 xrandr 配置
xrandr --setmonitor VNC-1 1920/508x1080/285+0+0 VIRTUAL1
xrandr --setmonitor VNC-2 1920/508x1080/285+1920+0 VIRTUAL2
5. 远程桌面共享
共享物理显示器:
# 安装 x11vnc
sudo apt install x11vnc
# 共享当前显示器
x11vnc -display :0 -forever -shared
# 创建 systemd 服务
sudo nano /etc/systemd/system/x11vnc.service
[Unit]
Description=x11vnc remote desktop server
After=display-manager.service
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -display :0 -forever -shared -rfbauth /home/your_username/.vnc/passwd
ExecStop=/bin/kill -TERM $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
实际应用案例
案例1:机器人开发
使用 VNC 远程开发机器人项目:
# 1. 安装开发环境
sudo apt install ros-melodic-desktop
pip3 install jupyterlab
# 2. 启动机器人控制程序
roslaunch my_robot robot.launch
# 3. 通过 VNC 监控
# 可以在远程查看机器人状态、调试代码
优势:
- 无需外接显示器
- 实时监控机器人状态
- 远程调试代码
- 降低硬件成本
案例2:边缘计算
将 Jetson Nano 部署为边缘计算节点:
# 1. 安装 Docker
sudo apt install docker.io
sudo usermod -aG docker $USER
# 2. 运行 AI 推理服务
docker run -d --runtime nvidia \
-p 8080:8080 \
nvcr.io/nvidia/deepstream-l4t:5.0.1-20.09-samples
# 3. 通过 VNC 管理服务
# 远程监控资源使用、查看日志
案例3:教学实验
搭建远程实验室:
# 1. 配置多个用户
sudo useradd -m student1
sudo useradd -m student2
# 2. 为每个用户启动 VNC
su - student1
vncserver :1 -geometry 1280x720
su - student2
vncserver :2 -geometry 1280x720
# 3. 学生通过 VNC 客户端连接
# 进行远程实验和开发
故障排查
常见问题
问题1:VNC 连接黑屏
# 解决方案:检查桌面环境
echo "mate-session &" > ~/.vnc/xstartup
chmod +x ~/.vnc/xstartup
vncserver -kill :1
vncserver :1
问题2:性能缓慢
# 优化方案:
# 1. 降低分辨率
vncserver :1 -geometry 1280x720
# 2. 使用更低的颜色深度
vncserver :1 -depth 16
# 3. 禁用桌面效果
gsettings set org.mate.Marco.general compositing-manager false
问题3:无法连接
# 检查步骤:
# 1. 检查 VNC 服务状态
sudo systemctl status vncserver@1
# 2. 检查端口监听
sudo netstat -tlnp | grep 590
# 3. 检查防火墙
sudo ufw status
# 4. 查看日志
tail -f ~/.vnc/*.log
替代方案
1. RDP(远程桌面协议)
# 安装 xrdp
sudo apt install xrdp
# 启动服务
sudo systemctl enable xrdp
sudo systemctl start xrdp
# 使用 Windows 远程桌面连接
# 或 Linux 下的 Remmina
2. X2Go
# 安装 X2Go
sudo apt install x2goserver x2goserver-xsession
# 客户端使用 X2Go Client
# 比 VNC 更流畅,支持音频转发
3. NoMachine
# 下载 NoMachine
wget https://www.nomachine.com/downloads/free/Linux/nomachine_7.10.1_1_arm64.deb
# 安装
sudo dpkg -i nomachine_*.deb
# 优势:性能更好,支持文件传输、音频
总结
通过 VNC 远程访问 Jetson Nano,我们可以:
✅ 无头运行:无需外接显示器、键盘、鼠标 ✅ 远程开发:随时随地访问开发环境 ✅ 降低成本:减少硬件投入 ✅ 提高效率:多任务并行处理 ✅ 便于管理:集中管理多个设备
最佳实践:
- 使用 SSH 隧道提高安全性
- 合理配置分辨率和颜色深度
- 设置开机自启方便使用
- 定期更新系统保持安全
- 备份重要配置文件
下一步:
- 探索更高效的远程桌面方案(NoMachine、X2Go)
- 配置自动化部署脚本
- 搭建集群管理系统
- 集成监控告警
希望这篇指南能帮助你更好地使用 Jetson Nano 进行远程开发!
相关资源: