Acessando um computador remotamente pela internet ou rede local (acesso remoto)

Você precisa acessar e controlar seu computador Windows, Linux, FreeBSD com interface gráfica (GUI) a partir de outro computador?

Sabemos que para acessar Linux e FreeBSD por linha de comando (terminal), a resposta é sempre SSH, como mostro neste post. Mas e quando temos um Linux com interface gráfica?

A resposta mais simples geralmente passa pelo TeamViewer, porque é o software mais famoso de todos. O problema do TeamViewer é que ele não é gratuito para uso comercial, apenas pessoal. Se você quer uma solução gratuita para sua empresa, aqui está uma lista de softwares interessantes pra você.

Há várias maneiras diferentes de se fazer acesso remoto, e elas dependem do sistema operacional.

Podemos dividir os softwares de acesso remoto de desktop em 3, com base na sua característica.

  • Acesso remoto real com sessão compartilhada

    É como o TeamViewer, VNC, NoMachine e funcionam. Ao abrir o acesso remoto você verá exatamente o que está sendo mostrado na tela do computador, na mesma resolução. Se alguem estiver do outro lado do computador enquanto o acesso remoto acontece, a pessoa ficará vendo o que você está fazendo.
  • Acesso remoto virtual com sessão compartilhada

    É como o RDP no Windows funciona. Ao iniciar o acesso remoto, a pessoa que estiver usando a mesma conta no monitor físico será deslogada e voltará para a tela de login enquanto a pessoa com acesso remoto estiver controlando a máquina. Nesta modalidade o usuário do acesso remoto consegue redimensionar a tela facilmente.
  • Acesso remoto virtual com sessão nova (virtual desktop session)

    É como alguns VNCs configurados de uma forma mais avançada funcionam, NoMachine Enterprise e também alguns tipos de RDP no Windows. Nesse modo o acesso remoto pode ser feito ao mesmo tempo em que o computador é usado fisicamente porque o que mostra em um é independente do que é mostrado no outro. É como se existissem sessões de desktop diferentes rodando ao mesmo tempo, mas de forma isolada.

Opções de acesso remoto no Windows

Para controlarmos um Windows remotamente podemos usar:

RDP (Remote Desktop Protocol)
NX (NoMachine)
TeamViewer
AnyDesk

Opções de acesso remoto no Linux

Para controlarmos um Linux remotamente podemos usar:

X11
XRDP (X11 Remote Desktop Protocol)
x11VNC
TigerVNC
TightVNC
TurboVNC
UltraVNC
krfb
NX (NoMachine)
SPICE
TeamViewer
XPRA
X2GO

Aqui nesse tutorial é comum eu falar em servidor e cliente:
Servidor é o software que fica rodando silenciosamente no seu computador e permite que alguém consiga acessar remotamente seu computador.
Cliente é o software que você usará para acessar remotamente outro computador.

O que é VNC?

VNC (virtual network computing) é um protocolo padrão para acesso de acesso remoto no Linux (e também em outros sistemas operacionais, mas com menos relevância). O computador a ser controlado precisa ser instalado com um servidor VNC, enquanto o computador que controlará outros computadores precisa de um cliente VNC. A troca de mensagens comandos entre o cliente VNC e o servidor VNC usa o protocolo VNC.

Existem diferentes tipos de servidores VNC, e cada um tem suas particularidades, prós e contras. Alguns são mais leves, outros permitem encriptar a comunicação, outros comprimem o envio da imagem, e assim por diante.

O que é RDP?

RPD é usado pelo RPD da Microsoft (Área de Trabalho Remota) e é diferente do VNC. Ao se conectar num computador via RDP você se conecta usando o usuário e a senha de um usuário cadastrado no computador. Ao se conectar, outras sessões RDP ou no próprio computador que estiverem usando esse usuário são deslogados.

A vantagem é que você consegue se conectar com diferentes usuários diferentes ao mesmo tempo na mesma máquina se estiver usando um Windows Server (se for num Windows Pro/Ultimate, apenas uma conexão RPD é permitida... a não ser que você instale um software que burle isso).

A desvantagem é que se você precisar ajudar alguém por acesso remoto via RDP, você não conseguirá mexer na tela ao mesmo tempo que a pessoa que está do outro lado.

Servidores VNC

X11VNC

É servidor VNC usado pela imagem oficial do Selenium no Docker. Seu diferencial é que ele não cria uma sessão ou tela virtual a ser controlada, ele compartilha e dá controle à tela real do computador.

Referências

X11vnc no ArchLinux Wiki
https://wiki.archlinux.org/index.php/X11vnc

X11vnc - Instalando
https://tecadmin.net/setup-x11vnc-server-on-ubuntu-linuxmint/

TigerVNC

Antigo vnc4server nos repositórios mais antigos do Debian/Ubuntu.

Instalando o TigerVNC (Servidor)

# Instalando o TigerVNC Serversudo apt install tigervnc-standalone-server# Se quiser instalar o cliente VNCsudo apt install tigervnc-viewer

Configurando o servidor VNC

Como o Linux é um sistema fortemente customizado, existem vários programas diferentes com que o TigerVNC precisará interagir para funcionar. O primeiro deles é o X Display Manager (também Login Manager). O X Display Manager é o programa que gerencia e desenha a tela de login após ligar o computador ou após fazer logout de um usuário. Os mais conhecidos são GDM (usado pelo GNOME), LightDM, LXDM (usado pelo LXDE), SDDM (usado pelo KDE Plasma e o LXQt) e o XDM.

O mais recomendado destes é o LightDM (o SDDM, por exemplo, não funciona direito com o VNC).

Descubra seu X Display manager com:

# Debian/Ubuntucat /etc/X11/default-display-manager# RHEL/Fedora/CentOScat /etc/sysconfig/desktop# OpenSUSEcat /etc/sysconfig/displaymanager

Instale o LightDM com o comando

sudo apt install lightdm

Como existem várias interfaces gráficas no Linux, você precisa dizer ao VNC qual delas ele usará.

Descubra quais interfaces gráficas estão instaladas na sua máquina em:

cd /usr/share/xsessions/

Quase nenhum VNC funciona corretamente com o KDE Plasma (acredito que uma das causas seja o gerenciador de sessão SDDM). Caso você use ele, é recomendável instalar outra interface gráfica em paralelo com o KDE. Gostei pessoalmente do LXDE (ele usa o gerenciador de sessão LightDM), tudo isso ocupará aproximadamente 80mb no disco. Instale-o com:

sudo apt install lxde-core

Cada arquivo dessa pasta é um executável para uma interface gráfica. Escolha a de seu gosto e abra o arquivo de configuração para descobrir qual comando precisamos usar para abrir a interface gráfica. O comando está seguido de Exec=

# Para o KDE Plasmacat plasma.desktop | grep "Exec=" # Para o LXDEcat LXDE.desktop | grep "Exec="

Anote o comando:

# Para o LXDE/usr/bin/startlxde# Para o XFCE/usr/bin/startxfce4# Para o KDE/usr/bin/startkde

Crie um arquivo o seguinte conteúdo:

# O arquivo é: ~/.vnc/xstartup# Comando exemplo para o LXDEecho "#!/bin/shunset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESSexec /usr/bin/startlxde" > ~/.vnc/xstartup# Comando exemplo para o XFCE4echo "#!/bin/shunset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESSexec startxfce4" > ~/.vnc/xstartup

Verificando se o VNC iniciou:

# Verificando onde o VNC está escutando e em quais portas ele estásudo lsof -i -P -n | grep LISTEN# Verificando se o TigerVNC está sendo executadohtop# Filtre com F4 e digite tigervnc

Inicie o TigerVNC Server

vncserver# Opções# Escolher a porta do vncserver# -rfbport 5905#vncserver −rfbport 5905

Cada vez que o comando for executado, ele criará uma sessão de VNC na porta 5901, 5902, 5903... Cada sessão terá uma porta.

Criando um serviço para o VNC.

# tigervnc.service[Unit]Description=TigerVNC Remote desktop service (VNC)After=syslog.target network.target[Service]User=tiagoType=simple# PAMName=login# PIDFile=/home/%u/.vnc/%H%i.pid# ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'ExecStart=/usr/bin/vncserver -depth 24 -rfbwait 30000 -rfbauth /home/tiago/.vnc/passwd -rfbport 5901 -SecurityTypes VncAuth -localhost no# ExecStart=/usr/bin/vncserver %i -geometry 1440x900 -alwaysshared -fg# ExecStop=/usr/bin/vncserver -kill %iExecStop=/usr/bin/vncserver -kill :1[Install]WantedBy=multi-user.target

Referências

TigerVNC - Website oficial
https://tigervnc.org/

TigerVNC - Documentação oficial
https://tigervnc.org/doc/vncserver.html

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

TigerVNC - Documentação Arch Linux
https://wiki.archlinux.org/index.php/TigerVNC

TigerVNC - Step by Step
https://www.golinuxcloud.com/step-by-step-guide-to-configure-tigervnc/

TigerVNC - Instalando
https://www.addictivetips.com/ubuntu-linux-tips/set-up-vnc-desktop-sharing-on-linux-with-tigervnc/

TigerVNC - Binários
https://bintray.com/tigervnc/stable/tigervnc/1.10.0

TigerVNC - Desktops Suportados
https://getsol.us/articles/software/tigervnc/en/

TigerVNC - Tutorial
https://www.golinuxcloud.com/step-by-step-guide-to-configure-tigervnc/

TightVNC

Gratuito para uso pessoal e comercial.

Referências

TightVNC - Instalando e Usando - DigitalOcean
https://www.digitalocean.com/community/tutorials/como-instalar-e-configurar-o-vnc-no-ubuntu-16-04-pt

TightVNC - Website oficial
https://www.tightvnc.com/

Instalando TightVNC com LXDE
https://timmystuts.wordpress.com/2018/08/27/installing-a-lightweight-lxdevnc-desktop-environment-on-your-debian-vps/

RealVNC (VNC Connect)

Gratuito para uso pessoal, pago para uso comercial.
Vem instalado por padrão no RaspberryPi

Referências

Manual do RealVNC
https://linux.die.net/man/1/vncserver

RealVNC - Website oficial
https://www.realvnc.com/

RealVNC - Artigo sobre Raspberry Pi
https://help.realvnc.com/hc/en-us/articles/360002249917-VNC-Connect-and-Raspberry-Pi#setting-up-your-raspberry-pi-0-0

No Machine (NX)

Gratuito para uso pessoal, pago para uso comercial. Ótima velocidade e performance.

A versão gratuita só funciona se alguém tiver aberto uma sessão desktop (feito login).

Fazendo acesso remoto pelo navegador

Se você deseja fazer acesso remoto pelo browser, aqui vai três opções:

  • TeamViewer
  • Chrome Remote Desktop
  • noVNC + qualquer servidor VNC

Referências

NoVNC
https://novnc.com/info.html
https://github.com/novnc/noVNC

Windows Remote Desktop (Área de Trabalho Remota) (RDP)

É um software que já vem instalando em todos os Windows, tanto o servidor quanto o cliente.

Você utiliza o login e a senha de usuário para se conectar ao computador. Quando isso acontece, se o usuário no computador físico estiver logado, ele é desconectado imediatamente e a tela de log-in aparecerá para ele.

Cliente Remote Desktop

É o software que te permite controlar outros computadores.

Windows

Já vem instalado em todos os Windows. Seu arquivo é o

  • mstsc.exe

Linux

  • FreeRDP
  • Remmina

Android

  • Microsoft Remote Desktop na AppStore

Servidor Remote Desktop

Windows

Painel de Controle -> Sistema -> Configurações Avançadas do Sistema -> Remoto -> Área de Trabalho Remota

Linux

[code]sudo apt install xrdpsudo systemctl enable xrdp[/code]

Posso usar o Windows Remote Desktop pela internet?

Pode, mas ele não tem criptografia pois foi feito para funcionar via LAN! Então recomenda usar um túnel seguro para a conexão (SSH tunnel ou VPN).

Quick Assist/Windows Remote Assistant (Assistência Remota do Windows)

msra.exe

Chrome Remote Desktop (VNC)

É uma extensão do Google Chrome. É preciso ter uma conta do Google para funcionar.

Você pode baixar o Chrome Remote Desktop aqui

Posso usar o Chrome Remote Desktop pela internet?

Sim, é pra isso que ele foi feito!

É Open Source?

Sim! Acesso ao código:
https://src.chromium.org/viewvc/chrome/trunk/src/remoting/

Como instalar o Chrome Desktop no Linux (Debian e CentOS)?

https://cloud.google.com/solutions/chrome-desktop-remote-on-compute-engine

TigerVNC (VNC)

É um VNC mantido pela RedHat, fork do TightVNC (projeto que parou de ser mantido pelos autores).

Pode ser usado tanto para Linux como para Windows.

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/chap-tigervnc

Posso usar o TigerVNC pela internet?

Não é recomendado, a conexão inicial é criptografada, mas assim que uma conexão é estabelecida não há mais criptografia. É recomendado fazer isso através de um túnel (SSH, VPN)

Referências

Microsoft Quick Assist
https://en.wikipedia.org/wiki/Quick_Assist

Tutorial Chrome Remote Desktop
https://computers.tutsplus.com/tutorials/use-chrome-remote-desktop-to-access-your-computer-anywhere--cms-21227

Lista com softwares de acesso remoto
https://www.lifewire.com/free-remote-access-software-tools-2625161

Habilitado Remote Desktop no Windows Home e habilitando múltiplos usuários nas versões não server
https://www.raymond.cc/blog/enable-remote-desktop-connection-in-windows-7-home-premium/

Dicas importantes ao fazer acesso remoto no Linux

Impedindo o computador de entrar em suspensão ao fechar a tela do notebook
http://tipsonubuntu.com/2018/04/28/change-lid-close-action-ubuntu-18-04-lts/

Caso alguns aplicativos amarrados com o Desktop Manager comecem a dar erro, você pode desligá-los em:
Settings -> Session and Startup -> Application Autostart

X11 Windows System e o XDMCP

O Linux possui algo chamado X11 Windows System. Ele é o software que gerencia as interfaces gráficas. E o mais interessante é que ele funciona pela rede.
https://www.codingdomain.com/linux/remote/x11/

Todos os softwares que usam interface gráfica no Linux são "clientes x11" que conversam com um "servidor x11". O servidor x11 é quem escreve na tela física do computador o que o cliente x11 pedir para ser escrito.

Um Linux com interface gráfica desktop está sempre rodando um servidor x11. Quando um programa de interface gráfica desktop abre, ele (com seu cliente x11) envia um pedido ao servidor x11 para criar uma nova tela.

E se você tiver um servidor x11 no Windows? Você consegue abrir programas de interface gráfica do Linux (que estão rodando em um linux, claro)!

X11 no Windows

Xming X Server para Windows (versão antiga do SourceFourge gratuito)
https://sourceforge.net/projects/xming/

Xming X Server para Windows (Pago)
http://www.straightrunning.com/XmingNotes/

XCygwin
https://x.cygwin.com/

VcXSrv
https://github.com/ArcticaProject/vcxsrv

MobaXTermo (pago)
https://mobaxterm.mobatek.net/download.html

OpenText (pago)
https://www.opentext.com/products-and-solutions/products/specialty-technologies/connectivity/exceed/?utm_source=connectivity&utm_medium=redirect

Usando X11 em um Docker

Esse artigo mostra como abrir um Firefox no Windows, mas que está rodando dentro de um Docker Linux sem ambiente de interface gráfica instalado.
https://dev.to/darksmile92/run-gui-app-in-linux-docker-container-on-windows-host-4kde

Usando VNC e WebVNC em um Docker

Há uma imagem do Ubuntu com VNC incluso

https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc

Referências

X2GO

Documentação X2GO
https://wiki.x2go.org/doku.php/start

Comparações entre protocolos

XPRA vs X2GO
https://hasanyavuz.ozderya.net/?p=503

Listas de softwares de acesso remoto

https://www.tecmint.com/best-remote-linux-desktop-sharing-software/

https://www.ubuntupit.com/10-fast-and-secure-remote-desktop-client-software-for-linux/

Instalando TightVNC no Ubuntu 18
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-18-04

Como ter multiplas conexões e simultâneas?
https://askubuntu.com/questions/581979/ubuntu-14-10-multiple-simultaneous-independent-remote-desktop-like-connection

Diferentes VNC Servers no Ubuntu
https://help.ubuntu.com/community/VNC/Servers

Usando TigerVNC Arch Linux
https://wiki.archlinux.org/index.php/TigerVNC

Habilitando Múltiplos Usuários em um servidor VNC sem utilizar várias instâncias de VNC Servers
https://developer.ibm.com/tutorials/os-multiuserloginsvnc/

Mudando a resolução do VNC
https://superuser.com/questions/184338/how-to-change-screen-resolution-of-vnc-server-without-restarting-it

You should also read: