Como instalar e configurar o VNC no Ubuntu 22.04

Introdução

Virtual Network Computing, ou VNC, é um sistema de conexão que permite que você use seu teclado e mouse para interagir com um ambiente de desktop gráfico em um servidor remoto. Isso facilita o gerenciamento de arquivos, software e configurações em um servidor remoto para usuários que ainda não estão confortáveis com a linha de comando.

Neste guia, você configurará um servidor VNC com o TightVNC em um servidor Ubuntu 22.04 e se conectará a ele de forma segura através de um túnel SSH. Em seguida, você usará um programa cliente VNC em sua máquina local para interagir com seu servidor através de um ambiente de desktop gráfico.

Pré-requisitos

Para concluir este tutorial, você precisará:

Passo 1 — Instalando o Ambiente de Área de Trabalho e Servidor VNC

Por padrão, um servidor Ubuntu 22.04 não vem com um ambiente de área de trabalho gráfica ou um servidor VNC instalado, então você começará instalando esses.

Você tem várias opções quando se trata de escolher qual servidor VNC e ambiente de área de trabalho usar. Neste tutorial, você instalará pacotes para o ambiente de área de trabalho Xfce mais recente e o pacote TightVNC disponível no repositório oficial do Ubuntu. Tanto Xfce quanto TightVNC são conhecidos por serem leves e rápidos, o que ajudará a garantir que a conexão VNC seja suave e estável mesmo em conexões de internet mais lentas.

Após conectar-se ao seu servidor com SSH, atualize sua lista de pacotes:

  1. sudo apt update

Agora, instale Xfce junto com o pacote xfce4-goodies, que contém algumas melhorias para o ambiente de área de trabalho:

  1. sudo apt install xfce4 xfce4-goodies

Durante a instalação, você pode ser solicitado a escolher um gerenciador de exibição padrão para o Xfce. Um gerenciador de exibição é um programa que permite selecionar e fazer login em um ambiente de desktop por meio de uma interface gráfica. Você só estará usando o Xfce quando se conectar com um cliente VNC, e nestas sessões do Xfce, você já estará logado como seu usuário Ubuntu não-root. Portanto, para os propósitos deste tutorial, a escolha do gerenciador de exibição não é relevante. Selecione qualquer um e pressione ENTER.

Assim que a instalação estiver concluída, instale o servidor TightVNC:

  1. sudo apt install tightvncserver

Em seguida, execute o comando vncserver para definir uma senha de acesso VNC, criar os arquivos de configuração iniciais e iniciar uma instância do servidor VNC:

  1. vncserver

Você será solicitado a inserir e verificar uma senha para acessar sua máquina remotamente:

Output
You will require a password to access your desktops. Password: Verify:

A senha deve ter entre seis e oito caracteres de comprimento. Senhas com mais de 8 caracteres serão truncadas automaticamente.

Após verificar a senha, você terá a opção de criar uma senha somente de visualização. Os usuários que fizerem login com a senha somente de visualização não poderão controlar a instância do VNC com seu mouse ou teclado. Esta é uma opção útil se você quiser demonstrar algo para outras pessoas usando seu servidor VNC, mas não é obrigatório.

O processo então cria os arquivos de configuração padrão necessários e as informações de conexão para o servidor. Além disso, ele inicia uma instância padrão do servidor na porta 5901. Esta porta é chamada de porta de exibição, e é referida pelo VNC como :1. O VNC pode iniciar várias instâncias em outras portas de exibição, com :2 referindo-se à porta 5902, :3 referindo-se ao 5903, e assim por diante:

Output
Would you like to enter a view-only password (y/n)? n xauth: file /home/sammy/.Xauthority does not exist New 'X' desktop is your_hostname:1 Creating default startup script /home/sammy/.vnc/xstartup Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

Observe que se você quiser alterar sua senha ou adicionar uma senha somente para visualização, pode fazê-lo com o comando vncpasswd:

  1. vncpasswd

Neste ponto, o servidor VNC está instalado e em execução. Agora você irá configurá-lo para iniciar o Xfce e nos fornecer acesso ao servidor por meio de uma interface gráfica.

Passo 2 — Configurando o Servidor VNC

O servidor VNC precisa saber quais comandos executar ao iniciar. Especificamente, o VNC precisa saber a qual ambiente de desktop gráfico deve se conectar.

Os comandos que o servidor VNC executa na inicialização estão localizados em um arquivo de configuração chamado xstartup na pasta .vnc dentro do seu diretório pessoal. O script de inicialização foi criado quando você executou o comando vncserver no passo anterior, mas você criará o seu próprio para iniciar o desktop Xfce.

Como você vai alterar a configuração do servidor VNC, primeiro pare a instância do servidor VNC que está em execução na porta 5901 com o seguinte comando:

  1. vncserver -kill :1

A saída será parecida com isso, embora você veja um PID diferente:

Output
Killing Xtightvnc process ID 17648

Antes de modificar o arquivo xstartup, faça backup do original:

  1. mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Agora crie um novo arquivo xstartup e abra-o em um editor de texto, como nano:

  1. nano ~/.vnc/xstartup

Em seguida, adicione as seguintes linhas ao arquivo:

~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

A primeira linha é um shebang. Em arquivos de texto executáveis em plataformas *nix, um shebang diz ao sistema qual interpretador passar para a execução desse arquivo. Neste caso, você está passando o arquivo para o interpretador Bash. Isso permitirá que cada linha sucessiva seja executada como comandos, na ordem.

O primeiro comando no arquivo, xrdb $HOME/.Xresources, diz ao framework GUI do VNC para ler o arquivo .Xresources do usuário do servidor. .Xresources é onde um usuário pode fazer alterações em determinadas configurações da área de trabalho gráfica, como cores do terminal, temas de cursor e renderização de fontes. O segundo comando diz ao servidor para iniciar o Xfce. Sempre que você iniciar ou reiniciar o servidor VNC, esses comandos serão executados automaticamente.

Salve e feche o arquivo após adicionar essas linhas. Se você usou o nano, faça isso pressionando CTRL + X, Y, depois ENTER.

Para garantir que o servidor VNC possa usar este novo arquivo de inicialização adequadamente, você precisará torná-lo executável:

  1. chmod +x ~/.vnc/xstartup

Então reinicie o servidor VNC:

  1. vncserver -localhost

Observe que desta vez o comando inclui a opção -localhost, que vincula o servidor VNC à interface de loopback do seu servidor. Isso fará com que o VNC permita apenas conexões originadas do servidor em que está instalado.

Na próxima etapa, você estabelecerá um túnel SSH entre sua máquina local e seu servidor, essencialmente enganando o VNC para pensar que a conexão da sua máquina local se originou no seu servidor. Essa estratégia adicionará uma camada extra de segurança ao redor do VNC, pois os únicos usuários que poderão acessá-lo serão aqueles que já têm acesso SSH ao seu servidor.

Você verá uma saída semelhante a esta:

Output
New 'X' desktop is your_hostname:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

Com a configuração em vigor, você está pronto para se conectar ao servidor VNC a partir da sua máquina local.

Passo 3 — Conectando-se ao Desktop VNC de forma segura

O próprio VNC não utiliza protocolos seguros ao se conectar. Para se conectar de forma segura ao seu servidor, você estabelecerá um túnel SSH e então dirá ao seu cliente VNC para se conectar usando esse túnel em vez de fazer uma conexão direta.

Crie uma conexão SSH em seu computador local que encaminhe de forma segura para a conexão localhost para o VNC. Você pode fazer isso via terminal no Linux ou macOS com o seguinte comando ssh:

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Aqui está o que significam as opções deste comando ssh:

  • -L 59000:localhost:5901: O switch -L especifica que a porta fornecida no computador local (59000) deve ser encaminhada para o host e porta fornecidos no servidor de destino (localhost:5901, significando porta 5901 no servidor de destino, definido como seu_ip_do_servidor). Note que a porta local especificada é um tanto arbitrária; enquanto a porta não estiver vinculada a outro serviço, você pode usá-la como a porta de encaminhamento para o seu túnel.
  • -C: Esta bandeira habilita a compressão, o que pode ajudar a minimizar o consumo de recursos e acelerar as coisas.
  • -N: Esta opção indica ao ssh que você não deseja executar nenhum comando remoto. Essa configuração é útil quando você apenas deseja encaminhar portas.
  • -l sammy seu_ip_do_servidor: O switch -l permite que você especifique o usuário com o qual deseja fazer login assim que se conectar ao servidor. Certifique-se de substituir sammy e seu_ip_do_servidor pelo nome do seu usuário não root e pelo endereço IP do seu servidor.

Observação: Este comando estabelece um túnel SSH que encaminha informações da porta 5901 no seu servidor VNC para a porta 59000 na sua máquina local via porta 22 em cada máquina, a porta padrão para SSH. Supondo que você seguiu o pré-requisito Guia de Configuração Inicial do Servidor para Ubuntu 22.04, você terá adicionado uma regra UFW para permitir conexões com seu servidor via OpenSSH.

