Activăm Enhanced Session Mode pentru oaspeții Arch Linux în Hyper-V

Activăm Enhanced Session Mode pentru oaspeții Arch Linux în Hyper-V

Utilizarea mașinilor virtuale pe Linux în Hyper-V din cutie este cu câteva mai puțin confortabilă decât cu mașinile Windows. Motivul este că Hyper-V nu a fost conceput inițial pentru utilizarea desktop; nu poți să iei pur și simplu să instalezi un pachet de adăugiri pentru oaspeți și să obții o accelerație grafică funcțională, clipboard comun, directoare partajate și multe alte avantaje, așa cum se întâmplă în VirtualBox.

Hyper-V oferă câteva servicii de integrare — astfel, oaspeții pot folosi serviciul de copiere shadow (VSS) al gazdei, pot primi un semnal de închidere, pot sincroniza timpul de sistem cu gazda de virtualizare, iar gazda poate interacționa cu fișierele din mașina virtuală (Copy-VMFile în PowerShell). Pentru anumite sisteme de operare de oaspeți, inclusiv Windows, aplicația Virtual Machine Connection (vmconnect.exe) oferă modul de sesiune îmbunătățită, care funcționează pe protocolul RDP și permite redirecționarea dispozitivelor de stocare și a imprimantelor în mașina virtuală, precum și utilizarea clipboard-ului comun.

Modul de sesiune îmbunătățită funcționează din cutie în Windows în Hyper-V imediat după instalare. Cu oaspeții pe Linux, trebuie să instalezi un server RDP care să suporte vsock (un spațiu de adresare de rețea virtual special în Linux destinat comunicării cu hipervizorul). Dacă pentru Ubuntu în aplicația VMCreate, care vine cu Hyper-V pe edițiile desktop de Windows, există un șablon de mașină virtuală pregătit special, în care serverul RDP funcțional cu vsock XRDP este deja preinstalat, cu alte distribuții lucrurile sunt mai puțin clare — autorul acestui post a reușit să activeze ESM în Fedora. Aici activăm modul de sesiune îmbunătățită pentru mașina virtuală cu Arch Linux.

Instalarea serviciilor de integrare

Aici este mai mult sau mai puțin simplu, trebuie doar să instalăm pachetul hyperv din repository-ul community:

% sudo pacman -S hyperv

Activăm serviciile VSS, de schimb de metadate și fișiere:

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

Instalarea XRDP

Repository-ul linux-vm-tools de pe GitHub oferă scripturi care automatizează procesul de instalare și configurare XRDP, pentru Arch Linux și Ubuntu. Vom instala Git, dacă nu este deja instalat, împreună cu compilatorul și alte programe pentru construcții manuale, după care vom clona repository-ul:

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

La momentul redactării acestui articol, cea mai recentă versiune a XRDP, instalată prin script, este makepkg.sh, propusă în depozit, este 0.9.11, în care există o problemă cu parser-ul vsock://-adreselor, așa că va trebui să instalăm XRDP din Git și driverul Xorg pentru acesta din AUR manual. Patch-ul pentru XRDP, propus în AUR, este de asemenea ușor învechit, așa că va trebui să edităm manual PKGBUILD și patch-ul.

Să clonăm repositoarele cu PKGBUILD-urile din AUR (de obicei, această procedură, împreună cu construirea, este automatizată de programe precum yay, dar autorul a trecut prin toată această procedură pe un sistem curat):

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

Să instalăm mai întâi XRDP. Vom deschide fișierul PKGBUILD cu orice editor de text.

Vom edita parametrii de construire. PKGBUILD-ul pentru construirea XRDP din Git nu include suport pentru vsock în construcție, așa că îl vom activa noi:

 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
 }

