介绍
为什么要使用tigervnc,根据当前工程使用的情况来看:
-
跨平台
支持多种操作系统,包括Linux,Windows和macOS,因此可以在不同平台间实现远程控制和访问。
-
开源
tigervnc是开源的,采用GNU GPL开源协议发布。
-
性能
从使用情况来看,使用tigervnc的客户端远程控制和访问,画面展示帧率较高(不会像使用tightvnc那样类似播放幻灯片的效果)。如下是在被控制端播放适配的情况下,在控制端的查看情况:
tightvnc | tigervnc | |
---|---|---|
带宽 | ![]() | ![]() |
画面 | 幻灯片效果 | 较流程 |
CPU | 15-20% | 5-10% |
环境准备
VNC官网:TigerVNC
vnc版本:tigervnc-1.13.1
源码:TigerVNC/tigervnc: High performance, multi-platform VNC client and server (github.com)
path:适配修改客户端的屏幕比服务端的屏幕小,需要鼠标指正滚动的情况,修改客户端显示的时候自动缩放。
Linux编译
编译目录结构
build.sh package.sh tigervnc-1.13.1
编译脚本(build.sh):
# 安装依赖
sudo apt-get install cmake libssl-dev libxtst-dev libpam0g-dev libjpeg-turbo8-dev libtool-bin build-essential
sudo apt-get install libfltk1.3-dev
cd tigervnc-1.13.1
mkdir build
cd build
# 配置生成makefile和编译
cmake ..
make
打包脚本(package.sh):
rm -rf bin
mkdir bin
# 拷贝
cp -af ./tigervnc-1.13.1/build/vncviewer/vncviewer ./bin
cp -af ./tigervnc-1.13.1/build/vncviewer/x0vncserver ./bin
cp -af /usr/lib/x86_64-linux-gnu/libjpeg.so* ./bin
cp -af /usr/lib/x86_64-linux-gnu/libfltk_images.so* ./bin
cp -af /usr/lib/x86_64-linux-gnu/libfltk.so* ./bin
Windows编译
-
32位动态编译
启动MINGW32,如下:
执行如下命令:
# 安装依赖 pacman -Syu pacman -S make yasm diffutils pkg-config pacman -S mingw-w64-i686-cmake pacman -S mingw-w64-i686-fltk pacman -S mingw-w64-i686-gnutls pacman -S mingw-w64-i686-gcc pacman -S mingw-w64-i686-make pacman -S mingw-w64-i686-pixman # 生成makefile文件 cmake -G "MSYS Makefiles" ../ # 编译 make
可执行程序的动态库,可使用depends来查看其依赖的库(注意需要使用64的depends)。在C:\msys64\mingw32\bin目录下去拷贝对应的动态库。
-
64位动态编译
启动MINGW64,如下:
执行如下命令:
# 安装依赖 pacman -Syu pacman -S make yasm diffutils pkg-config pacman -S mingw-w64-x86_64-cmake pacman -S mingw-w64-x86_64-fltk pacman -S mingw-w64-x86_64-gnutls pacman -S mingw-w64-x86_64-gcc pacman -S mingw-w64-x86_64-make pacman -S mingw-w64-x86_64-pixman # 生成makefile文件 cmake -G "MSYS Makefiles" ../ # 编译 make
可执行程序的动态库,可使用depends来查看其依赖的库(注意需要使用64的depends)。在C:\msys64\mingw64\bin目录下去拷贝对应的动态库。如下是64位运行依赖的库。
-
静态编译
静态编译生成的文件会将动态库打包到可执行程序中,只需要一个exe即可执行程序
-
修改静态编译的cmake文件:
在静态编译过程中tigerVNC会报各种错误异常, 有的时候错误是依赖库出了问题, 这里我们修改一下依赖库文件。
修改文件:tigervnc\cmake\StaticBuild.cmake,修改内容:
# 第68行 set(GNUTLS_LIBRARIES "-Wl,-Bstatic -lgnutls -lpthread -lzstd -lbrotlienc -lbrotlicommon -lbrotlidec") # 第184行 if(WIN32) set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lmingw32 -lgcc_eh -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread")
-
执行编译脚本
其他的编译脚本命令和win32,win64的执行脚本一致,只增加-DBUILD_STATIC=1的参数
cmake -G "MSYS Makefiles" ../ DBUILD_STATIC=1 make
执行命令
启动客户端(start_client.sh):
.... $root_dir/vnc/vncviewer $SERVER_IP::SERVER_PORT ....
启动服务端(start_server.sh):
.... $root_dir/vnc/x0vncserver --display=$DISPLAY -SecurityTypes=None ....
-