Włączamy tryb Enhanced Session Mode dla gości Arch Linux w Hyper-V

Włączamy tryb Enhanced Session Mode dla gości Arch Linux w Hyper-V

Korzystanie z maszyn wirtualnych na Linuxie w Hyper-V z pudełka jest nieco mniej komfortowe niż w przypadku gościnnych maszyn Windows. Powodem jest to, że Hyper-V nie był pierwotnie przeznaczony do użytkowania desktoptowego; nie można po prostu zainstalować pakietu dodatków gości i zyskać działające przyspieszenie graficzne, schowek, wspólne katalogi i inne przyjemności, jak to ma miejsce w VirtualBox.

Hyper-V sam zapewnia kilka usług integracji — w ten sposób goście mogą korzystać z usługi kopii zapasowej (VSS) hosta, można wysłać sygnał wyłączenia do gości, goście mogą synchronizować czas systemowy z hostem, a z poziomu hosta możliwa jest wymiana plików z maszyną wirtualną (Copy-VMFile w PowerShell). Dla niektórych systemów operacyjnych gości, w tym oczywiście Windows, w aplikacji Virtual Machine Connection (vmconnect.exe) dostępny jest tryb ulepszonej sesji, działający w protokole RDP, umożliwiający przekazywanie urządzeń dyskowych i drukarek do maszyny wirtualnej, a także korzystanie ze wspólnego schowka.

Tryb ulepszonej sesji działa w Windows w Hyper-V od razu po instalacji. W przypadku gości na Linuxie należy zainstalować serwer RDP obsługujący vsock (specjalna przestrzeń adresowa wirtualnej sieci w Linuxie przeznaczona do komunikacji z hipernadzorcą). Jeśli dla Ubuntu w aplikacji VMCreate, która jest dostarczana z Hyper-V w wersjach desktopowych Windows, dostępny jest specjalnie przygotowany szablon maszyny wirtualnej, w którym działający z vsock serwer RDP XRDP jest już wstępnie zainstalowany, to w przypadku innych dystrybucji sytuacja jest mniej jednoznaczna — autorowi tego wpisu udało się uruchomić ESM w Fedory. Tutaj aktywujemy tryb ulepszonej sesji dla maszyny wirtualnej z Arch Linux.

Instalacja usług integracyjnych

Tutaj wszystko jest mniej więcej proste, wystarczy zainstalować pakiet hyperv z repozytorium community:

% sudo pacman -S hyperv

Włączymy usługi VSS, wymiany metadanych i plików:

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

Instalacja XRDP

Repozytorium linux-vm-tools na GitHubie dostarcza skrypty automatyzujące proces instalacji i konfiguracji XRDP dla Arch Linux i Ubuntu. Zainstalujmy Git, jeśli jeszcze nie jest zainstalowany, razem z kompilatorem i innym oprogramowaniem do ręcznych kompilacji, a następnie sklonujemy repozytorium:

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

W momencie pisania tego artykułu najnowsza wersja XRDP, która jest instalowana za pomocą skryptu makepkg.sh, zaproponowanego w repozytorium, to 0.9.11, w której występuje błąd parsowania vsock://-adresów, dlatego trzeba będzie zainstalować XRDP z Gita oraz sterownik Xorg z AUR ręcznie. Łatka do XRDP proponowana w AUR jest również nieco przestarzała, więc trzeba będzie edytować PKGBUILD i łatkę ręcznie.

Sklonujemy repozytoria z PKGBUILD-ami z AUR (zazwyczaj ten proces wraz ze kompilacją automatyzują programy takie jak yay, ale autor przeprowadzał cały ten proces na czystym systemie):

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

Najpierw zainstalujemy sam XRDP. Otworzymy plik pliki PKGBUILD dowolnym edytorem tekstowym.

Edytujemy parametry kompilacji. PKGBUILD do kompilacji XRDP z Gita nie uwzględnia wsparcia dla vsock podczas kompilacji, więc dodamy je samodzielnie:

 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
 }

W łatce arch-config.diff, korygującej jednostki i skrypty uruchamiania XRDP pod kątem ścieżek do plików używanych w Arch Linux, zawiera także łatkę do skryptu instfiles/xrdp.sh, który w momencie pisania tego artykułu został usunięty z dostawy XRDP, dlatego łatkę trzeba będzie edytować ręcznie:

  [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

Zbudujemy i zainstalujemy pakiet poleceniem % makepkg --skipchecksums -si (klucz --skipchecksums jest potrzebny do wyłączenia weryfikacji sum kontrolnych plików źródłowych, ponieważ edytowaliśmy je ręcznie).

Przejdziemy do katalogu xorgxrdp-devel-git, po czym po prostu zbudujemy pakiet poleceniem % makepkg -si.

Przejdziemy do katalogu linux-vm-tools/arch i uruchomimy skrypt install-config.sh, instalujący ustawienia XRDP, PolicyKit i PAM:

% sudo ./install-config.sh

Skrypt instaluje przestarzałą konfigurację use_vsock, która jest ignorowana od wersji 0.9.11, więc edytujemy plik konfiguracyjny /etc/xrdp/xrdp.ini ręcznie:

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

 ; 'port' powyżej powinien być połączony z vsock zamiast tcp
 ; używaj tego tylko z samą liczbą w powyższym porcie
 ; preferuj użycie vsock://: powyżej
-use_vsock=true
+;use_vsock=true

 ; reguluj, czy gniazdo nasłuchujące używa opcji gniazda tcp_nodelay

Dodamy do pliku ~/.xinitrc uruchomienie preferowanego menedżera okien / środowiska pulpitu, które będzie uruchamiane przy starcie serwera X:

% echo "exec i3" > ~/.xinitrc

Wyłączymy maszynę wirtualną. Aktywujemy transport vsock dla maszyny wirtualnej, wykonując następujące polecenie w PowerShell jako administrator:

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

Włączymy maszynę wirtualną ponownie.

Podłączenie

Gdy usługa XRDP uruchomi się po starcie systemu, aplikacja vmconnect to rozpozna i w menu pojawi się opcja Zobacz -> Zwiększona sesja. Po wybraniu tej opcji zaproponuje nam ustawić rozdzielczość ekranu, a na karcie Zasoby lokalne w otwartym dialogu będzie można wybrać urządzenia przesyłane do sesji RDP.

Włączamy tryb Enhanced Session Mode dla gości Arch Linux w Hyper-V
Włączamy tryb Enhanced Session Mode dla gości Arch Linux w Hyper-V

Połączymy się. Zobaczymy okno logowania XRDP:

Włączamy tryb Enhanced Session Mode dla gości Arch Linux w Hyper-V

Wprowadzimy swoją nazwę użytkownika i hasło.

Użycie

Korzyści z tych działań są zauważalne: sesja RDP działa znacznie sprawniej niż przy używaniu wirtualnego wyświetlacza bez Zwiększonej Sesji. Przesyłane do VM przez RDP dyski są dostępne w katalogu ${HOME}/shared-drives:

Włączamy tryb Enhanced Session Mode dla gości Arch Linux w Hyper-V

Schowek działa poprawnie. Przesyłanie drukarek nie jest możliwe, nie tylko nie jest to wspierane, ale i łamać przesyłanie dysków. Również dźwięk nie działa, ale autorowi to nie było potrzebne. Aby uchwycić kombinacje klawiszy, takie jak Alt+Tab, należy wyświetlić vmconnect na pełnym ekranie.

Jeśli z jakiegoś powodu jest chęć użycia zamiast aplikacji vmconnect wbudowanego w system Windows klienta RDP lub na przykład połączenia z tą maszyną z innej maszyny, należy zmienić w pliku /etc/xrdp/xrdp.ini port na tcp://:3389. Jeśli maszyna wirtualna jest podłączona do Default Switch i uzyskuje ustawienia sieciowe przez DHCP, można się z nią połączyć z hosta pod adresem nazwa_maszyny.mshome.net. Wejście do TTY jest możliwe tylko z aplikacji vmconnect, wyłączając tryb zwiększony.

Wykorzystane źródła:

  1. Hyper-V — Arch Wiki
  2. Zgłoszenia błędów na GitHubie: 1, 2

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster