Activar el Modo de Sesión Mejorada para invitados de Arch Linux en Hyper-V

Activar el Modo de Sesión Mejorada para invitados de Arch Linux en Hyper-V

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 varios servicios de integración — 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 XRDP ya preinstalado, con otras distribuciones es menos claro: el autor de esta publicación 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 hyperv

Activaremos los servicios de VSS, intercambio de metadatos y archivos:

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

Instalación de XRDP

Repositorio linux-vm-tools 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/arch

Al 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, en la que se ha roto el análisis de 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 yay, 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.git

Primero 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 había sido eliminado 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 -0600

Compilaremos 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.sh

El 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_nodelay

Agregaremos al archivo ~/.xinitrc iniciar su gestor de ventanas / entorno de escritorio preferido, que se ejecutará al iniciar el servidor X:

% echo "exec i3" > ~/.xinitrc

Apagaremos 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 HvSocket

Encenderemos 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.

Activar el Modo de Sesión Mejorada para invitados de Arch Linux en Hyper-V
Activar el Modo de Sesión Mejorada para invitados de Arch Linux en Hyper-V

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

Activar el Modo de Sesión Mejorada para invitados de Arch Linux en Hyper-V

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:

Activar el Modo de Sesión Mejorada para invitados de Arch Linux en Hyper-V

El portapapeles funciona correctamente. No se pueden redirigir impresoras, no solo no está soportado, sino que también rompe la redirección de discos. 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:

  1. Hyper-V - Arch Wiki
  2. Informes de errores en GitHub: 1, 2

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster