LibVNCServer:一个用于轻松实现 VNC 服务器的库。版权所有 (C) 2001-2003 Johannes E. Schindelin
如果您有一般性问题,最好在社区聊天中提问。如果您担心的是错误或功能请求,请使用问题跟踪器。
如果您已经使用过 LibVNCServer,您可能想阅读 NEWS。
VNC 是一组使用 RFB(远程帧缓冲区)协议的程序。它们旨在通过网络“导出”帧缓冲区:您设置一个服务器并可以通过 VNC 查看器连接到它。如果服务器支持 WebSockets(LibVNCServer 支持),您还可以使用浏览器内的 VNC 查看器(如 noVNC)进行连接。
它已经广泛用于管理,但自己对服务器进行编程并不那么容易。
这已被 LibVNCServer 更改。
主页有使用 LibVNCServer 或 LibVNCClient 或两者的所有项目的暂定列表。
姓名 | 数字 | LibVNC服务器 | LibVNC客户端 |
---|---|---|---|
没有任何 | 1 | ✔ | ✔ |
VNC认证 | 2 | ✔ | ✔ |
SASL | 20 | ✔ | |
微软登录 | 0xfffffffa | ✔ | |
苹果ARD | 30 | ✔ | |
传输层安全协议 | 18 | ✔ | |
维加密 | 19 | ✔ | |
UltraVNC MSLogonII | 113 | ✔ |
姓名 | 数字 | LibVNC服务器 | LibVNC客户端 |
---|---|---|---|
生的 | 1 | ✔ | ✔ |
复制矩形 | 2 | ✔ | ✔ |
RRE | 3 | ✔ | ✔ |
科瑞 | 4 | ✔ | ✔ |
六角形 | 5 | ✔ | ✔ |
兹利布 | 6 | ✔ | ✔ |
紧的 | 7 | ✔ | ✔ |
极端主义者 | 9 | ✔ | ✔ |
TRLE | 15 | ✔ | |
中瑞利 | 16 | ✔ | ✔ |
齐伊尔勒 | 17 号 | ✔ | ✔ |
紧身PNG | -260 | ✔ |
姓名 | LibVNC服务器 | LibVNC客户端 |
---|---|---|
射频波束 | ✔ | ✔ |
通过 VeNCrypt 加密 RFB | ✔ | |
通过 AnonTLS 加密 RFB | ✔ | |
网络套接字 | ✔ | |
加密的 Websocket | ✔ |
LibVNCServer 使用 CMake,您可以在此处下载,或者更好的是,使用您平台的包管理器(apt、yum、brew、macports、chocolatey 等)进行安装。
然后您可以通过以下方式构建:
mkdir build
cd build
cmake ..
cmake --build .
LibVNCClient 和 LibVNCServer 中的加密支持可以使用不同的后端:
-DWITH_OPENSSL=ON -DWITH_GCRYPT=OFF
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=ON
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=OFF
)LibVNCClient 和 LibVNCServer 中的传输层安全支持可以使用:
-DWITH_OPENSSL=ON -DWITH_GNUTLS=OFF
)-DWITH_OPENSSL=OFF -DWITH_GNUTLS=ON
)有关包括依赖项安装的一些更全面的示例,请参阅 Unix CI 和 Windows CI 构建设置。
请参阅 https://developer.android.com/ndk/guides/cmake.html 作为参考,但基本上可以归结为:
mkdir build
cd build
cmake .. -DANDROID_NDK= -DCMAKE_TOOLCHAIN_FILE= -DANDROID_NATIVE_API_LEVEL=
cmake --build .
在 Debian 上使用 MinGW-w64 进行了测试,您应该通过sudo apt install mingw-w64
安装它。您可以使用提供的工具链文件。它将 CMake 设置为期望(可选)win32 依赖项,例如 libjpeg 和deps
目录中的朋友。请注意,您需要(可能是自建的)win32 开发包,您的发行版附带的-dev
包将不起作用。另请注意,您需要将libwinpthread-1.dll
放入构建目录中才能运行示例。您可以通过locate libwinpthread-1.dll
在Linux 构建机器上找到此DLL。
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .
有关如何创建服务器实例、连接输入处理程序和处理游标的信息,请参阅 LibVNCServer API 介绍文档。
如果您更喜欢通过示例来学习 LibVNCServer,请查看 Examples/server 目录中的服务器。
对于LibVNCClient,可以在examples/client中找到示例。
安装过程会为 LibVNCServer 和 LibVNCClient 安装 pkg-config .pc 文件,您可以通过常用的pkg-config --cflags libvncserver
等在构建系统中使用它们。
如果使用 CMake,LibVNCServer 版本 > 0.9.13 提供 CMake 配置文件,因此在项目的 CMakeLists.txt 中,您可以说:
find_package (LibVNCServer)
if (LibVNCServer_FOUND)
# libs and headers location are now accessible via properties, but you only
# need to add the respective export target to your project's target_link_libraries,
# cmake will automatically add libs and headers
# eg: add client (YOUR_PROJECT_TARGET being a placeholder for your real target -
# it must be defined by add_executable or add_library):
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncclient)
# add server:
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncserver)
endif ()
您可以通过../examples/example
从 webclients 目录启动示例服务器来尝试内置的 websockets 支持。重要的是不要从examples
目录中启动,否则服务器程序将找不到其 HTTP 索引文件。服务器程序会告诉您一个 URL,让您的网络浏览器指向该 URL。在那里,您可以单击 noVNC 按钮以使用 noVNC 查看器 git 子模块(可通过git submodule update --init
安装)进行连接。
如果您还没有浏览器信任的 SSL 证书,最方便的创建方法是使用 minica。在基于 Debian 的发行版上,您可以通过sudo apt install minica
来安装它,在 MacOS 上通过brew install minica
安装它。
转到 webclients 目录并通过以下方式创建主机和 CA 证书:
cd webclients
minica -org "LibVNC" $(hostname)
通过导入创建的cacert.crt
来信任浏览器中的证书,例如对于 Firefox,请转到选项->隐私和安全->查看证书->权限并导入创建的cacert.crt
,勾选复选框以将其用于信任网站。对于其他浏览器,过程类似。
然后,您终于可以启动示例服务器,为其提供创建的主机密钥和证书:
../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt
服务器程序会告诉您一个 URL,让您的网络浏览器指向该 URL。在那里,您可以单击 noVNC 加密连接按钮,使用捆绑的 noVNC 查看器(使用加密的 Websockets 连接)进行连接。
如果您的客户端-服务器连接由于链接“慢”而缓慢,则需要考虑一些事项。
首先,您必须调查您的链路是否具有低吞吐量或高延迟或两者兼而有之。
在高延迟链接上,尝试连续请求帧缓冲区更新,因为 RFB 默认为客户端拉取,而不是服务器推送。可以在这里找到一个示例实现,它确实提高了响应能力。
还有 ContinuousUpdates RFB 扩展,但 LibVNC 尚不支持该扩展。
如果您的链接吞吐量较低,则基本上必须减少每次帧缓冲区更新发送的字节数:
在这个项目开始时,原作者 Dscho 希望将其设为 BSD 许可证。然而,它基于大量 GPL 代码,因此它必须是 GPL。
AT&T 的员工工作得非常出色,才生产出像 VNC 这样干净、精简的产品。经理们决定,为了名誉,他们将免费发布该程序。但不仅如此!他们意识到,通过免费发布代码,VNC 将成为一个不断发展的小孩,征服新世界,让其父母感到非常自豪。他们也可以!为了保护这项创新,他们决定将其设为 GPL,而不是 BSD。主要区别是:您可以制作源自 BSD 的闭源程序,而不是源自 GPL。你必须对两者给予适当的信任。
我们的商业产品想要利用LibVNCServer来创建我们自己的VNC服务器并进行分发。这会被视为 GPLv2 上下文中的衍生作品吗?
是的。请注意,虽然如果链接到 LibVNCServer/LibVNCClient,您的程序必须遵守 GPL,但如果您在组织内部使用衍生作品,则不必公开代码,请参阅 https://www .gnu.org/licenses/gpl-faq.html#GPLRequireSourcePostedPublic
修改 LibVNCServer 代码是否对确定我们的 VNC 服务器是否被视为衍生作品有任何影响?
不需要。只需链接到 LibVNCServer/LibVNCClient,您的程序就变成了衍生作品。
该程序是免费软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;许可证的版本 2,或(由您选择)任何更高版本。
分发此程序的目的是希望它有用,但不提供任何保证;甚至没有适销性或特定用途适用性的默示保证。有关更多详细信息,请参阅 GNU 通用公共许可证。
您应该随该程序一起收到 GNU 通用公共许可证的副本;如果没有,请写信给 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA。