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_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec /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 automatizada sudo 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 ligar sudo systemctl enable lightdm # Desabilitando o sddm ao computador ligar sudo systemctl disable sddm # Iniciando o lightdm sudo systemctl start lightdm # Parando o sddm sudo systemctl stop sddm
LXDE
#!/bin/shunset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec /usr/bin/startlxde
XFCE4
#!/bin/shunset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4
GNOME
#!/bin/shunset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec dbus-launch gnome-session
Cinnamon
#!/bin/shunset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec dbus-launch cinnamon-session
LXQT
#!/bin/shunset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec /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=sandbox geometry=1200x700 dpi=96 localhost alwaysshared
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 tiago After=network.target [Service] Type=simple # PAMName=login User=tiago WorkingDirectory=/home/tiago PIDFile=/home/tiago/.vnc/%H:99.pid Restart=always RestartSec=1 StartLimitInterval=0 ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :99 > /dev/null 2>&1 || :' ExecStart=/usr/bin/vncserver :99 -SecurityTypes VncAuth,TLSVnc ExecStop=/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 sudo usermod -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#608028 apt install lxqt-core # Instale o tigervnc server apt 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 lightdm nano /etc/lightdm/lightdm.conf #Dentro do arquivo coloque/substitua: [VNCServer] enabled=true command=/usr/bin/Xvnc :0 -SecurityTypes None,TLSNone port=5900 #listen-address= width=1024 height=768 depth=24 sudo 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 TigerVNC After=network.target [Service] Type=simple ExecStart=/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,TLSVnc ExecStop=/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 agora systemctl --user start tigervnc