În patch-ul arch-config.diff, care editează unitățile și scripturile de pornire XRDP pentru căile fișierelor utilizate în Arch Linux, se află inclusiv patch-ul pentru scriptul instfiles/xrdp.sh, care, la momentul redactării acestui articol, fuseseră eliminate din livrarea XRDP, așa că patch-ul va trebui editat manual:

  [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

Să construim și să instalăm pachetul cu comanda % makepkg --skipchecksums -si (cheia --skipchecksums este necesară pentru a dezactiva verificarea sumelor de control ale fișierelor sursă, deoarece le-am editat manual).

Să ne mutăm în directorul xorgxrdp-devel-git, după care pur și simplu vom construi pachetul cu comanda % makepkg -si.

Să ne mutăm în directorul linux-vm-tools/arch și să rulăm scriptul install-config.sh, care instalează setările XRDP, PolicyKit și PAM:

% sudo ./install-config.sh

Scriptul instalează setarea învechită use_vsock, care este ignorată începând cu versiunea 0.9.11, prin urmare va trebui să modificăm fișierul de configurare /etc/xrdp/xrdp.ini manual:

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

 ; 'port' de mai sus ar trebui să fie conectat cu vsock în loc de tcp
 ; folosiți asta doar cu un număr singur în portul de mai sus
 ; preferați să folosiți vsock://: de mai sus
-use_vsock=true
+;use_vsock=true

 ; reglează dacă socketul de ascultare folosește opțiunea de socket tcp_nodelay

Să adăugăm în fișier ~/.xinitrc pornirea managerului de feronă / mediu desktop preferat, care va rula la inițierea serverului X:

% echo "exec i3" > ~/.xinitrc

Oprim mașina virtuală. Activăm transportul vsock pentru mașina virtuală, executând următoarea comandă în PowerShell ca administrator:

PS Admin > Set-VM -VMName NUME_MAȘINĂ -EnhancedSessionTransportType HvSocket

Repornim mașina virtuală.

Conectare

Odată ce serviciul XRDP este activat după pornirea sistemului, aplicația vmconnect o va recunoaște și va apărea o opțiune în meniu Vizualizare -> Ședință Îmbunătățită. Când alegem această opțiune, ni se va propune să stabilim rezoluția ecranului, iar în tab-ul Resurse Locale al dialogului deschis putem alege dispozitivele care vor fi transferate în sesiunea RDP.

Activăm Enhanced Session Mode pentru oaspeții Arch Linux în Hyper-V
Activăm Enhanced Session Mode pentru oaspeții Arch Linux în Hyper-V

Ne conectăm. Vom vedea fereastra de autentificare XRDP:

Activăm Enhanced Session Mode pentru oaspeții Arch Linux în Hyper-V

Introducem numele de utilizator și parola.

Utilizare

Profitul din aceste manevre este evident: sesiunea RDP funcționează mult mai rapid decât cu un display virtual fără Sesiune Îmbunătățită. Discurile transferate în VM prin RDP sunt accesibile în directorul ${HOME}/shared-drives:

Activăm Enhanced Session Mode pentru oaspeții Arch Linux în Hyper-V

Clipboard-ul funcționează corect. Nu se pot transfera imprimante, acest lucru nu este doar neacceptat, ci și strică transferul discurilor. De asemenea, sunetul nu funcționează, dar autorul nu avea nevoie de asta. Pentru ca combinațiile de taste precum Alt+Tab să fie captate, trebuie să extindeți vmconnect pe întreaga ecran.

Dacă din diverse motive doriți să folosiți în locul aplicației vmconnect clientul RDP încorporat în Windows sau, de exemplu, să vă conectați la această mașină dintr-o altă mașină, va trebui să modificați în fișierul /etc/xrdp/xrdp.ini port pe tcp://:3389. Dacă mașina virtuală este conectată la Default Switch și primește setările de rețea prin DHCP, atunci vă puteți conecta la ea de pe host la adresa nume_mașină.mshome.net. Accesul în TTY se poate face doar din aplicația vmconnect, dezactivând Modul Îmbunătățit.

Surse utilizate:

  1. Hyper-V — Arch Wiki
  2. Raportele de bug-uri pe GitHub: 1, 2

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster