LibVNCServer: библиотека для простой реализации VNC-сервера. Авторское право (C) 2001–2003 Йоханнес Э. Шинделин
Если у вас есть вопросы общего характера, лучше всего задать их в чате сообщества. Если вас беспокоит ошибка или запрос на добавление функции, воспользуйтесь системой отслеживания проблем.
Если вы уже использовали LibVNCServer, вы, вероятно, захотите прочитать НОВОСТИ.
VNC — это набор программ, использующих протокол RFB (Remote Frame Buffer). Они предназначены для «экспорта» кадрового буфера через сеть: вы настраиваете сервер и можете подключиться к нему через VNC-просмотрщики. Если сервер поддерживает WebSockets (что делает LibVNCServer), вы также можете подключиться с помощью средства просмотра VNC в браузере, например noVNC.
Он уже широко используется для администрирования, но самостоятельно запрограммировать сервер не так-то просто.
Это было изменено LibVNCServer.
На домашней странице есть предварительный список всех проектов, использующих либо LibVNCServer, либо LibVNCClient, либо оба.
Имя | Число | LibVNCServer | LibVNCClient |
---|---|---|---|
Никто | 1 | ✔ | ✔ |
VNC-аутентификация | 2 | ✔ | ✔ |
SASL | 20 | ✔ | |
MSLogon | 0xfffffffa | ✔ | |
Яблоко АРД | 30 | ✔ | |
ТЛС | 18 | ✔ | |
ВенКрипт | 19 | ✔ | |
UltraVNC MSLogonII | 113 | ✔ |
Имя | Число | LibVNCServer | LibVNCClient |
---|---|---|---|
Сырой | 1 | ✔ | ✔ |
Копирект | 2 | ✔ | ✔ |
РРЕ | 3 | ✔ | ✔ |
КОРРЕ | 4 | ✔ | ✔ |
шестигранник | 5 | ✔ | ✔ |
Злиб | 6 | ✔ | ✔ |
Тугой | 7 | ✔ | ✔ |
Ультра | 9 | ✔ | ✔ |
ТРЛЕ | 15 | ✔ | |
ЗРЛЭ | 16 | ✔ | ✔ |
ЗИВРЛЕ | 17 | ✔ | ✔ |
ПлотноPNG | -260 | ✔ |
Имя | LibVNCServer | LibVNCClient |
---|---|---|
РФБ | ✔ | ✔ |
Зашифрованный RFB через VeNCrypt | ✔ | |
Зашифрованный RFB через AnonTLS | ✔ | |
Вебсокеты | ✔ | |
Зашифрованные веб-сокеты | ✔ |
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 .
Протестировано с MinGW-w64 в Debian, который следует установить с помощью sudo apt install mingw-w64
. Вы можете использовать предоставленный файл цепочки инструментов. Он заставляет CMake ожидать (необязательных) зависимостей win32, таких как libjpeg и другие, в каталоге deps
. Обратите внимание, что вам нужны (вероятно, самостоятельно созданные) пакеты разработки для win32, пакеты -dev
, поставляемые с вашим дистрибутивом, не будут работать. Также обратите внимание, что для запуска примеров вам необходимо поместить libwinpthread-1.dll
в каталог сборки. Вы можете найти эту DLL на своей машине сборки Linux, выполнив locate libwinpthread-1.dll
.
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .
См. вводную документацию по API LibVNCServer, чтобы узнать, как создать экземпляр сервера, подключить обработчики ввода и обрабатывать курсоры.
Если вы предпочитаете изучать LibVNCServer на примере, посмотрите серверы в каталоге example/server.
Примеры для LibVNCClient можно найти в файле example/client.
В процессе установки устанавливаются файлы pkg-config .pc для LibVNCServer, а также LibVNCClient, которые вы можете использовать в своей системе сборки с помощью обычной команды pkg-config --cflags libvncserver
et al.
Если вы используете 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
. Важно не начинать из каталога examples
, иначе серверная программа не сможет найти свой индексный файл HTTP. Серверная программа сообщит вам URL-адрес, на который нужно указать ваш веб-браузер. Там вы можете нажать кнопку noVNC, чтобы подключиться с помощью субмодуля git средства просмотра noVNC (устанавливается через git submodule update --init
).
Если у вас еще нет сертификата SSL, которому доверяет ваш браузер, наиболее удобный способ его создать — использовать minica. В дистрибутивах на базе Debian его можно установить с помощью sudo apt install minica
, на MacOS — с помощью brew install minica
.
Перейдите в каталог веб-клиентов и создайте сертификаты хоста и центра сертификации с помощью:
cd webclients
minica -org "LibVNC" $(hostname)
Доверьте сертификату в своем браузере, импортировав созданный cacert.crt
, например, для Firefox перейдите в «Параметры» -> «Конфиденциальность и безопасность» -> «Просмотр сертификатов» -> «Аттестаты» и импортируйте созданный cacert.crt
, установите флажок, чтобы использовать его для доверенных веб-сайтов. Для других браузеров процесс аналогичен.
Затем вы, наконец, можете запустить пример сервера, передав ему созданный ключ хоста и сертификат:
../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt
Серверная программа сообщит вам URL-адрес, на который нужно указать ваш веб-браузер. Там вы можете нажать кнопку подключения с шифрованием noVNC, чтобы подключиться с помощью встроенной программы просмотра noVNC с использованием зашифрованного соединения Websockets.
Если ваше соединение клиент-сервер медленное из-за «медленного» соединения, следует учитывать несколько моментов.
Прежде всего, вам необходимо выяснить, имеет ли ваш канал низкую пропускную способность, высокую задержку или и то, и другое.
По каналу с высокой задержкой попробуйте постоянно запрашивать обновления кадрового буфера, поскольку RFB по умолчанию запрашивается клиентом, а не сервером. Один пример реализации можно найти здесь, и он определенно улучшает отзывчивость.
Также существует расширение ContinuousUpdates RFB, но оно не поддерживается LibVNC (пока).
Если ваш канал имеет низкую пропускную способность, вам в основном придется уменьшить количество байтов, отправляемых при каждом обновлении кадрового буфера:
В начале этого проекта Дшо, первоначальный автор, хотел сделать его лицензией BSD. Однако он основан на большом количестве кода под лицензией GPL, поэтому это должна быть лицензия GPL.
Люди из AT&T очень хорошо поработали, чтобы создать что-то столь же чистое и экономичное, как VNC. Менеджеры решили, что ради славы выпустят программу бесплатно. Но не только это! Они поняли, что, выпустив код бесплатно, VNC станет развивающимся маленьким ребенком, покоряющим новые миры, чем будут очень гордиться его родители. Как же они могут быть! Чтобы защитить это нововведение, они решили сделать его GPL, а не BSD. Принципиальное отличие заключается в следующем: вы можете создавать программы с закрытым исходным кодом, основанные на BSD, а не на GPL. Вы должны отдать должное обоим.
Наш коммерческий продукт хочет использовать LibVNCServer для создания собственного VNC-сервера и его распространения. Будет ли это считаться производной работой в контексте GPLv2?
Да. Обратите внимание: хотя вам придется придерживаться лицензии GPL для вашей программы, если вы ссылаетесь на LibVNCServer/LibVNCClient, вам не нужно публиковать свой код, если вы используете производную работу внутри своей организации, см. 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, США.