LibVNCServer: Uma biblioteca para fácil implementação de um servidor VNC. Direitos autorais (C) 2001-2003 Johannes E. Schindelin
Se você tiver alguma dúvida geral, é melhor perguntar no chat da comunidade. Se sua preocupação for sobre um bug ou solicitação de recurso, use o rastreador de problemas.
Se você já usou o LibVNCServer, provavelmente vai querer ler NEWS.
VNC é um conjunto de programas que utiliza o protocolo RFB (Remote Frame Buffer). Eles são projetados para "exportar" um buffer de quadros via rede: você configura um servidor e pode se conectar a ele através de visualizadores VNC. Se o servidor suportar WebSockets (o que o LibVNCServer oferece), você também poderá se conectar usando um visualizador VNC no navegador como o noVNC.
Já é amplamente utilizado para administração, mas não é tão fácil programar um servidor sozinho.
Isso foi alterado pelo LibVNCServer.
A página inicial possui uma lista provisória de todos os projetos que usam LibVNCServer ou LibVNCClient ou ambos.
Nome | Número | Servidor LibVNC | LibVNCClient |
---|---|---|---|
Nenhum | 1 | ✔ | ✔ |
Autenticação VNC | 2 | ✔ | ✔ |
SASL | 20 | ✔ | |
MS Logon | 0xfffffffa | ✔ | |
Apple ARD | 30 | ✔ | |
TLS | 18 | ✔ | |
VenCrypt | 19 | ✔ | |
UltraVNC MSLogon II | 113 | ✔ |
Nome | Número | Servidor LibVNC | LibVNCClient |
---|---|---|---|
Cru | 1 | ✔ | ✔ |
CopiarRect | 2 | ✔ | ✔ |
RRE | 3 | ✔ | ✔ |
CoRRE | 4 | ✔ | ✔ |
Hextil | 5 | ✔ | ✔ |
Zlib | 6 | ✔ | ✔ |
Apertado | 7 | ✔ | ✔ |
Ultra | 9 | ✔ | ✔ |
TRLE | 15 | ✔ | |
ZRLE | 16 | ✔ | ✔ |
ZYWRLE | 17 | ✔ | ✔ |
ApertadoPNG | -260 | ✔ |
Nome | Servidor LibVNC | LibVNCClient |
---|---|---|
RFB | ✔ | ✔ |
RFB criptografado via VeNCrypt | ✔ | |
RFB criptografado via AnonTLS | ✔ | |
WebSockets | ✔ | |
Websockets criptografados | ✔ |
LibVNCServer usa CMake, que você pode baixar aqui ou, melhor ainda, instalar usando o gerenciador de pacotes da sua plataforma (apt, yum, brew, macports, chocolatey, etc.).
Você pode então construir por meio de:
mkdir build
cd build
cmake ..
cmake --build .
O suporte criptográfico em LibVNCClient e LibVNCServer pode usar backends diferentes:
-DWITH_OPENSSL=ON -DWITH_GCRYPT=OFF
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=ON
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=OFF
)O suporte ao Transport Layer Security em LibVNCClient e LibVNCServer pode usar:
-DWITH_OPENSSL=ON -DWITH_GNUTLS=OFF
)-DWITH_OPENSSL=OFF -DWITH_GNUTLS=ON
)Para obter alguns exemplos mais abrangentes que incluem a instalação de dependências, consulte as configurações de compilação do Unix CI e do Windows CI.
Consulte https://developer.android.com/ndk/guides/cmake.html como referência, mas basicamente tudo se resume a:
mkdir build
cd build
cmake .. -DANDROID_NDK= -DCMAKE_TOOLCHAIN_FILE= -DANDROID_NATIVE_API_LEVEL=
cmake --build .
Testado com MinGW-w64 no Debian, que você deve instalar via sudo apt install mingw-w64
. Você pode usar o arquivo de conjunto de ferramentas fornecido. Ele define o CMake para esperar dependências win32 (opcionais), como libjpeg e amigos no diretório deps
. Observe que você precisa de pacotes de desenvolvimento (provavelmente autoconstruídos) para win32, os pacotes -dev
que acompanham sua distribuição não funcionarão. Observe também que você precisará colocar libwinpthread-1.dll
no diretório de construção para executar os exemplos. Você pode encontrar esta DLL em sua máquina de compilação Linux por meio de locate libwinpthread-1.dll
.
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .
Consulte a documentação de introdução da API LibVNCServer para saber como criar uma instância de servidor, conectar manipuladores de entrada e manipular cursores.
Caso você prefira aprender LibVNCServer por exemplo, dê uma olhada nos servidores no diretório exemplos/servidor.
Para LibVNCClient, exemplos podem ser encontrados em exemplos/cliente.
O processo de instalação instala arquivos pkg-config .pc para LibVNCServer, bem como LibVNCClient, que você pode usar em seu sistema de compilação por meio do pkg-config --cflags libvncserver
et al.
Se estiver usando o CMake, as versões do LibVNCServer> 0.9.13 fornecem arquivos de configuração do CMake, portanto, no CMakeLists.txt do seu projeto, você pode dizer:
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 ()
Você pode experimentar o suporte integrado a websockets iniciando o servidor de exemplo no diretório webclients via ../examples/example
. É importante não iniciar no diretório examples
, caso contrário o programa do servidor não encontrará seu arquivo de índice HTTP. O programa do servidor informará um URL para o qual apontar seu navegador. Lá, você pode clicar no botão noVNC para conectar-se usando o submódulo git do visualizador noVNC (instalável via git submodule update --init
).
Se você ainda não possui um certificado SSL confiável para seu navegador, a maneira mais confortável de criar um é usando o minica. Em distros baseadas em Debian, você pode instalá-lo via sudo apt install minica
, no MacOS via brew install minica
.
Vá para o diretório webclients e crie certificados de host e CA por meio de:
cd webclients
minica -org "LibVNC" $(hostname)
Confie no certificado em seu navegador importando o cacert.crt
criado, por exemplo, para Firefox, vá para Opções->Privacidade e Segurança->Ver Certificados->Autoridades e importe o cacert.crt
criado, marque a caixa de seleção para usá-lo em sites confiáveis. Para outros navegadores, o processo é semelhante.
Então, você pode finalmente iniciar o servidor de exemplo, fornecendo a ele a chave do host e o certificado criados:
../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt
O programa do servidor informará um URL para o qual apontar seu navegador. Lá, você pode clicar no botão de conexão criptografada noVNC para conectar-se usando o visualizador noVNC incluído usando uma conexão Websockets criptografada.
Se a sua conexão cliente-servidor estiver lenta porque o link está “lento”, há algumas coisas a serem consideradas.
Primeiro, você deve investigar se o seu link tem baixo rendimento, alta latência ou ambos.
Em um link de alta latência, tente solicitar atualizações de framebuffer continuamente, já que RFB é pull-client por padrão, não push-server. Um exemplo de implementação pode ser encontrado aqui e definitivamente melhora a capacidade de resposta.
Também existe a extensão ContinuousUpdates RFB, mas essa não é suportada pelo LibVNC (ainda).
Se o seu link tiver baixo rendimento, você basicamente terá que reduzir o número de bytes enviados por atualização do framebuffer:
No início deste projeto, Dscho, o autor original, gostaria de torná-lo uma licença BSD. No entanto, é baseado em bastante código GPL, então tem que ser uma GPL.
O pessoal da AT&T trabalhou muito bem para produzir algo tão limpo e enxuto quanto o VNC. Os gestores decidiram que, para sua fama, iriam lançar o programa gratuitamente. Mas não só isso! Eles perceberam que ao liberar também o código gratuitamente, o VNC se tornaria uma criança em evolução, conquistando novos mundos, deixando seus pais muito orgulhosos. Eles também podem ser! Para proteger esta inovação, eles decidiram torná-la GPL, não BSD. A principal diferença é: você pode criar programas de código fechado derivados do BSD, não da GPL. Você tem que dar o devido crédito a ambos.
Nosso produto comercial deseja usar LibVNCServer para criar nosso próprio servidor VNC e distribuí-lo. Isso será considerado trabalho derivado no contexto da GPLv2?
Sim. Observe que, embora você tenha que seguir a GPL para o seu programa se vincular ao LibVNCServer/LibVNCClient, você não precisa tornar seu código público caso use o trabalho derivado internamente em sua organização, consulte https://www .gnu.org/licenses/gpl-faq.html#GPLRequireSourcePostedPublic
Modificar o código LibVNCServer faz ou não alguma diferença na determinação se nosso servidor VNC será considerado trabalho derivado?
Não. Simplesmente vinculando-se ao LibVNCServer/LibVNCClient, seu programa se torna um trabalho derivado.
Este programa é um software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation; a versão 2 da Licença ou (a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a Licença Pública Geral GNU para mais detalhes.
Você deverá ter recebido uma cópia da Licença Pública Geral GNU junto com este programa; caso contrário, escreva para Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, EUA.