Em Analisamos a inicialização do servidor VNC em uma máquina virtual de qualquer tipo. Essa opção tem muitas desvantagens, sendo a principal a alta demanda por largura de banda da rede. Hoje, vamos tentar nos conectar à área de trabalho gráfica no Linux via RDP (Remote Desktop Protocol). O sistema VNC se baseia na transmissão de matrizes de pixels através do protocolo RFB (Remote Framebuffer), enquanto o RDP permite o envio de primitivos gráficos mais complexos e comandos de alto nível. Geralmente, é usado para organizar serviços de áreas de trabalho remotas em Windows, mas servidores para Linux também estão disponíveis.
Conteúdo:
Instalação do ambiente gráfico
Vamos utilizar uma máquina virtual com Ubuntu Server 18.04 LTS com dois núcleos de CPU, quatro gigabytes de RAM e um disco rígido (HDD) de vinte gigabytes. Uma configuração mais fraca não é ideal para uma área de trabalho gráfica, embora isso dependa das tarefas a serem realizadas. Não se esqueça de usar o código promocional Habrahabr10 para obter um desconto de 10% ao fazer o pedido.

A instalação do ambiente de desktop com todas as dependências é realizada com o seguinte comando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsComo no caso anterior, escolhemos o XFCE devido aos requisitos relativamente baixos de recursos computacionais.
Localização do servidor e instalação de software
Frequentemente, as máquinas virtuais são implantadas apenas com a localização em inglês. A área de trabalho pode exigir o russo, que é fácil de configurar. Primeiro, vamos instalar as traduções para os programas do sistema:
sudo apt-get install language-pack-ruVamos configurar a localização:
sudo update-locale LANG=ru_RU.UTF-8O mesmo efeito pode ser alcançado editando manualmente o arquivo /etc/default/locale.
Para localizar o GNOME e KDE, há pacotes language-pack-gnome-ru e language-pack-kde-ru nos repositórios — eles serão necessários se você usar programas desses ambientes de desktop. No XFCE, as traduções são instaladas junto com os aplicativos. A seguir, você pode instalar dicionários:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictAlém disso, a instalação de traduções pode ser necessária para alguns aplicativos:
# Браузер Firefox
sudo apt-get install firefox firefox-locale-ru
# Почтовый клиент Thunderbird
sudo apt-get install thunderbird thunderbird-locale-ru
# Офисный пакет LibreOffice
sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ruCom isso, a preparação do ambiente de desktop está completa, faltando apenas configurar o servidor RDP.
Instalação e configuração do servidor RDP
Nos repositórios do Ubuntu, existe o servidor Xrdp disponível gratuitamente, que usaremos:
sudo apt-get install xrdpSe tudo correr bem, o servidor deve iniciar automaticamente:
sudo systemctl status xrdp 
O servidor Xrdp é iniciado com permissões do usuário xrdp e, por padrão, utiliza o certificado /etc/ssl/private/ssl-cert-snakeoil.key, que pode ser substituído pelo seu próprio. Para o acesso de leitura do arquivo, você precisa adicionar o usuário ao grupo ssl-cert:
sudo adduser xrdp ssl-certAs configurações padrão podem ser encontradas no arquivo /etc/default/xrdp, e todos os outros arquivos de configuração do servidor estão no diretório /etc/xrdp. Os principais parâmetros estão no arquivo xrdp.ini, que pode não precisar ser alterado. A configuração é bem documentada, além de incluir as manpages correspondentes:
man xrdp.ini
man xrdpResta apenas editar o script /etc/xrdp/startwm.sh, que é executado na inicialização da sessão do usuário. Primeiro, faremos uma cópia de segurança do script do pacote:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shPara iniciar o ambiente de desktop XFCE, será necessário um script com um conteúdo mais ou menos assim:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Observe que, nos scripts, é melhor especificar o caminho completo para os arquivos executáveis — isso é um bom hábito. Tornaremos o script executável e com isso a configuração do servidor Xrdp estará concluída:
sudo chmod 755 /etc/xrdp/startwm.shReiniciamos o servidor:
sudo systemctl restart xrdp
Configuração do firewall
Por padrão, o Xrdp escuta a porta TCP 3389 em todas as interfaces. Dependendo da configuração do servidor virtual, pode ser necessário configurar o firewall Netfilter. No Linux, isso geralmente é feito com a ferramenta iptables, mas no Ubuntu é melhor usar o ufw. Se o endereço IP do cliente for conhecido, a configuração é feita com o seguinte comando:
sudo ufw allow from IP_Address to any port 3389Para permitir conexões de qualquer IP, pode-se fazer assim:
sudo ufw allow 3389O protocolo RDP suporta criptografia, mas abrir o acesso ao servidor Xrdp a partir de redes públicas não é uma boa ideia. Se o cliente não tiver um IP fixo, para aumentar a segurança, o servidor deve escutar apenas o localhost. O acesso deve ser configurado através de um túnel SSH, que redirecionará o tráfego do computador cliente de forma segura. Abordagem semelhante que para o servidor VNC.
Conexão ao servidor RDP
Para trabalhar com o ambiente de desktop, é melhor criar um usuário separado não privilegiado:
sudo adduser rdpuser 
Vamos adicionar o usuário ao grupo sudo para que ele possa resolver questões relacionadas à administração. Se essa necessidade não existir, este passo pode ser pulado:
sudo gpasswd -a rdpuser sudoVocê pode se conectar ao servidor usando qualquer cliente RDP, incluindo o cliente embutido nos serviços de área de trabalho remota do Windows. Se o Xrdp escutar a interface externa, não será necessário nenhum passo adicional. Basta inserir o endereço IP do VPS, nome de usuário e senha nas configurações de conexão. Após a conexão, devemos ver algo assim:

Após a configuração inicial do ambiente de desktop, obteremos um desktop completo. Como você pode ver, ele consome não muitos recursos, embora tudo a seguir dependa dos aplicativos utilizados.

Se o servidor Xrdp está escutando apenas em localhost, o tráfego no computador cliente precisará ser encapsulado em um túnel SSH (o sshd deve estar em execução no VPS). No Windows, é possível usar um cliente gráfico SSH (como o PuTTY), enquanto em sistemas UNIX é necessário utilizar o utilitário ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipApós a inicialização do túnel, o cliente RDP não irá se conectar mais ao servidor remoto, mas sim ao host local.
Com dispositivos móveis, a situação é mais complicada: será necessário adquirir clientes SSH que consigam configurar um túnel, além disso, no iOS e iPadOS, o funcionamento em segundo plano de aplicativos de terceiros é dificultado por uma otimização de consumo de energia bastante eficaz. Em iPhones e iPads, não será possível criar um túnel em um aplicativo separado — será necessário um aplicativo combinado que consiga estabilizar a conexão RDP através do SSH, como, por exemplo, o .
Gerente de sessões e sessões de usuários
A capacidade de trabalho multusuário está diretamente implementada no servidor Xrdp e não requer configurações adicionais. Após iniciar o serviço via systemd, um processo opera no modo daemon, escutando a porta 3389 e interagindo através do localhost com o gerenciador de sessões.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
O gerenciador de sessões geralmente não é visível para os usuários, pois o login e a senha definidos nas configurações do cliente são transmitidos a ele automaticamente. Se isso não ocorrer ou se ocorrer um erro durante a autenticação, em vez da área de trabalho aparecerá uma janela interativa para o login no sistema.

O início automático do gerenciador de sessões está especificado no arquivo /etc/default/xrdp, e a configuração é armazenada em /etc/xrdp/sesman.ini. Por padrão, ela se parece mais ou menos com isto:
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; Quando AlwaysGroupCheck=false, o acesso será permitido
; se o grupo TerminalServerUsers não estiver definido.
AlwaysGroupCheck=false
[Sessions]Aqui, não é necessário alterar nada, exceto proibir logins com permissões de root (AllowRootLogin=false). Para cada usuário autenticado no sistema, um processo xrdp separado é iniciado: se a conexão for encerrada sem finalizar a sessão, os processos do usuário continuarão funcionando por padrão, e a sessão poderá ser reconectada. As configurações podem ser alteradas no arquivo /etc/xrdp/sesman.ini (seção [Sessions]).
Mudança de layouts de teclado
Com o clipboard bidirecional, normalmente não há problemas, mas você terá que fazer alguns ajustes com o layout do teclado russo (a localidade russa deve já estar ). Vamos editar as configurações do teclado do servidor Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniNo final do arquivo de configuração, adicione as seguintes linhas:
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ruAgora, basta salvar o arquivo e reiniciar o Xrdp:
sudo systemctl restart xrdpComo você pode ver, levantar um servidor RDP em um VPS Linux não é difícil, e em já analisamos a configuração do VNC. Além dessas tecnologias, há uma outra opção interessante: o sistema X2Go, que utiliza um protocolo NX 3 modificado. Vamos explorar isso na próxima publicação.
Fonte: habr.com
