Aktivujeme Enhanced Session Mode pre hostiteľov Arch Linux v Hyper-V

Aktivujeme Enhanced Session Mode pre hostiteľov Arch Linux v Hyper-V

Používanie virtuálnych strojov na Linuxe v Hyper-V z krabice je o niečo menej pohodlné ako s hosťovacími Windows strojmi. Dôvodom je, že Hyper-V bol pôvodne navrhnutý nie na desktopové použitie; nie je možné jednoducho nainštalovať balík hosťovacích doplnkov a získať funkčné grafické akcelerovanie, schránku, zdieľané adresáre a ďalšie radosti zo života, ako to funguje vo VirtualBoxe.

Hyper-V sám poskytuje niekoľko integračných služieb — tak hostia môžu využívať službu tieňového kopírovania (VSS) hostiteľa, hosťom sa môže zaslať signál na vypnutie, hostia môžu synchronizovať systémový čas s hostiteľom, z hostiteľa je možná výmena súborov s virtuálnym strojom (Copy-VMFile v PowerShell). Pre niektoré hosťovské operačné systémy, medzi ktorými samozrejme patrí aj Windows, je v aplikácii Virtual Machine Connection (vmconnect.exe) dostupný Enhanced Session Mode, ktorý funguje na protokole RDP a umožňuje prenášať do virtuálneho stroja diskové zariadenia a tlačiarne, ako aj využívať zdieľanú schránku.

Enhanced Session Mode z krabice funguje vo Windows v Hyper-V ihneď po inštalácii. S hosťami na Linuxe je potrebné nainštalovať RDP server, ktorý podporuje vsock (špeciálny virtuálny sieťový adresný priestor v Linuxe určený na komunikáciu s hypervízorom). Ak pre Ubuntu v aplikácii VMCreate, dodávanej s Hyper-V na desktopových edíciách Windows, existuje špeciálne pripravená šablóna virtuálneho stroja, v ktorej je fungujúci RDP server s vsock XRDP už predinštalovaný, s inými distribúciami je to čoraz menej jednoznačné — autor tohto príspevku úspešne zapol ESM vo Fedore. Tu aktivujeme Enhanced Session Mode pre virtuálny stroj s Arch Linuxom.

Inštalácia integračných služieb

Tu je to viac-menej jednoduché, stačí nainštalovať balík hyperv z repozitára community:

% sudo pacman -S hyperv

Povolíme služby VSS, výmenu metadát a súborov:

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

Inštalácia XRDP

Repozitár linux-vm-tools na GitHub poskytuje skripty, ktoré automatizujú proces inštalácie a nastavenia XRDP pre Arch Linux a Ubuntu. Nainštalujeme Git, ak ešte nie je nainštalovaný, spolu s kompilátorom a ďalším softvérom pre ručné zostavy, potom sklonujeme repozitár:

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

K momentu písania tohto článku je najnovšou verziou XRDP, ktorá sa inštaluje pomocou skriptu makepkg.sh, navrhnutou v repozitári, verzia 0.9.11, v ktorej je pokazené spracovanie vsock://-adresa, pretože bude potrebné nainštalovať XRDP z Git a k nemu ovládač Xorg ručne z AUR. Patch pre XRDP, ktorý sa navrhuje v AUR, je tiež mierne zastaraný, takže bude potrebné upraviť PKGBUILD a patch ručne.

Naklonujeme repozitáre s PKGBUILD-ami z AUR (túto procedúru zvyčajne automatizujú programy ako yay, ale autor celú túto procedúru vykonal na čistej sústave):

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

Najprv nainštalujeme samotný XRDP. Otvoríme súbor PKGBUILD v akomkoľvek textovom editore.

Upravíme parametre zostavenia. PKGBUILD pre zostavenie XRDP z Gitu nezahŕňa podporu vsock pri zostavení, takže ju musíme pridať sami:

 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
 }

V patchi arch-config.diff, ktorý upravuje jednotky a spúšťacie skripty XRDP pre cesty k súborom používaným v Arch Linux, je zahrnutý aj patch pre skript instfiles/xrdp.sh, ktorý bol k momentu písania článku odstránený z dodávky XRDP, preto bude potrebné patch upraviť ručne:

  [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

Zostavíme a nainštalujeme balík príkazom % makepkg --skipchecksums -si (príznak --skipchecksums je potrebný na vypnutie kontroly kontrolných súm pôvodných súborov, pretože sme ich upravili ručne).

Prejdeme do adresára xorgxrdp-devel-git, po čom jednoducho zostavíme balík príkazom % makepkg -si.

Prejdeme do adresára linux-vm-tools/arch a spustíme skript install-config.sh, ktorý nastavuje konfigurácie XRDP, PolicyKit a PAM:

% sudo ./install-config.sh

Skript nastavuje zastarané nastavenie use_vsock, ktoré je ignorované od verzie 0.9.11, takže upravíme konfiguračný súbor /etc/xrdp/xrdp.ini ručne:

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

 ; 'port' vyššie by sa mal pripojiť cez vsock namiesto tcp
 ; používajte to len s číslom samostatne v porte vyššie
 ; uprednostnite použitie vsock://: vyššie
-use_vsock=true
+;use_vsock=true

 ; regulujte, či sa počúvací socket používa s voľbou socket tcp_nodelay

Pridáme do súboru ~/ .xinitrc spustenie preferovaného správcu okien / prostredia pracovnej plochy, ktorý sa spustí pri štarte X-servera:

% echo "exec i3" > ~/ .xinitrc

Vypneme virtuálny stroj. Aktivujeme transport vsock pre virtuálny stroj spustením nasledujúceho príkazu v PowerShell ako správca:

PS Admin > Set-VM -VMName NÁZOV_STROJA -EnhancedSessionTransportType HvSocket

Znovu zapneme virtuálny stroj.

Pripojenie

Ak sa po spustení systému spustí služba XRDP, aplikácia vmconnect to rozpozná a v ponuke sa objaví voľba Zobraziť -> Vylepšená relácia. Pri výbere tejto možnosti nám ponúkne nastaviť rozlíšenie obrazovky, a na karte Miestne zdroje v otvorenom dialógu bude možné vybrať zariadenia prenášané do RDP relácie.

Aktivujeme Enhanced Session Mode pre hostiteľov Arch Linux v Hyper-V
Aktivujeme Enhanced Session Mode pre hostiteľov Arch Linux v Hyper-V

Pripojíme sa. Uvidíme prihlasovacie okno XRDP:

Aktivujeme Enhanced Session Mode pre hostiteľov Arch Linux v Hyper-V

Zadáme svoje používateľské meno a heslo.

Použitie

Výhody týchto manipulácií sú zrejmé: relácia RDP funguje oveľa plynulejšie ako pri práci s virtuálnym displejom bez Vylepšenej relácie. Prenášané disky do VM cez RDP sú dostupné v adresári ${HOME}/shared-drives:

Aktivujeme Enhanced Session Mode pre hostiteľov Arch Linux v Hyper-V

Schránka funguje bez problémov. Prenos tlačiarní dovnútra nie je možný, nie len, že sa to nepodporuje, ale aj má za následok porušenie prenosu diskov. Taktiež nefunguje zvuk, ale autor to ani nepotreboval. Aby sa zachytávali klávesové skratky ako Alt+Tab, je potrebné nafúknuť vmconnect na celú obrazovku.

Ak z akýchkoľvek dôvodov existuje želanie používať namiesto aplikácie vmconnect integrovaný RDP klient Windows alebo sa pripojiť k tomuto stroju z iného stroja, je potrebné zmeniť v súbore /etc/xrdp/xrdp.ini port na tcp://:3389. Ak je virtuálny stroj pripojený k Default Switch a dostáva sieťové nastavenia cez DHCP, je možné sa k nemu z hostiteľa pripojiť na adrese názov_stroja.mshome.net. Do TTY sa dá vstúpiť iba z aplikácie vmconnect po vypnutí Enhanced Mode.

Použité zdroje:

  1. Hyper-V — Arch Wiki
  2. Chybové reporty na GitHub: 1, 2

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster