VNC简介
VNC(Virtual Network Computing)是基于RFB(Remote Frame Buffer)协议的远程系统,C/S端口默认为5900,B/S端口默认为5800。
RFB (远程帧缓存) 是一个远程图形用户的简单协议,工作在帧缓存级别上,其传输的是像素数据是以XY为起点的方框数据,通过矩形图形数据组进行帧缓存的更新。另外更新是由客户端通过命令驱动的,也就是说更新只是服务器在响应客户端的请求时发生的,如果网络较差时,有些帧的缓存会忽略,这样能减少客户端对网络和绘制速度的要求。
远程桌面协议对比:
|
SPICE |
VNC |
RDP |
BIOS屏幕显示 |
能 |
能 |
不能 |
全彩支持 |
能 |
能 |
能 |
更改分辨率 |
能 |
能 |
能 |
多显示器 |
多显示器支持(高达4画面) |
只有一个屏幕 |
多显示器支持 |
图像传输 |
图像和图形传输 |
图像传输 |
图像和图形传输 |
视频播放支持 |
GPU加速支持 |
不能 |
GPU加速支持 |
音频传输 |
双向语音可以控制 |
不能 |
双向语音可以控制 |
鼠标控制 |
客户端服务器都可以控制 |
服务器端控制 |
服务器端控制 |
VNC作为一种远程桌面协议,常常用在嵌入式开发中,在嵌入式设备上运行vnc服务程序,即可在PC端远程控制。
QT环境要求
- QT版本需要
5.8
以上,可以下载相应版本的源码包,比如5.9.6.zip,解压之后,在qtbase/src/plugins/platforms
下可以看见有vnc
的源码

- 检查qt库安装目录下插件
plugins
文件夹中platforms
目录是否有vnc动态库libqvnc.so
# ls /usr/lib/qt5.8/plugins/platforms/
libqeglfs.so libqminimal.so libqoffscreen.so
libqlinuxfb.so libqminimalegl.so libqvnc.so
注意:QT提供的VNC服务比较简单,只支持一些基本的功能,另外老版本的VNC中也有一些BUG可能会造成崩溃,所以最好还是尽量使用新版本。
使用教程
QT程序启动vnc服务
-
方式1:通过设置环境变量,改变程序的启动方式
配置QT程序的启动的方式 export QT_QPA_PLATFORM=vnc
-
方式2:启动程序时指定启动方式
启动参数./test -platform vnc:size=800x600,port=12345
- size 分辨率
- port 服务端口号(不加则默认为5900)
使用VNC客户端
市面上的VNC客户端有很多,常用的比如Realvnc,另外也有很多开源的项目:
参考