Attiviamo la modalità sessione avanzata per gli ospiti Arch Linux in Hyper-V

Attiviamo la modalità sessione avanzata per gli ospiti Arch Linux in Hyper-V

L'utilizzo delle macchine virtuali su Linux in Hyper-V è un'attività decisamente meno confortevole rispetto a quella con le macchine Windows. Questo è dovuto al fatto che Hyper-V non è stato originariamente progettato per l'uso su desktop; non è possibile semplicemente installare il pacchetto di aggiunte per gli ospiti e avere un'accelerazione grafica funzionante, il copia e incolla, directory condivise e altre comodità della vita, come avviene in VirtualBox.

Hyper-V fornisce alcuni servizi di integrazione — ad esempio, gli ospiti possono utilizzare il servizio di shadow copy (VSS) dell'host, è possibile inviare un segnale di spegnimento agli ospiti, gli ospiti possono sincronizzare l'orario di sistema con l'host di virtualizzazione, e dall'host è possibile scambiare file con la macchina virtuale (Copy-VMFile in PowerShell). Per alcuni sistemi operativi guest, tra cui ovviamente Windows, è disponibile la modalità di sessione avanzata nell'applicazione Virtual Machine Connection (vmconnect.exe) che funziona tramite protocollo RDP e consente di passare all'interno della macchina virtuale dispositivi di archiviazione e stampanti, oltre a utilizzare il clipboard condiviso.

La modalità di sessione avanzata funziona già in Windows su Hyper-V immediatamente dopo l'installazione. Con gli ospiti Linux è necessario installare un server RDP che supporti vsock (uno spazio di indirizzi di rete virtuale speciale in Linux destinato alla comunicazione con l'hypervisor). Se per Ubuntu nell'applicazione VMCreate, inclusa con Hyper-V nelle versioni desktop di Windows, esiste un modello di macchina virtuale preparato in cui il server RDP funzionante con vsock XRDP è già preinstallato, per altre distribuzioni il tutto è meno chiaro — ad esempio, l'autore di questo post è riuscito ad attivare ESM su Fedora. Qui attiviamo la modalità di sessione avanzata per una macchina virtuale con Arch Linux.

Installazione dei servizi di integrazione

Qui è tutto più o meno semplice, dobbiamo solo installare il pacchetto hyperv dal repository community:

% sudo pacman -S hyperv

Attiveremo i servizi VSS, scambio di metadati e file:

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

Installazione di XRDP

Repository linux-vm-tools su GitHub fornisce script che automatizzano il processo di installazione e configurazione di XRDP, per Arch Linux e Ubuntu. Installeremo Git, se non è già installato, insieme al compilatore e ad altri software per build manuali, dopo di che cloneremo il repository:

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

Al momento della stesura di questo articolo, l'ultima versione di XRDP installabile tramite lo script makepkg.sh, proposto nel repository, è la 0.9.11, nella quale il parsing vsock://degli indirizzi è rotto, quindi sarà necessario installare XRDP da Git e il driver Xorg da AUR manualmente. Anche la patch a XRDP proposta in AUR è leggermente obsoleta, quindi sarà necessario modificare manualmente il PKGBUILD e la patch.

Cloniamo i repository con i PKGBUILD da AUR (solitamente questa procedura viene automatizzata con programmi come yay, ma l'autore ha eseguito tutta questa procedura su un sistema pulito):

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

Iniziamo installando XRDP. Apriamo il file PKGBUILD con un qualsiasi editor di testo.

Modifichiamo i parametri di compilazione. Il PKGBUILD per la compilazione di XRDP da Git non include il supporto per vsock durante la compilazione, quindi abilitiamolo 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
 }

Nella patch arch-config.diff, che modifica le unità e gli script di avvio di XRDP per i percorsi dei file utilizzati in Arch Linux, è inclusa anche una patch allo script instfiles/xrdp.sh, che al momento della stesura dell'articolo era stata rimossa dalla fornitura di XRDP, quindi sarà necessario modificare manualmente la patch:

  [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

Compiliamo e installiamo il pacchetto con il comando % makepkg --skipchecksums -si (la chiave --skipchecksums è necessaria per disabilitare il controllo dei checksum dei file sorgente, poiché li abbiamo modificati manualmente).

Passiamo alla directory xorgxrdp-devel-git, dopo di che semplicemente compiliamo il pacchetto con il comando % makepkg -si.

Passiamo alla directory linux-vm-tools/arch e avviamo lo script install-config.sh, che imposta le configurazioni di XRDP, PolicyKit e PAM:

% sudo ./install-config.sh

Lo script imposta una configurazione obsoleta use_vsock, che viene ignorata dalla versione 0.9.11, quindi modifichiamo manualmente il file di configurazione /etc/xrdp/xrdp.ini :

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

 ; 'port' sopra dovrebbe essere connesso con vsock invece di tcp
 ; usalo solo con il numero da solo nel porto sopra
 ; è preferibile usare vsock://: sopra
-use_vsock=true
+;use_vsock=true

 ; regola se il socket di ascolto utilizza l'opzione socket tcp_nodelay

Aggiungiamo al file ~/.xinitrc avvio del proprio gestore di finestre / ambiente desktop preferito, che verrà eseguito all'avvio del server X:

% echo "exec i3" > ~/.xinitrc

Spegni la macchina virtuale. Attiva il trasporto vsock per la macchina virtuale eseguendo il seguente comando in PowerShell come amministratore:

PS Admin > Set-VM -VMName NOME_MACCHINA -EnhancedSessionTransportType HvSocket

Riaccendiamo la macchina virtuale.

Collegamento

Non appena il servizio XRDP si avvia dopo il boot, l'applicazione vmconnect lo rileverà e nel menu sarà disponibile la voce Visualizza -> Sessione Avanzata. Se selezioniamo questa voce, ci verrà chiesto di impostare la risoluzione dello schermo, e nella scheda Risorse Locali della finestra di dialogo aperta sarà possibile scegliere i dispositivi da inoltrare nella sessione RDP.

Attiviamo la modalità sessione avanzata per gli ospiti Arch Linux in Hyper-V
Attiviamo la modalità sessione avanzata per gli ospiti Arch Linux in Hyper-V

Colleghiamoci. Vederemo la finestra di accesso XRDP:

Attiviamo la modalità sessione avanzata per gli ospiti Arch Linux in Hyper-V

Inseriamo il nostro nome utente e la password.

Utilizzo

Il profitto di queste operazioni è evidente: la sessione RDP è molto più reattiva rispetto a quella con un display virtuale senza Sessione Avanzata. Le unità inoltrate nella VM tramite RDP sono disponibili nella directory ${HOME}/shared-drives:

Attiviamo la modalità sessione avanzata per gli ospiti Arch Linux in Hyper-V

Il clipboard funziona correttamente. Non è possibile inoltrare le stampanti, poiché non solo non è supportato, ma rompe l'inoltro delle unità. Anche l'audio non funziona, ma per l'autore questo non era necessario. Per catturare combinazioni di tasti come Alt+Tab, è necessario estendere vmconnect a schermo intero.

Se per qualsiasi motivo si desidera utilizzare invece dell'applicazione vmconnect il client RDP integrato in Windows o, ad esempio, connettersi a questa macchina da un'altra macchina, sarà necessario modificare nel file /etc/xrdp/xrdp.ini port in tcp://:3389. Se la macchina virtuale è connessa a Default Switch e riceve le impostazioni di rete tramite DHCP, è possibile connettersi ad essa dall'host all'indirizzo nome_macchina.mshome.net. È possibile accedere a TTY solo dall'applicazione vmconnect, disattivando la modalità avanzata.

Fonti utilizzate:

  1. Hyper-V — Arch Wiki
  2. Segnalazioni di bug su GitHub: 1, 2

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS - ProHoster