Isso é mais seguro do que simplesmente abrir o firewall do seu servidor para permitir conexões na porta 5901, pois isso permitiria que qualquer pessoa acessasse seu servidor via VNC. Ao se conectar por meio de um túnel SSH, você está limitando o acesso do VNC a máquinas que já têm acesso SSH ao servidor.

Se você estiver usando o PuTTY para se conectar ao seu servidor, você pode criar um túnel SSH clicando com o botão direito do mouse na barra superior da janela do terminal e depois clicando na opção Change Settings…:

Encontre o ramo Connection no menu de árvore do lado esquerdo da janela de Reconfiguração do PuTTY. Expanda o ramo SSH e clique em Tunnels. Na tela Options controlling SSH port forwarding, insira 59000 como a Source Port e localhost:5901 como o Destination, como mostrado:

Em seguida, clique no botão Add e depois no botão Apply para implementar o túnel.

Uma vez que o túnel estiver em execução, use um cliente VNC para se conectar a localhost:59000. Você será solicitado a autenticar usando a senha que você definiu no Passo 1.

Depois de conectado, você verá a área de trabalho padrão do Xfce. Deverá parecer algo assim:

Você pode acessar arquivos no seu diretório pessoal com o gerenciador de arquivos ou da linha de comando, como visto aqui:

Pressione CTRL+C no seu terminal local para parar o túnel SSH e retornar ao seu prompt. Isso também desconectará sua sessão VNC.

Agora você pode configurar o seu servidor VNC para rodar como um serviço systemd.

Passo 4 — Executando o VNC como um Serviço do Sistema

Ao configurar o servidor VNC para ser executado como um serviço systemd, você pode iniciá-lo, pará-lo e reiniciá-lo conforme necessário, como qualquer outro serviço. Você também pode usar os comandos de gerenciamento do systemd para garantir que o VNC seja iniciado quando o seu servidor inicializar.

Primeiro, crie um novo arquivo de unidade chamado /etc/systemd/system/[email protected]:

  1. sudo nano /etc/systemd/system/[email protected]

O símbolo @ no final do nome nos permite passar um argumento que você pode usar na configuração do serviço. Você usará isso para especificar a porta de exibição VNC que deseja usar ao gerenciar o serviço.

Adicione as seguintes linhas ao arquivo. Certifique-se de alterar o valor de User, Group, WorkingDirectory e o nome de usuário no valor de PIDFILE para corresponder ao seu nome de usuário:

/etc/systemd/system/[email protected]
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

O comando ExecStartPre para o VNC se ele já estiver em execução. O comando ExecStart inicia o VNC e define a profundidade de cor para 24 bits com uma resolução de 1280×800. Você também pode modificar essas opções de inicialização conforme necessário. Além disso, observe que o comando ExecStart inclui novamente a opção -localhost.

Salve e feche o arquivo.

Em seguida, faça o sistema reconhecer o novo arquivo de unidade:

  1. sudo systemctl daemon-reload

Habilite o arquivo de unidade:

  1. sudo systemctl enable [email protected]

O 1 que segue o sinal @ indica em qual número de display o serviço deve aparecer, neste caso o padrão :1 como foi discutido no Passo 2.

Pare a instância atual do servidor VNC se ainda estiver em execução:

  1. vncserver -kill :1

Em seguida, inicie-o como faria com qualquer outro serviço systemd:

  1. sudo systemctl start vncserver@1

Você pode verificar se ele iniciou com este comando:

  1. sudo systemctl status vncserver@1

Se ele iniciar corretamente, a saída deve parecer com isso:

Output
[email protected] - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS) Main PID: 97103 (Xtightvnc) Tasks: 77 (limit: 4665) Memory: 146.7M CPU: 4.459s CGroup: /system.slice/system-vncserver.slice/[email protected] . . .

Seu servidor VNC está agora pronto para uso sempre que o servidor for iniciado, e você pode gerenciá-lo com comandos systemctl como qualquer outro serviço systemd.

No entanto, não haverá diferença do lado do cliente. Para se reconectar, inicie seu túnel SSH novamente:

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Em seguida, faça uma nova conexão usando seu software cliente VNC para localhost:59000 para se conectar ao seu servidor.

Conclusão

Agora você tem um servidor VNC seguro em funcionamento em seu servidor Ubuntu 22.04. Agora você poderá gerenciar seus arquivos, software e configurações com uma interface gráfica amigável, e poderá executar software gráfico como navegadores da web remotamente.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04