Como Instalar e Configurar o VNC no Ubuntu 22.04

Introdução

Computação Virtual em Rede, 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 a gestão 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ê irá 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ê utilizará 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 completar este tutorial, você precisará de:

Passo 1 — Instalando o Ambiente de Área de Trabalho e o 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 muitas opções quando se trata de qual servidor VNC e ambiente de área de trabalho você escolhe. 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 o 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 nessas sessões do Xfce, você já estará logado como seu usuário não-root do Ubuntu. 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 completa, instale o servidor TightVNC:

  1. sudo apt install tightvncserver

Em seguida, execute o comando vncserver para definir uma senha de acesso ao 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. Senhas com mais de 8 caracteres serão truncadas automaticamente.

Depois de verificar a senha, você terá a opção de criar uma senha somente para visualização. Usuários que fizerem login com a senha somente para visualização não poderão controlar a instância do VNC com o mouse ou teclado. Esta é uma opção útil se você quiser demonstrar algo para outras pessoas usando seu servidor VNC, mas isso 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 múltiplas instâncias em outras portas de exibição, com :2 referindo-se à porta 5902, :3 referindo-se a 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 fazer isso 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 dar acesso ao servidor através 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 qual ambiente de desktop gráfico ele 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 home. 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 ambiente de desktop Xfce.

Porque você vai estar alterando como o servidor VNC está configurado, 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á semelhante a esta, 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 informa ao sistema qual interpretador passar para aquele arquivo para execução. 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 do desktop gráfico, como cores do terminal, temas do 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 corretamente este novo arquivo de inicialização, 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 loopback do seu servidor. Isso fará com que o VNC permita apenas conexões que se originem 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 em 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 sã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 conectar. Para se conectar de forma segura ao seu servidor, você estabelecerá um túnel SSH e depois 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 a porta 5901 no servidor de destino, definido como seu_endereço_ip_do_servidor). Observe que a porta local que você especifica é um tanto arbitrária; desde que a porta não esteja 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 informa ao ssh que você não deseja executar nenhum comando remoto. Essa configuração é útil quando você apenas deseja encaminhar portas.
  • -l sammy seu_endereço_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_endereço_ip_do_servidor pelo nome do seu usuário não root e pelo endereço IP do seu servidor.

Nota: Este comando estabelece um túnel SSH que encaminha informações da porta 5901 no seu servidor VNC para a porta 59000 no seu computador local via porta 22 em cada máquina, a porta padrão para SSH. Supondo que você seguiu o guia pré-requisito Configuração Inicial do Servidor para o Ubuntu 22.04, você terá adicionado uma regra UFW para permitir conexões com o 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 conectar-se através de um túnel SSH, você está limitando o acesso VNC às máquinas que já têm acesso SSH ao servidor.

Se estiver usando o PuTTY para se conectar ao seu servidor, você pode criar um túnel SSH clicando com o botão direito na barra superior da janela do terminal e, em seguida, clicando na opção Alterar Configurações…:

Encontre o ramo Conexão no menu de árvore do lado esquerdo da janela de Reconfiguração do PuTTY. Expanda o ramo SSH e clique em Túneis. Na tela Opções de controle de encaminhamento de porta SSH, insira 59000 como a Porta de Origem e localhost:5901 como o Destino, assim:

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

Uma vez que o túnel esteja em execução, use um cliente VNC para se conectar a localhost:59000. Você será solicitado a autenticar usando a senha definida 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 pela linha de comando, como visto aqui:

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

Agora você pode configurar seu servidor VNC para ser executado 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 iniciar, parar 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 servidor for inicializado.

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 permitirá passar um argumento que você pode usar na configuração do serviço. Você usará isso para especificar a porta de exibição do 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 interrompe o VNC se 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 tomar conhecimento do novo arquivo de unidade:

  1. sudo systemctl daemon-reload

Habilite o arquivo de unidade:

  1. sudo systemctl enable [email protected]

O 1 seguinte ao sinal @ indica em qual número de exibição o serviço deve aparecer, neste caso o padrão :1 conforme discutido no Passo 2.

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

  1. vncserver -kill :1

Em seguida, inicie-o como você iniciaria qualquer outro serviço systemd:

  1. sudo systemctl start vncserver@1

Você pode verificar se ele foi iniciado com este comando:

  1. sudo systemctl status vncserver@1

Se for iniciado corretamente, a saída deve se 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 seu servidor inicializar, e você pode gerenciá-lo com comandos systemctl como qualquer outro serviço systemd.

No entanto, não haverá nenhuma diferença no lado do cliente. Para 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 o seu software cliente VNC para localhost:59000 para se conectar ao seu servidor.

Conclusão

Agora você tem um servidor VNC seguro funcionando 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