引
好久之前,我曾经分享过如何为单板机配置超简单 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 编码,相对来说可以做到压缩率、兼容性和性能的平衡。
结语
这个方案相比于上一版性能更好了,体验也更佳。