
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 — 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, già preinstallato, la situazione con altre distribuzioni è meno chiara: ad esempio, l'autore è 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 hypervAttiviamo i servizi VSS, di scambio e file:
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; doneInstallazione di XRDP
Repository 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/archAl momento della scrittura di questo articolo, l'ultima versione di XRDP installata dallo script makepkg.sh, proposto nel repository, è la 0.9.11, 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 , 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.gitIniziamo 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 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 -0600Compiliamo 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.shLo 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_nodelayAggiungeremo al file ~/ .xinitrc l'avvio del proprio gestore di finestre / ambiente desktop preferito, che verrà eseguito all'avvio del server X:
% echo "exec i3" > ~/ .xinitrcSpegneremo 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 HvSocketRiaccenderemo 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.


Connettiamoci. Vedremo la finestra di accesso XRDP:

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:

Il copia e incolla funziona normalmente. Non è possibile inoltrare le stampanti, non solo perché non è supportato, ma anche perché . 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:
- Bug reports on GitHub: ,
Fonte: habr.com
