
El uso de máquinas virtuales en Linux en Hyper-V desde el principio es algo menos cómodo que con máquinas invitadas de Windows. La razón es que Hyper-V no fue diseñado originalmente para ser utilizado como un escritorio; no se puede simplemente instalar el paquete de adiciones para invitados y obtener aceleración gráfica funcional, portapapeles compartido, directorios compartidos y otras comodidades de la vida, como ocurre en VirtualBox.
Hyper-V proporciona — de modo que los invitados pueden utilizar el servicio de copia de seguridad en sombras (VSS) del host, se puede enviar una señal de apagado a los invitados, los invitados pueden sincronizar la hora del sistema con el host de virtualización, y se puede intercambiar archivos entre el host y la máquina virtual (Copy-VMFile en PowerShell). Para algunos sistemas operativos invitados, incluido, por supuesto, Windows, en la aplicación Virtual Machine Connection (vmconnect.exe) se encuentra disponible el Modo de Sesión Mejorada, que funciona a través del protocolo RDP y permite redirigir dispositivos de disco e impresoras en la máquina virtual, así como utilizar un portapapeles compartido.
El Modo de Sesión Mejorada funciona desde el principio en Windows en Hyper-V inmediatamente después de la instalación. Con los invitados de Linux, es necesario instalar un servidor RDP que soporte vsock (un espacio de direcciones de red virtual específico en Linux, diseñado para comunicarse con el hipervisor). Si para Ubuntu hay una plantilla de máquina virtual preparada en la aplicación VMCreate que viene con Hyper-V en las versiones de escritorio de Windows, que incluye un servidor RDP que funciona con vsock ya preinstalado, con otras distribuciones es menos claro: el autor logró habilitar el ESM en Fedora. Aquí activamos el Modo de Sesión Mejorada para la máquina virtual con Arch Linux.
Instalación de los servicios de integración
Aquí todo es relativamente simple, solo necesitamos instalar el paquete hyperv del repositorio community:
% sudo pacman -S hypervActivaremos los servicios de VSS, intercambio y archivos:
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; doneInstalación de XRDP
Repositorio en GitHub proporciona scripts que automatizan el proceso de instalación y configuración de XRDP para Arch Linux y Ubuntu. Instalemos Git, si aún no está instalado, junto con un compilador y otro software para compilaciones manuales, después de lo cual clonaremos el repositorio:
% sudo pacman -S git base-devel
% git clone https://github.com/microsoft/linux-vm-tools.git
% cd linux-vm-tools/archAl momento de redactar este artículo, la versión más reciente de XRDP, que se instala con el script makepkg.sh, ofrecida en el repositorio, es la 0.9.11, vsock://-direcciones, por lo que será necesario instalar XRDP desde Git y el controlador Xorg para él manualmente desde AUR. El parche de XRDP ofrecido en AUR también está ligeramente desactualizado, así que será necesario editar el PKGBUILD y el parche manualmente.
Clonaremos los repositorios con los PKGBUILD de AUR (normalmente este procedimiento junto con la compilación es automatizado por programas como , pero el autor realizó todo este procedimiento en un sistema limpio):
% git clone https://aur.archlinux.org/xrdp-devel-git.git
% git clone https://aur.archlinux.org/xorgxrdp-devel-git.gitPrimero instalaremos XRDP. Abriremos el archivo PKGBUILD con cualquier editor de texto.
Editar los parámetros de compilación. El PKGBUILD para compilar XRDP desde Git no incluye soporte para vsock durante la compilación, así que lo habilitaremos nosotros mismos:
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
}En el parche arch-config.diff, que modifica las unidades y los scripts de inicio de XRDP para las rutas de los archivos utilizados en Arch Linux, se incluye también un parche para el script instfiles/xrdp.sh, que en el momento de redactar este artículo de la distribución de XRDP, por lo que el parche deberá 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 @@
- # Descripción: inicia xrdp
- ### FIN DE LA INFORMACIÓN INIT
-
--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 -0600Compilaremos e instalaremos el paquete con el comando % makepkg --skipchecksums -si (la opción --skipchecksums es necesaria para desactivar la verificación de sumas de control de los archivos de origen, ya que los editamos manualmente).
Pasaremos al directorio xorgxrdp-devel-git, después de lo cual simplemente compilaremos el paquete con el comando % makepkg -si.
Pasaremos al directorio linux-vm-tools/arch y ejecutaremos el script install-config.sh, que instala la configuración de XRDP, PolicyKit y PAM:
% sudo ./install-config.shEl script instala la configuración obsoleta use_vsock, que es ignorado desde la versión 0.9.11, así que editemos el archivo de configuración /etc/xrdp/xrdp.ini manualmente:
; port=vsock://:
-port=3389
+port=vsock://-1:3389
; 'port' arriba debe estar conectado con vsock en lugar de tcp
; utiliza esto solo con número solo en el puerto arriba
; prefiero usar vsock://: arriba
-use_vsock=true
+;use_vsock=true
; regula si el socket de escucha usa la opción de socket tcp_nodelayAgregaremos al archivo ~/.xinitrc iniciar su gestor de ventanas / entorno de escritorio preferido, que se ejecutará al iniciar el servidor X:
% echo "exec i3" > ~/.xinitrcApagaremos la máquina virtual. Activaremos el transporte vsock para la máquina virtual, ejecutando el siguiente comando en PowerShell como administrador:
PS Admin > Set-VM -VMName NOMBRE_DE_MAQUINA -EnhancedSessionTransportType HvSocketEncenderemos la máquina virtual nuevamente.
Conexión
Una vez que el servicio XRDP se inicie después de arrancar el sistema, la aplicación vmconnect lo detectará y aparecerá la opción en el menú Ver -> Sesión Mejorada. Al seleccionar esta opción se nos pedirá que establezcamos la resolución de pantalla, y en la pestaña Recursos Locales del cuadro de diálogo que se abre, podremos seleccionar los dispositivos que se redirigen a la sesión RDP.


Conectémonos. Veremos la ventana de inicio de sesión de XRDP:

Introduzcamos nuestro nombre de usuario y contraseña.
Uso
El beneficio de estas manipulaciones es evidente: la sesión RDP funciona mucho más rápido que al trabajar con una pantalla virtual sin la Sesión Mejorada. Los discos redirigidos a la VM a través de RDP están disponibles en el directorio ${HOME}/shared-drives:

El portapapeles funciona correctamente. No se pueden redirigir impresoras, no solo no está soportado, sino que también . También no funciona el sonido, pero esto tampoco era necesario para el autor. Para que se capturen combinaciones de teclas como Alt+Tab, se debe maximizar vmconnect a pantalla completa.
Si por alguna razón se desea utilizar en lugar de la aplicación vmconnect el cliente RDP integrado en Windows o, por ejemplo, conectarse a esta máquina desde otra máquina, se deberá cambiar en el archivo /etc/xrdp/xrdp.ini port en tcp://:3389. Si la máquina virtual está conectada al Default Switch y obtiene configuraciones de red por DHCP, entonces se puede conectar a ella desde el host a la dirección nombre_maquina.mshome.net. Se puede acceder a TTY solo desde la aplicación vmconnect, desactivando el Modo Mejorado.
Fuentes utilizadas:
- Informes de errores en GitHub: ,
Fuente: habr.com
