TigerVNC

O TigerVNC é um dos principais servidores e clientes de VNC para Linux. Seu desenvolvimento é impulsionado pela Red Hat e seu código é totalmente open source, o que faz dele o melhor software de VNC da atualidade (na minha opinião).

O TigerVNC permite:

  • Controlar uma tela real (fazendo com que a pessoa na frente do monitor veja o que a outra está fazendo)
  • Controlar uma tela virtual (várias pessoas podem usar o mesmo computador, simultaneamente e todos através de interface gráfica)
  • Definir senhas para acessar o computador
  • Permitir acesso usando senhas PAM
  • Criptografar o acesso remoto com TLS

Como instalar o TigerVNC?

O servidor TigerVNC é o programa que permite o computador ser controlado remotamente.

Para instalar no Debian/Ubuntu use

# Instalando o TigerVNC Serversudo apt install tigervnc-standalone-server# Para versões mais antigas do Debian/Ubuntu# sudo apt install vnc4server # Se quiser instalar o TigerVNC Viewer (cliente)sudo apt install tigervnc-viewer

Para instalar no Fedora use

# Instalando o TigerVNC Serversudo dnf install tigervnc-server-minimal# Cuidado! o tigervnc-server-minimal não conta com o comando vncserver# Instalando o TigerVNC Server e também o TigerVNC Viewer (cliente)sudo dnf install tigervnc-server

Pronto, o TigerVNC está instalado no seu Linux!

Configurando o TigerVNC Server

Agora vamos configurar o TigerVNC Server, permitindo que máquinas remotas acessem o computador.

Criando uma senha de acesso remoto

Pelo terminal, acesse o usuário que será usado pelo acesso remoto e execute:

vncpasswd

Digite a senha no teclado. O arquivo ~/.vnc/passwd será criado com a senha digitada.

Definindo qual Desktop Environment será aberto com o VNC

Crie o seguinte arquivo ~/.vnc/xstartup

Faça o arquivo xstartup ter pelo menos permissão de execução.

touch ~/.vnc/xstartupchmod 750 ~/.vnc/xstartup

O conteúdo dele varia de acordo com o desktop environment desejado

KDE

#!/bin/shunset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESSexec /usr/bin/startkde

Na sequência instale o LightDM, pois o KDM não funciona corretamente com VNC.

# Instalando o lightdmsudo apt install lightdm

Trocando o sddm pelo lightdm

# Temos dois jeitos de fazer a troca do sddm para lightdm# Jeito 1 - Configuração automatizadasudo dpkg-reconfigure sddm# (você pode trocar sddm por qualquer outro display manager desejado)# aparecerá uma interface gráfica GUI, ela te guiará pela configuração# Jeito 2 - Configuração manual# Iniciando o lightdm automaticamente ao computador ligarsudo systemctl enable lightdm# Desabilitando o sddm ao computador ligarsudo systemctl disable sddm# Iniciando o lightdmsudo systemctl start lightdm# Parando o sddmsudo systemctl stop sddm

LXDE

#!/bin/shunset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESSexec /usr/bin/startlxde

XFCE4

#!/bin/shunset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESSexec startxfce4

GNOME

#!/bin/shunset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESSexec dbus-launch gnome-session

Cinnamon

#!/bin/shunset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESSexec dbus-launch cinnamon-session

LXQT

#!/bin/shunset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESSexec /usr/bin/startlxqt

Tipos de autenticação e tipos de segurança de conexão

A autenticação e a encriptação da conexão é definida pelo parâmetro -SecurityTypes

Sobre autenticação, O TigerVNC suporta 4 tipos:

Sem autenticação nenhuma, anônima

Autenticação por nome de usuário e senha

Autenticação por senha vnc

Autenticação por certificado x509

Sobre criptografia, o TigerVNC suporta 3 tipos:

Sem criptografia, com criptografia TLS (anônimo) e TLS com certificado X509.

Todas essas configurações se traduzem para os parâmetros

None, VncAuth, Plain, TLSNone, TLSVnc, TLSPlain, X509None, X509Vnc and X509Plain.

