Abilita la modalità sessione avanzata per i guest Arch Linux in Hyper-V

Abilita la modalità sessione avanzata per i guest Arch Linux in Hyper-V

L'utilizzo di macchine virtuali Linux in Hyper-V è un po' meno comodo rispetto alle macchine Windows guest. La ragione di ciò è che Hyper-V non era originariamente destinato all'uso desktop; non puoi semplicemente andare avanti e installare il pacchetto di aggiunte per gli ospiti e ottenere un'accelerazione grafica praticabile, appunti, directory condivise e altre gioie della vita, come accade in VirtualBox.

Hyper-V stesso fornisce molteplici servizi di integrazione - quindi, gli ospiti possono utilizzare il servizio di copia shadow (VSS) dell'host, gli ospiti possono inviare un segnale di spegnimento, gli ospiti possono sincronizzare l'ora del sistema con l'host di virtualizzazione, i file possono essere scambiati con la macchina virtuale dall'host (Copy-VMFile in PowerShell). Per alcuni sistemi operativi guest, incluso, ovviamente, Windows, nell'applicazione Virtual Machine Connection (vmconnect.exe) È disponibile la modalità sessione avanzata, che funziona tramite il protocollo RDP e consente di inoltrare dispositivi disco e stampanti alla macchina virtuale, nonché utilizzare gli appunti condivisi.

La modalità sessione avanzata funziona immediatamente su Windows in Hyper-V subito dopo l'installazione. Con gli ospiti su Linux, è necessario installare un server RDP che supporti vsock (uno speciale spazio di indirizzi di rete virtuale in Linux progettato per comunicare con l'hypervisor). Se per Ubuntu, l'applicazione VMCreate fornita con Hyper-V nelle edizioni desktop di Windows ha uno speciale modello di macchina virtuale preparato in cui un server RDP in esecuzione con vsock xrdp già preinstallato, quindi con altre distribuzioni è sempre meno chiaro, ad esempio l'autore questo post si è scoperto per abilitare ESM in Fedora. Qui abilitiamo anche la modalità sessione avanzata per la macchina virtuale Arch Linux.

Installazione di servizi di integrazione

Tutto è più o meno semplice qui, dobbiamo solo installare il pacchetto hyperv dal repository della comunità:

% sudo pacman -S hyperv

Abilita servizi VSS, scambio metadati e file:

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

Installazione XRDP

deposito linux-vm-tools su GitHub fornisce script che automatizzano il processo di installazione e configurazione di XRDP per Arch Linux e Ubuntu. Installa Git, se non è già installato, insieme al compilatore e altro software per build manuali, quindi clona 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 documento, la versione più recente di XRDP, installata dallo script makepkg.shproposto nel repository è 0.9.11, in cui l'analisi è interrotta vsock://-addresses, quindi devi installare XRDP da Git e il driver Xorg da AUR manualmente. Anche la patch per XRDP offerta in AUR è leggermente obsoleta, quindi dovrai modificare manualmente il PKGBUILD e la patch.

Cloniamo i repository con PKGBUILD da AUR (solitamente questa procedura, insieme all'assembly, è automatizzata da programmi come yay, ma l'autore ha eseguito l'intera 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

Installiamo prima XRDP stesso. Apriamo il file PKGBUILD qualsiasi editor di testo.

Modifichiamo i parametri di build. Il PKGBUILD per la creazione di XRDP da Git non include il supporto vsock nella build, quindi abilitiamolo 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-pixman 
+              --enable-vsock
   make V=0
 }

In una toppa arch-config.diff, che modifica le unità e gli script di avvio XRDP nei percorsi dei file utilizzati in Arch Linux, contiene, tra le altre cose, una patch allo script instfiles/xrdp.sh, che al momento della scrittura è stato cancellato dalla distribuzione XRDP, quindi la patch dovrà essere modificata 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

Compila e installa il pacchetto con il comando % makepkg --skipchecksums -si (chiave --skipchecksums è necessario per disabilitare la verifica del checksum dei file di origine, poiché li abbiamo modificati manualmente).

Andiamo alla rubrica xorgxrdp-devel-git, dopodiché costruiamo semplicemente il pacchetto con il comando % makepkg -si.

Andiamo alla rubrica linux-vm-tools/arch ed eseguire lo script install-config.sh, che imposta le impostazioni XRDP, PolicyKit e PAM:

% sudo ./install-config.sh

Lo script installa l'impostazione legacy use_vsock, che viene ignorato dalla versione 0.9.11, quindi modifichiamo il file di configurazione /etc/xrdp/xrdp.ini manualmente:

 ;   port=vsock://<cid>:<port>
-port=3389
+port=vsock://-1:3389

 ; 'port' above should be connected to with vsock instead of tcp
 ; use this only with number alone in port above
 ; prefer use vsock://<cid>:<port> above
-use_vsock=true
+;use_vsock=true

 ; regulate if the listening socket use socket option tcp_nodelay

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

% echo "exec i3" > ~/.xinitrc

Spegniamo la macchina virtuale. Abilita il trasporto vsock per la VM eseguendo il seguente comando in PowerShell come amministratore:

PS Admin > Set-VM -VMName НАЗВАНИЕ_МАШИНЫ -EnhancedSessionTransportType HvSocket

Accendiamo di nuovo la macchina virtuale.

Подключение

Non appena il servizio XRDP si avvia dopo l'avvio del sistema, l'applicazione vmconnect lo determinerà e la voce di menu diventerà disponibile. Visualizza -> Sessione potenziata. Quando selezioni questo elemento, ci verrà chiesto di impostare la risoluzione dello schermo e nella scheda Risorse locali nella finestra di dialogo che si apre, puoi selezionare i dispositivi inoltrati all'interno della sessione RDP.

Abilita la modalità sessione avanzata per i guest Arch Linux in Hyper-V
Abilita la modalità sessione avanzata per i guest Arch Linux in Hyper-V

Connettiamoci. Vedremo la finestra di accesso XRDP:

Abilita la modalità sessione avanzata per i guest Arch Linux in Hyper-V

Inserisci il tuo nome utente e password.

l'uso di

Il profitto di queste manipolazioni è notevole: la sessione RDP funziona in modo molto più reattivo rispetto a quando si lavora con un display virtuale senza sessione avanzata. I dischi inoltrati all'interno della VM tramite RDP sono disponibili nella directory ${HOME}/shared-drives:

Abilita la modalità sessione avanzata per i guest Arch Linux in Hyper-V

Gli appunti funzionano correttamente. Non puoi lanciare stampanti all'interno, questo non solo non è supportato, ma anche interrompe l'inoltro del disco. Anche il suono non funziona, ma l'autore non ne aveva bisogno. Per acquisire scorciatoie da tastiera come Alt + Tab, è necessario espandere vmconnect a schermo intero.

Se per qualche motivo si desidera utilizzare il client RDP integrato in Windows anziché l'applicazione vmconnect o, ad esempio, connettersi a questa macchina da un'altra macchina, sarà necessario modificare il file /etc/xrdp/xrdp.ini port su tcp://:3389. Se la macchina virtuale è connessa allo Switch predefinito e riceve le impostazioni di rete tramite DHCP, è possibile connettersi dall'host all'indirizzo название_машины.mshome.net. Puoi accedere a TTY solo dall'applicazione vmconnect disattivando la modalità avanzata.

Fonti utilizzate:

  1. Wiki dell'arco di Hyper-V
  2. Segnalazioni di bug su GitHub: 1, 2

Fonte: habr.com

Aggiungi un commento