Włącz rozszerzony tryb sesji dla gości Arch Linux w Hyper-V

Włącz rozszerzony tryb sesji dla gości Arch Linux w Hyper-V

Korzystanie z maszyn wirtualnych z systemem Linux w Hyper-V po wyjęciu z pudełka jest nieco mniej wygodne niż w przypadku maszyn-gości z systemem Windows. Powodem tego jest to, że Hyper-V nie był pierwotnie przeznaczony do użytku na komputerach stacjonarnych; nie możesz po prostu zainstalować pakietu dodatków dla gości i uzyskać działającą akcelerację grafiki, schowek, współdzielone katalogi i inne radości życia, jak to się dzieje w VirtualBox.

Sama funkcja Hyper-V zapewnia wiele usług integracyjnych - więc goście mogą korzystać z usługi kopiowania w tle (VSS) hosta, goście mogą wysłać sygnał zamknięcia, goście mogą synchronizować czas systemowy z hostem wirtualizacji, pliki mogą być wymieniane z maszyną wirtualną z hosta (Copy-VMFile w PowerShellu). W przypadku niektórych systemów operacyjnych gościa, w tym oczywiście systemu Windows, w aplikacji Virtual Machine Connection (vmconnect.exe) Dostępny jest tryb Enhanced Session Mode, który działa poprzez protokół RDP i umożliwia przekazywanie urządzeń dyskowych i drukarek do maszyny wirtualnej, a także korzystanie ze współdzielonego schowka.

Rozszerzony tryb sesji działa od razu po instalacji w systemie Windows w Hyper-V. W przypadku gości w systemie Linux należy zainstalować serwer RDP obsługujący vsock (specjalną wirtualną przestrzeń adresową sieci w systemie Linux, przeznaczoną do komunikacji z hiperwizorem). Jeśli dla Ubuntu, aplikacja VMCreate, która jest dostarczana z Hyper-V w komputerowych wersjach systemu Windows, ma specjalnie przygotowany szablon maszyny wirtualnej, w której serwer RDP działający z vsock XRDP już preinstalowany, to przy innych dystrybucjach jest to coraz mniej jasne - na przykład autor ten post okazało się, że włącza ESM w Fedorze. Tutaj również włączamy tryb rozszerzonej sesji dla maszyny wirtualnej Arch Linux.

Instalowanie usług integracyjnych

Tutaj wszystko jest mniej więcej proste, wystarczy zainstalować pakiet hyperv z repozytorium społeczności:

% sudo pacman -S hyperv

Włącz usługi VSS, wymień metadane i pliki:

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

Instalacja XRDP

magazyn narzędzia linux-vm na GitHub udostępnia skrypty, które automatyzują proces instalacji i konfiguracji XRDP dla Arch Linux i Ubuntu. Zainstaluj Git, jeśli nie jest jeszcze zainstalowany, wraz z kompilatorem i innym oprogramowaniem do ręcznych kompilacji, a następnie sklonuj repozytorium:

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

W chwili pisania tego tekstu najnowsza wersja XRDP, która jest instalowana przez skrypt makepkg.shproponowana w repozytorium to 0.9.11, w którym parsowanie jest zepsute vsock://-addresses, więc musisz ręcznie zainstalować XRDP z Git i sterownik Xorg z AUR. Łatka dla XRDP oferowana w AUR jest również nieco przestarzała, więc będziesz musiał ręcznie edytować PKGBUILD i łatkę.

Klonujemy repozytoria za pomocą PKGBUILD z AUR (zwykle ta procedura wraz z montażem jest automatyzowana przez programy takie jak yay, ale autor wykonał całą procedurę na czystym systemie):

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

Najpierw zainstalujmy sam XRDP. Otwórzmy plik PKGBUILD dowolny edytor tekstu.

Edytujmy parametry kompilacji. PKGBUILD do budowania XRDP z Git nie zawiera obsługi vsock w kompilacji, więc włączmy to 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
 }

W patchu arch-config.diff, który edytuje jednostki i skrypty startowe XRDP pod ścieżkami do plików używanych w Arch Linux, zawiera między innymi łatkę do skryptu instfiles/xrdp.sh, który w momencie pisania zostało usunięte z dystrybucji XRDP, więc patch 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

Zbuduj i zainstaluj pakiet za pomocą polecenia % makepkg --skipchecksums -si (klucz --skipchecksums jest potrzebne do wyłączenia weryfikacji sumy kontrolnej plików źródłowych, ponieważ edytowaliśmy je ręcznie).

Przejdźmy do katalogu xorgxrdp-devel-git, po czym po prostu budujemy pakiet za pomocą polecenia % makepkg -si.

Przejdźmy do katalogu linux-vm-tools/arch i uruchom skrypt install-config.sh, który ustawia ustawienia XRDP, PolicyKit i PAM:

% sudo ./install-config.sh

Skrypt instaluje starsze ustawienia use_vsock, który jest ignorowany od wersji 0.9.11, więc edytujmy plik konfiguracyjny /etc/xrdp/xrdp.ini ręcznie:

 ;   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

Dodaj do pliku ~/.xinitrc uruchomienie preferowanego menedżera okien/środowiska pulpitu, które zostanie wykonane po uruchomieniu serwera X:

% echo "exec i3" > ~/.xinitrc

Wyłączmy maszynę wirtualną. Włącz transport vsock dla maszyny wirtualnej, uruchamiając następujące polecenie w programie PowerShell jako administrator:

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

Włączmy ponownie maszynę wirtualną.

Połączenie

Gdy tylko usługa XRDP zostanie uruchomiona po uruchomieniu systemu, aplikacja vmconnect to ustali i pozycja menu stanie się dostępna. Zobacz i wysłuchaj -> Ulepszona sesja. Po wybraniu tego elementu zostaniemy poproszeni o ustawienie rozdzielczości ekranu i na zakładce Zasoby lokalne w oknie dialogowym, które zostanie otwarte, możesz wybrać urządzenia przekazywane w ramach sesji RDP.

Włącz rozszerzony tryb sesji dla gości Arch Linux w Hyper-V
Włącz rozszerzony tryb sesji dla gości Arch Linux w Hyper-V

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

Włącz rozszerzony tryb sesji dla gości Arch Linux w Hyper-V

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

Używać

Zysk z tych manipulacji jest zauważalny: sesja RDP działa znacznie bardziej responsywnie niż podczas pracy z wirtualnym wyświetlaczem bez Enhanced Session. Dyski przekazywane wewnątrz maszyny wirtualnej za pośrednictwem protokołu RDP są dostępne w katalogu ${HOME}/shared-drives:

Włącz rozszerzony tryb sesji dla gości Arch Linux w Hyper-V

Schowek działa dobrze. Nie można wrzucać drukarek do środka, to nie tylko nie jest obsługiwane, ale także przerywa przekazywanie dysku. Dźwięk również nie działa, ale autor go nie potrzebował. Aby przechwycić skróty klawiaturowe, takie jak Alt + Tab, musisz rozwinąć vmconnect do pełnego ekranu.

Jeśli z jakiegoś powodu istnieje chęć użycia klienta RDP wbudowanego w Windows zamiast aplikacji vmconnect lub np. /etc/xrdp/xrdp.ini port na tcp://:3389. Jeśli maszyna wirtualna jest podłączona do przełącznika domyślnego i otrzymuje ustawienia sieciowe przez DHCP, możesz połączyć się z nią z hosta pod adresem название_машины.mshome.net. Możesz zalogować się do TTY tylko z aplikacji vmconnect, wyłączając tryb rozszerzony.

Wykorzystane źródła:

  1. Hyper-V Arch Wiki
  2. Raporty o błędach w GitHub: 1, 2

Źródło: www.habr.com

Dodaj komentarz