惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
N
Netflix TechBlog - Medium
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Y
Y Combinator Blog
博客园 - 聂微东
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
小众软件
小众软件
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
B
Blog
H
Help Net Security
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客
月光博客
月光博客
博客园 - 司徒正美

树 - 洞

SMTP2GO 拯救你的 25 端口限制 | 树 SMTP2GO 拯救你的 25 端口限制 | 树 Bilibili Linux 客户端 VAAPI 硬解折腾全记录 | 树 Bilibili Linux 客户端 VAAPI 硬解折腾全记录 | 树 震惊!insmtr 的 MySQL 数据库居然被勒索软件攻击了! | 树 震惊!insmtr 的 MySQL 数据库居然被勒索软件攻击了! | 树 再探阿里云 DNS 对 CloudFront 的解析情况 | 树 再探阿里云 DNS 对 CloudFront 的解析情况 | 树 为单板机配置超简单 VNC 环境 改良版 | 树 Ubuntu 22.04 Rust OpenCV 注意事项 | 树 Redmi AX6000 hanwckf U-Boot 安装 OpenWrt 24 | 树 为单板机配置超简单 VNC 环境 | 树 Ubuntu 22.04 Rust OpenCV 注意事项 | 树 Redmi AX6000 hanwckf U-Boot 安装 OpenWrt 24 | 树 为单板机配置超简单 VNC 环境 | 树 在 WSL 中使用 ISE | 树 在 WSL 中使用 ISE | 树 Jetson AGX Orin CH340 驱动安装 | 树 Jetson AGX Orin CH340 驱动安装 | 树 在 Ubuntu 22.04 上运行 PX4-Autopilot 1.13 | 树 在 Ubuntu 22.04 上运行 PX4-Autopilot 1.13 | 树 在 Thunderbird 里使用沉浸式翻译插件 | 树 在 Thunderbird 里使用沉浸式翻译插件 | 树 搭建自定义域名邮箱 | 树 - 洞 搭建自定义域名邮箱 | 树 - 洞 Android Box for root 透明代理 | 树 再见,曾经热爱的算法竞赛 | 树 - 洞 再见,曾经热爱的算法竞赛 | 树 - 洞
为单板机配置超简单 VNC 环境 改良版 | 树
insmtr · 2026-03-12 · via 树 - 洞

好久之前,我曾经分享过如何为单板机配置超简单 VNC 环境。我们在那个方案所使用的 x11vnc 上游长期缺乏更新,使用的参数也过于激进,这直接导致了我们在实际使用中占用单板机 CPU 资源过多,画面变化多的时候占用大量带宽。整体体感十分卡顿,体验非常一般。

所以,我们可以使用功能类似的,但是更轻量,编码效率也更高效的 x0vncserver 来代替 x11vnc

安装

我们依旧选用 Xvfb 作虚拟桌面,选用 x0vncserver 作 VNC 服务器,openbox 作窗口管理器的解决方案。

sudo apt update
sudo apt install -y xvfb tigervnc-scraping-server openbox

然后我们写一个启动脚本,命名为 start_vnc.sh ,内容如下:

Xvfb :99 -screen 0 1280x800x24 &
x0vncserver -display :99 -SecurityTypes=None
DISPLAY=:99 openbox &

脚本中的 -screen 0 1280x800x24 可以根据需要修改分辨率和颜色深度, :99 是显示器的编号,如果你本地已经有一个显示器在使用 :99 ,那么你可以改成 :100 或者其他的。

如果你希望连接时使用密码保护,可以先手动生成密码文件,再传给 x0vncserver 使用:

vncpasswd
# 然后输入密码,生成的密码文件默认保存在 ~/.vnc/passwd
# 接着修改脚本中的 x0vncserver 启动命令:
x0vncserver -display :99 -PasswordFile ~/.vnc/passwd

然后我们给脚本添加执行权限:

chmod +x start_vnc.sh

接下来就是设置开机自启动了。我选择使用 crontab 来管理。

crontab -e

在文件末尾添加以下内容:

@reboot /你创建的脚本所在的目录/start_vnc.sh

保存并退出。

最后再指定一下软件的显示器。我们在 ~/.bashrc 中添加以下内容:

export DISPLAY=:99

然后重启单板机,没有问题的话,VNC 服务就已经启动起来了。

连接

在本地使用 VNC 客户端连接到单板机的 IP 地址,端口号默认是 5900

如果你的单板机上运行了多个 VNC ,不知道对应的端口号,可以先在单板机上使用 ss -tuln | grep 59 命令查看正在监听的端口,找到 59xx 的行,一个一个尝试就行。或者我们可以在 start_vnc.sh 脚本中直接指定端口号,比如 x0vncserver -display :99 -SecurityTypes=None -rfbport 5901 ,这样这个 VNC 的端口就固定在 5901 了。

尝试在 ssh 中启动一个需要图形界面的程序,比如 xeyes ,可以看到,VNC 客户端中已经可以正常显示了。

如果你使用 TigerVNC 作为 VNC 客户端,连接后建议选择 Tight 编码,这样可以获得更好的性能。如果你使用其它的 VNC 客户端,比如说 RealVNC Viewer,建议选择 ZRLE 编码,相对来说可以做到压缩率、兼容性和性能的平衡。

结语

这个方案相比于上一版性能更好了,体验也更佳。