Habilitar Modo de Sessão Aprimorado para convidados do Arch Linux no Hyper-V

Habilitar Modo de Sessão Aprimorado para convidados do Arch Linux no Hyper-V

O uso de máquinas virtuais Linux no Hyper-V pronto para uso é uma experiência um pouco menos confortável do que com máquinas convidadas do Windows. A razão para isso é que o Hyper-V não foi originalmente projetado para uso em desktop; você não pode simplesmente ir em frente e instalar o pacote Guest Additions e obter aceleração gráfica viável, área de transferência, diretórios compartilhados e outras alegrias da vida, como acontece no VirtualBox.

O próprio Hyper-V fornece vários serviços de integração - assim, os convidados podem usar o serviço de cópia de sombra (VSS) do host, os convidados podem enviar um sinal de desligamento, os convidados podem sincronizar a hora do sistema com o host de virtualização, os arquivos podem ser trocados com a máquina virtual do host (Copy-VMFile no PowerShell). Para alguns sistemas operacionais convidados, incluindo, é claro, o Windows, no aplicativo Virtual Machine Connection (vmconnect.exe) Está disponível o Modo de sessão aprimorado, que funciona por meio do protocolo RDP e permite encaminhar dispositivos de disco e impressoras para a máquina virtual, além de usar a área de transferência compartilhada.

O modo de sessão aprimorado funciona imediatamente no Windows no Hyper-V logo após a instalação. Com convidados no Linux, você precisa instalar um servidor RDP que suporte vsock (um espaço de endereço de rede virtual especial no Linux projetado para se comunicar com o hypervisor). Se para o Ubuntu, o aplicativo VMCreate que vem com o Hyper-V nas edições de desktop do Windows tem um modelo de máquina virtual preparado especial no qual um servidor RDP rodando com vsock XRDP já pré-instalado, então com outras distribuições é cada vez menos claro - por exemplo, o autor esta postagem acabou habilitando o ESM no Fedora. Aqui também ativamos o Modo de sessão aprimorado para a máquina virtual Arch Linux.

Instalando serviços de integração

Tudo é mais ou menos simples aqui, só precisamos instalar o pacote hyperv do repositório da comunidade:

% sudo pacman -S hyperv

Habilite os serviços VSS, troque metadados e arquivos:

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

Instalação do XRDP

repositório ferramentas linux-vm no GitHub fornece scripts que automatizam o processo de instalação e configuração do XRDP para Arch Linux e Ubuntu. Instale o Git, se ainda não estiver instalado, junto com o compilador e outros softwares para compilações manuais e depois clone 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.shproposto no repositório é 0.9.11, em que a análise é quebrada vsock://-addresses, então você tem que instalar o XRDP do Git e o driver Xorg para ele do AUR manualmente. O patch para XRDP oferecido no AUR também está um pouco desatualizado, então você terá que editar o PKGBUILD e o patch manualmente.

Clonamos os repositórios com PKGBUILDs do AUR (geralmente esse procedimento, junto com a montagem, é automatizado por programas como yay, mas o autor fez 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

Vamos instalar o próprio XRDP primeiro. Vamos abrir o arquivo PKGBUILD qualquer editor de texto.

Vamos editar os parâmetros de construção. O PKGBUILD para construir XRDP a partir do Git não inclui suporte a vsock na construção, então vamos habilitá-lo nós mesmos:

 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
 }

Em um patch arch-config.diff, que edita unidades e scripts de inicialização XRDP nos caminhos para arquivos usados ​​no Arch Linux, contém, entre outras coisas, um patch para o script instfiles/xrdp.sh, que na hora de escrever foi deletado da distribuição XRDP, então o patch terá que 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: starts 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

Compile e instale o pacote com o comando % makepkg --skipchecksums -si (chave --skipchecksums é necessário para desativar a verificação da soma de verificação dos arquivos de origem, pois os editamos manualmente).

Vamos ao diretório xorgxrdp-devel-git, após o qual simplesmente construímos o pacote com o comando % makepkg -si.

Vamos ao diretório linux-vm-tools/arch e execute o script install-config.sh, que define as configurações de XRDP, PolicyKit e PAM:

% sudo ./install-config.sh

O script instala a configuração herdada use_vsock, que é ignorado desde a versão 0.9.11, então vamos editar o arquivo de configuração /etc/xrdp/xrdp.ini manualmente:

 ;   port=vsock://<cid>:<port>
-port=3389
+port=vsock://-1:3389

 ; 'port' above should be connected to with vsock instead of tcp
 ; use this only with number alone in port above
 ; prefer use vsock://<cid>:<port> above
-use_vsock=true
+;use_vsock=true

 ; regulate if the listening socket use socket option tcp_nodelay

Adicionar ao arquivo ~/.xinitrc iniciando seu gerenciador de janelas/ambiente de área de trabalho preferido, que será executado quando o servidor X for iniciado:

% echo "exec i3" > ~/.xinitrc

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

PS Admin > Set-VM -VMName НАЗВАНИЕ_МАШИНЫ -EnhancedSessionTransportType HvSocket

Vamos ligar a máquina virtual novamente.

Подключение

Assim que o serviço XRDP for iniciado após a inicialização do sistema, o aplicativo vmconnect determinará isso e o item de menu ficará disponível. Ver -> Sessão aprimorada. Ao selecionar este item, seremos solicitados a definir a resolução da tela e, na guia Recursos locais na caixa de diálogo que se abre, você pode selecionar os dispositivos encaminhados dentro da sessão RDP.

Habilitar Modo de Sessão Aprimorado para convidados do Arch Linux no Hyper-V
Habilitar Modo de Sessão Aprimorado para convidados do Arch Linux no Hyper-V

Vamos nos conectar. Veremos a janela de login do XRDP:

Habilitar Modo de Sessão Aprimorado para convidados do Arch Linux no Hyper-V

Digite seu nome de usuário e senha.

Usar

O lucro dessas manipulações é perceptível: a sessão RDP funciona muito mais responsiva do que ao trabalhar com uma tela virtual sem sessão aprimorada. Os discos encaminhados dentro da VM via RDP ficam disponíveis no diretório ${HOME}/shared-drives:

Habilitar Modo de Sessão Aprimorado para convidados do Arch Linux no Hyper-V

A área de transferência está funcionando bem. Você não pode jogar impressoras dentro, isso não só não é suportado, mas também quebra o encaminhamento de disco. O som também não funciona, mas o autor não precisava. Para capturar atalhos de teclado como Alt + Tab, você precisa expandir vmconnect para tela cheia.

Se, por algum motivo, houver o desejo de usar o cliente RDP embutido no Windows em vez do aplicativo vmconnect ou, por exemplo, conectar-se a esta máquina de outra máquina, será necessário alterar o arquivo /etc/xrdp/xrdp.ini port em tcp://:3389. Se a máquina virtual estiver conectada ao switch padrão e receber configurações de rede via DHCP, você poderá se conectar a ela a partir do host em название_машины.mshome.net. Você só pode fazer login no TTY a partir do aplicativo vmconnect desativando o Modo Avançado.

Fontes utilizadas:

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

Fonte: habr.com

Adicionar um comentário