O padrão é VncAuth,TLSVnc

É possível deixar habilitado mais de um tipo de autenticação/criptografia.

Se você tem dúvida em mexer com criptografia, é sempre possível fazer o tunelamento com SSH reverso para criptografar a conexão.

Definindo outras configurações do TigerVNC Server (opcional)

Crie um arquivo em ~/.vnc/config

nano ~/.vnc/config

As configurações contidas aqui podem ser tanto as do comando vncserver quanto as do comando Xvnc.

Um exemplo de configuração (copiado da documentação da wiki do Arch Linux):

securitytypes=tlsvncdesktop=sandboxgeometry=1200x700dpi=96localhostalwaysshared

Fazendo o TigerVNC iniciar automaticamente

Para fazer o TigerVNC iniciar automaticamente após um restart crie o seguinte arquivo de serviço em /etc/systemd/system/tigervnc.service

Vamos iniciar o TigerVNC para o usuário tiago.

sudo nano /etc/systemd/system/tigervnc.service

# Colocamos o TigerVNC server para escutar na porta 5999 Para mudar isso altere onde encontrar :99[Unit]Description=TigerVNC Server for tiagoAfter=network.target[Service]Type=simple# PAMName=loginUser=tiagoWorkingDirectory=/home/tiagoPIDFile=/home/tiago/.vnc/%H:99.pidRestart=alwaysRestartSec=1StartLimitInterval=0ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :99 > /dev/null 2>&1 || :'ExecStart=/usr/bin/vncserver :99 -SecurityTypes VncAuth,TLSVncExecStop=/usr/bin/vncserver -kill :99[Install]WantedBy=multi-user.target

Qual comando o TigerVNC usa por baixo dos panos?

Ao rodar o comando vncserver:5 no Fedora é possível ver que por baixo dos panos foi executado o seguinte:

/usr/bin/Xvnc :5 -auth /root/.Xauthority -desktop fedora:5 () -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /root/.vnc/passwd -rfbport 5905 -rfbwait 30000

TigerVNC Server e o inetd

O inetd é um software padrão nos sistemas operacionais unix que fica escutando pacotes tcp/udp em determinada porta, sobe um servidor responsável por lidar com conexões naquela porta e faz o intermédio da conexão.

Ele é configurado em /etc/inetd.conf

No caso do TigerVNC, ele serve para permitir várias pessoas acessando o TigerVNC ao mesmo tempo, na mesma porta. Assim você não precisa atribuir várias portas, uma para cada sessão.

https://en.wikipedia.org/wiki/Inetd

Um exemplo de configuração do /etc/inetd.conf

5950 stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd -query localhost -once securitytypes=none

o inetd escutará na porta 5950. Assim que uma conexão chegar, ele executará o comando (iniciará o tigervnc) Xvnc -inetd -query localhost -once securitytypes=none

Tutorial com inetd
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-tigervnc

https://www.stuartellis.name/articles/vnc-on-linux/

https://linuxconfig.org/install-vnc-server-on-redhat-8

http://www.fifi.org/doc/vncserver/README.inetd

Tutorial interessante! Tentar com o comando
https://developer.ibm.com/technologies/linux/tutorials/os-multiuserloginsvnc/
/usr/bin/Xvnc :55 -SecurityTypes None,TLSNone

Referências

Documentação do TigerVNC - Fedora
https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/infrastructure-services/TigerVNC/

Documentação do TigerVNC - ArchLinux
https://wiki.archlinux.org/index.php/TigerVNC

Documentação do TigerVNC - RHEL 7
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-tigervnc

Documentação do pacote tigervnc-server-minimal do Fedora
https://www.mankier.com/package/tigervnc-server-minimal

Documentação do comando vncserver do TigerVNC
(Arch Manual) https://jlk.fjfi.cvut.cz/arch/manpages/man/vncserver.1
(TigerVNC Manual) https://tigervnc.org/doc/vncserver.html

Documentação do comando Xvnc do TigerVNC
(ArchManual) https://jlk.fjfi.cvut.cz/arch/manpages/man/Xvnc.1
(TigerVNC Manual) https://tigervnc.org/doc/Xvnc.html

Discussão sobre bugs do TigerVNC com o systemd
https://github.com/TigerVNC/tigervnc/issues/1096

Tutoriais rápidos

Instalando LXQT e TigerVNC em um Debian 10

Esse tutorial instala o LXQT e o TigerVNC em um Debian 10 (server) sem nenhum ambiente de desktop instalado anteriormente. Ele é muito útil caso tenha um servidor e queira instalar uma interface gráfica nele, ou para ter um sistema operacional extremamente leve.

# Crie um usuário e adicione ele ao grupo sudosu -apt install sudousermod -aG sudo username# Instale o LXQT na versão desejada# lxqt-core para o mais leve possivel# lxqt para uma versão intermediaria# task-lxqt-desktop para uma versão com mais pacotes# Veja mais em https://unix.stackexchange.com/questions/608027/what-is-the-difference-between-lxqt-core-lxqt-and-task-lxqt-desktop/608028#608028apt install lxqt-core# Instale o tigervnc serverapt install tigervnc-standalone-server

Testando o VNC

Um comando para iniciar o vncserver e testar seus parâmetros é o:

vncserver :2 -SecurityTypes Plain -localhost no# Por trás dos panos, esse comando se traduz para (o nome do pc é hostname e o nome do usuário é):# /usr/bin/Xtigervnc :2 -desktop hostname (debian) -auth /home/debian/.Xauthority -geometry 1900x1200 -depth 24 -rfbwait 30000 -rfbport 5901 -pn -SecurityTypes plain -PAMService tigervnc -PlainUsers debian

Não se esqueça de criar o arquivo xstartup.

Integrando LightDM ao TigerVNC

O LightDM possui suporte nativo ao VNC. Isso significa que, ao se conectar, você é levado à tela do LightDM e lá fará o login. Essa solução funciona para qualquer ambiente de desktop linux. Outra vantagem é que é possível ter várias conexões VNC rodando em paralelo sem nenhum usuário pré determinado.

sudo apt install lightdmsudo systemctl enable lightdmnano /etc/lightdm/lightdm.conf#Dentro do arquivo coloque/substitua:[VNCServer]enabled=truecommand=/usr/bin/Xvnc :0 -SecurityTypes None,TLSNoneport=5900#listen-address=width=1024height=768depth=24sudo systemctl reboot

Um contra dessa abordagem é que as sessões ficam abertas. É preciso fechá-las manualmente. Outro problema é que aparecem alguns bugs se você acessar o mesmo usuário ao mesmo tempo.

TigerVNC com serviço systemd a nível de usuário

[Atenção] não consegui fazer o tigervnc funcionar com systemd a nível de usuário. Caso queira, use o método padrão, com systemd a nível root.

Imagine que temos um usuario chamado tiago e queremos que o TigerVNC inicie automaticamente para somente ele.

O primeiro passo é habilitar o systemd para o usuario que deseja fazer acesso remoto. Se você ainda não habilitou, siga o tutorial em Usando o systemd a nível de usuário, sem precisar de sudo!

Feito isso, crie o arquivo de serviço do systemd em ~/.config/systemd/user/tigervnc.service

[Unit]Description=%u's TigerVNCAfter=network.target[Service]Type=simpleExecStart=/usr/bin/tigervncserver :1 -SecurityTypes VncAuth,TLSVnc -rfbauth /home/%u/.vnc/passwd# Também tentei assim:# /usr/bin/Xvnc :1 -desktop %u@%H -geometry 800x600 -depth 24 -rfbauth /home/%u/.vnc/passwd -SecurityTypes VncAuth,TLSVncExecStop=/usr/bin/tigervncserver -kill :1[Install]WantedBy=multi-user.target

Crie o arquivo ~/.vnc/xstartup conforme descrito anteriormente.

Crie uma senha vnc conforme descrito anteriormente.

Faça o serviço inicializar automaticamente após um reboot e inicie-o com:

# Iniciando o tigervnc automaticamente ao ligar o computadorsystemctl --user enable tigervnc# Iniciando o tigervnc agorasystemctl --user start tigervnc

You should also read: