Attiviamo la modalità Enhanced Session per gli ospiti Arch Linux in Hyper-V

Attiviamo la modalità Enhanced Session per gli ospiti Arch Linux in Hyper-V

L'uso delle macchine virtuali su Linux in Hyper-V è, a differenza delle macchine Windows ospiti, un'esperienza leggermente meno confortevole. Questo è dovuto al fatto che Hyper-V non è stato originariamente progettato per un utilizzo desktop; non è possibile semplicemente installare il pacchetto delle funzionalità per gli ospiti e ottenere l'accelerazione grafica, il supporto per il copia e incolla, le directory condivise e altre comodità come in VirtualBox.

Hyper-V offre diversi servizi di integrazione — ad esempio, gli ospiti possono utilizzare il servizio di shadow copy (VSS) dell'host, è possibile inviare un segnale di arresto agli ospiti, gli ospiti possono sincronizzare l'orario di sistema con l'host di virtualizzazione, ed è possibile scambiare file tra l'host e la macchina virtuale (Copy-VMFile in PowerShell). Per alcuni sistemi operativi ospiti, tra cui ovviamente Windows, nella connessione Virtual Machine (vmconnect.exe) è disponibile la modalità Enhanced Session, che funziona tramite il protocollo RDP e consente di trasmettere dispositivi di archiviazione e stampanti nella macchina virtuale, oltre a utilizzare il clipboard condiviso.

La modalità sessione migliorata è pronta all'uso in Windows su Hyper-V subito dopo l'installazione. Con gli ospiti Linux, è necessario installare un server RDP che supporti vsock (uno spazio di indirizzo di rete virtuale speciale in Linux, progettato per la comunicazione con il hypervisor). Se per Ubuntu nell'applicazione VMCreate, fornita con Hyper-V su edizioni desktop di Windows, esiste un modello di macchina virtuale specificamente preparato con un server RDP funzionante con vsock, XRDP già preinstallato, la situazione con altre distribuzioni è meno chiara: ad esempio, l'autore di questo post è riuscito ad attivare ESM su Fedora. Qui attiviamo la modalità sessione migliorata per la macchina virtuale con Arch Linux.

Installazione dei servizi di integrazione

Qui tutto è relativamente semplice, dobbiamo solo installare il pacchetto hyperv dal repository community:

% sudo pacman -S hyperv

Attiviamo i servizi VSS, di 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 puoi trovare script che automatizzano il processo di installazione e configurazione di XRDP per Arch Linux e Ubuntu. Iniziamo installando Git, se non è già presente, insieme al compilatore e ad altri software necessari per le compilationi manuali, dopodiché 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 scrittura di questo articolo, l'ultima versione di XRDP installata dallo script makepkg.sh, proposto nel repository, è la 0.9.11, nella quale il parsing vsock://-degli indirizzi è rotto, quindi dovremo installare XRDP da Git e il driver Xorg per esso manualmente dal AUR. Il patch per XRDP offerto nel AUR è anche leggermente obsoleto, quindi dovremo modificare manualmente il PKGBUILD e il patch.

Cloniamo i repository con i PKGBUILD dal AUR (di solito questa procedura è automatizzata da 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 a installare prima l'XRDP. Apriamo il file PKGBUILD con qualsiasi editor di testo.

Modifichiamo le impostazioni di compilazione. Il PKGBUILD per compilare XRDP da Git non include supporto per vsock durante la compilazione, quindi lo aggiungeremo noi stessi:

 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-vsock
   make V=0
 }

Nel patch arch-config.diff, relativo alle unità e agli script di avvio di XRDP per i percorsi dei file utilizzati in Arch Linux, è incluso un patch allo script instfiles/xrdp.sh, che al momento della scrittura era stato rimosso dalla distribuzione di XRDP, quindi il patch dovrà essere modificato 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

Compiliamo e installiamo il pacchetto con il comando % makepkg --skipchecksums -si (il flag --skipchecksums è necessario per disabilitare il controllo delle somme di controllo dei file sorgente, poiché li abbiamo modificati manualmente).

Entriamo nella directory xorgxrdp-devel-git, dopo di che semplicemente raccoglieremo il pacchetto con il comando % makepkg -si.

Entriamo nella directory linux-vm-tools/arch e avvieremo lo script install-config.sh, che imposta le configurazioni per XRDP, PolicyKit e PAM:

% sudo ./install-config.sh

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

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

 ; 'port' sopra dovrebbe essere connesso a vsock anziché tcp
 ; usalo solo con numero solo nel port sopra
 ; preferisci usare vsock://: sopra
-use_vsock=true
+;use_vsock=true

 ; regola se il socket in ascolto usa l'opzione del socket tcp_nodelay

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

% echo "exec i3" > ~/ .xinitrc

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

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

Riaccenderemo la macchina virtuale.

Connessione

Non appena il servizio XRDP si avvierà all'avvio del sistema, l'applicazione vmconnect lo riconoscerà e nel menu sarà disponibile l'opzione View -> Enhanced Session. Selezionando questa opzione, ci verrà chiesto di impostare la risoluzione dello schermo e nella scheda Local Resources Dalla finestra aperta sarà possibile selezionare i dispositivi da inoltrare nella sessione RDP.

Attiviamo la modalità Enhanced Session per gli ospiti Arch Linux in Hyper-V
Attiviamo la modalità Enhanced Session per gli ospiti Arch Linux in Hyper-V

Connettiamoci. Vedremo la finestra di accesso XRDP:

Attiviamo la modalità Enhanced Session per gli ospiti Arch Linux in Hyper-V

Inseriamo il nostro nome utente e la password.

L'utilizzo di

Il vantaggio di queste operazioni è evidente: la sessione RDP è molto più reattiva rispetto a quando si utilizza un display virtuale senza Enhanced Session. I dischi inoltrati nella VM attraverso RDP sono accessibili nella directory ${HOME}/shared-drives:

Attiviamo la modalità Enhanced Session per gli ospiti Arch Linux in Hyper-V

Il copia e incolla funziona normalmente. Non è possibile inoltrare le stampanti, non solo perché non è supportato, ma anche perché rompe l'inoltro dei dischi. Anche l'audio non funziona, ma l'autore non ne aveva bisogno. Per catturare combinazioni di tasti come Alt+Tab, è necessario espandere vmconnect a schermo intero.

Se per qualche motivo si desidera utilizzare, anziché l'app 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 con tcp://:3389. Se la macchina virtuale è collegata al Default Switch e riceve impostazioni di rete tramite DHCP, è possibile connettersi da host all'indirizzo nome_macchina.mshome.net. È possibile accedere a TTY solo dall'app vmconnect, disattivando la Enhanced Mode.

Fonti utilizzate:

  1. Hyper-V — Arch Wiki
  2. Bug reports on GitHub: 1, 2

Fonte: habr.com

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