
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 — 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 já está pré-instalado, mas com outras distribuições, a situação é menos clara — assim, o autor 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 hypervAtivaremos os serviços de VSS, troca e arquivos:
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; doneInstalação do XRDP
Repositório 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/archNo 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, 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 , 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.gitPrimeiro, 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 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 -0600Vamos 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.shO 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_nodelayVamos adicionar ao arquivo ~/.xinitrc iniciar seu gerenciador de janelas / ambiente de desktop preferido, que será executado ao iniciar o servidor X:
% echo "exec i3" > ~/.xinitrcVamos 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 HvSocketVamos 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.


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

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:

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 . 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:
- Relatórios de bugs no GitHub: ,
Fonte: habr.com
