Ativando o Modo de Sessão Aprimorada para convidados Arch Linux no Hyper-V

Ativando o Modo de Sessão Aprimorada para convidados Arch Linux no Hyper-V

O uso de máquinas virtuais com Linux no Hyper-V, por padrão, é um pouco menos confortável do que com máquinas Windows hóspedes. Isso se deve ao fato de que o Hyper-V não foi originalmente projetado para uso em desktop; não se pode simplesmente instalar o pacote de adições para convidados e obter aceleração gráfica funcional, área de transferência, diretórios compartilhados e outras conveniências, como acontece no VirtualBox.

O Hyper-V fornece vários serviços de integração — assim, os hóspedes podem usar o serviço de cópia sombra (VSS) do host, sinais de desligamento podem ser enviados aos hóspedes, os hóspedes podem sincronizar a hora do sistema com o host de virtualização, e é possível trocar arquivos entre o host e a máquina virtual (Copy-VMFile no PowerShell). Para alguns sistemas operacionais hóspedes, entre os quais, é claro, está o Windows, o aplicativo Virtual Machine Connection (vmconnect.exe) oferece o Modo de Sessão Aprimorado, que funciona no protocolo RDP e permite redirecionar dispositivos de disco e impressoras para a máquina virtual, além de usar uma área de transferência compartilhada.

O Modo de Sessão Aprimorado funciona por padrão no Windows no Hyper-V imediatamente após a instalação. Com hóspedes Linux, é necessário instalar um servidor RDP que suporte vsock (um espaço de endereçamento de rede virtual especial no Linux destinado à comunicação com o hipervisor). Para o Ubuntu, no aplicativo VMCreate que vem com o Hyper-V nas edições de desktop do Windows, existe um modelo de máquina virtual especialmente preparado, no qual o servidor RDP funcionando com vsock XRDP já está pré-instalado, mas com outras distribuições, a situação é menos clara — assim, o autor deste post conseguiu habilitar o ESM no Fedora. Aqui, ativamos o Modo de Sessão Aprimorado para a máquina virtual com Arch Linux.

Instalação dos serviços de integração

Aqui é tudo mais ou menos simples, precisamos apenas instalar o pacote hyperv do repositório community:

% sudo pacman -S hyperv

Ativaremos os serviços de VSS, troca de metadados e arquivos:

% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; done

Instalação do XRDP

Repositório linux-vm-tools no GitHub fornece scripts que automatizam o processo de instalação e configuração do XRDP, para Arch Linux e Ubuntu. Vamos instalar o Git, se ainda não estiver instalado, junto com o compilador e outros softwares para compilações manuais, e em seguida clonar o repositório:

% sudo pacman -S git base-devel
% git clone https://github.com/microsoft/linux-vm-tools.git
% cd linux-vm-tools/arch

No momento da redação deste artigo, a versão mais recente do XRDP, que é instalada pelo script makepkg.sh, proposta no repositório, é a 0.9.11, na qual a análise vsock://-endereço está quebrada, então será necessário instalar o XRDP do Git e o driver Xorg manualmente a partir do AUR. O patch para o XRDP, oferecido no AUR, também está um pouco desatualizado, então será necessário editar o PKGBUILD e o patch manualmente.

Vamos clonar os repositórios com os PKGBUILD do AUR (geralmente esse procedimento, junto com a compilação, é automatizado por programas como yay, mas o autor executou todo esse procedimento em um sistema limpo):

% git clone https://aur.archlinux.org/xrdp-devel-git.git
% git clone https://aur.archlinux.org/xorgxrdp-devel-git.git

Primeiro, vamos instalar o XRDP. Vamos abrir o arquivo PKGBUILD com qualquer editor de texto.

Vamos editar as opções de compilação. O PKGBUILD para compilar o XRDP do Git não inclui suporte para vsock ao ser compilado, então vamos habilitá-lo manualmente:

 build() {
   cd $pkgname
   ./configure --prefix=/usr 
               --sysconfdir=/etc 
               --localstatedir=/var 
               --sbindir=/usr/bin 
               --with-systemdsystemdunitdir=/usr/lib/systemd/system 
               --enable-jpeg 
               --enable-tjpeg 
               --enable-fuse 
               --enable-opus 
               --enable-rfxcodec 
               --enable-mp3lame 
-              --enable-pixman
+              --enable-pixman 
+              --enable-vsock
   make V=0
 }

No patch arch-config.diff, que modifica as unidades e os scripts de inicialização do XRDP para os caminhos dos arquivos usados no Arch Linux, contém também um patch para o script instfiles/xrdp.sh, que no momento da redação do artigo foi removido do pacote XRDP, então o patch precisará ser editado manualmente:

  [Install]
  WantedBy=multi-user.target
-diff -up src/xrdp-devel-git/instfiles/xrdp.sh.orig src/xrdp-devel-git/instfiles/xrdp.sh
---- src/xrdp-devel-git/instfiles/xrdp.sh.orig  2017-08-30 00:27:28.000000000 -0600
-+++ src/xrdp-devel-git/instfiles/xrdp.sh   2017-08-30 00:28:00.000000000 -0600
-@@ -17,7 +17,7 @@
- # Description: inicia xrdp
- ### END INIT INFO
- 
--SBINDIR=/usr/local/sbin
-+SBINDIR=/usr/bin
- LOG=/dev/null
- CFGDIR=/etc/xrdp
- 
 diff -up src/xrdp-devel-git/sesman/startwm.sh.orig src/xrdp-devel-git/sesman/startwm.sh
 --- src/xrdp-devel-git/sesman/startwm.sh.orig  2017-08-30 00:27:30.000000000 -0600

Vamos compilar e instalar o pacote com o comando % makepkg --skipchecksums -si (a chave --skipchecksums é necessária para desativar a verificação de somas de verificação dos arquivos de origem, uma vez que os editamos manualmente).

Vamos para o diretório xorgxrdp-devel-git, e então simplesmente iremos compilar o pacote com o comando % makepkg -si.

Vamos para o diretório linux-vm-tools/arch e vamos executar o script install-config.sh, que instala as configurações do XRDP, PolicyKit e PAM:

% sudo ./install-config.sh

O script instala uma configuração desatualizada use_vsock, que é ignorada a partir da versão 0.9.11, então vamos editar o arquivo de configuração /etc/xrdp/xrdp.ini manualmente:

 ;   port=vsock://:
-port=3389
+port=vsock://-1:3389

 ; 'port' acima deve ser conectado via vsock em vez de tcp
 ; use isso apenas com número sozinho no porto acima
 ; prefira usar vsock://: acima
-use_vsock=true
+;use_vsock=true

 ; regule se o socket de escuta usa a opção de socket tcp_nodelay

Vamos adicionar ao arquivo ~/.xinitrc iniciar seu gerenciador de janelas / ambiente de desktop preferido, que será executado ao iniciar o servidor X:

% echo "exec i3" > ~/.xinitrc

Vamos desligar a máquina virtual. Ativaremos o transporte vsock para a máquina virtual, executando o seguinte comando no PowerShell como administrador:

PS Admin > Set-VM -VMName NOME_DA_MÁQUINA -EnhancedSessionTransportType HvSocket

Vamos ligar a máquina virtual novamente.

Conexão

Assim que o serviço XRDP for iniciado após a inicialização do sistema, o aplicativo vmconnect o detectará e o item aparecerá no menu Ver -> Sessão Aprimorada. Ao selecionar este item, seremos solicitados a definir a resolução da tela, e na aba Recursos Locais do diálogo que se abre, será possível escolher os dispositivos que serão encaminhados para a sessão RDP.

Ativando o Modo de Sessão Aprimorada para convidados Arch Linux no Hyper-V
Ativando o Modo de Sessão Aprimorada para convidados Arch Linux no Hyper-V

Vamos nos conectar. Veremos a tela de entrada do XRDP:

Ativando o Modo de Sessão Aprimorada para convidados Arch Linux no Hyper-V

Digite seu nome de usuário e senha.

Uso

O benefício dessas manipulações é evidente: a sessão RDP funciona muito mais responsivamente do que ao trabalhar com um display virtual sem a Sessão Aprimorada. Os discos encaminhados para dentro da VM via RDP estão disponíveis no diretório ${HOME}/shared-drives:

Ativando o Modo de Sessão Aprimorada para convidados Arch Linux no Hyper-V

A área de transferência funciona normalmente. Não é possível encaminhar impressoras para dentro, isso não apenas não é suportado, mas também quebra o encaminhamento dos discos. O som também não funciona, mas isso não era necessário para o autor. Para capturar combinações de teclas como Alt+Tab, é necessário colocar o vmconnect em tela cheia.

Se por algum motivo houver o desejo de usar, em vez do aplicativo vmconnect, o cliente RDP embutido no Windows ou, por exemplo, conectar-se a essa máquina de outra máquina, será necessário mudar no arquivo /etc/xrdp/xrdp.ini port para tcp://:3389. Se a máquina virtual estiver conectada ao Default Switch e receber configurações de rede via DHCP, pode-se conectar a ela do host pelo endereço nome_da_máquina.mshome.net. Para acessar o TTY, pode-se fazer somente pelo aplicativo vmconnect, desativando o Modo Aprimorado.

Fontes utilizadas:

  1. Hyper-V — Arch Wiki
  2. Relatórios de bugs no GitHub: 1, 2

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster