
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 — 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 jest już wstępnie zainstalowany, to w przypadku innych dystrybucji sytuacja jest mniej jednoznaczna — autorowi 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 hypervWłączymy usługi VSS, wymiany i plików:
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; doneInstalacja XRDP
Repozytorium 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/archW momencie pisania tego artykułu najnowsza wersja XRDP, która jest instalowana za pomocą skryptu makepkg.sh, zaproponowanego w repozytorium, to 0.9.11, 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 , 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.gitNajpierw 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 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 -0600Zbudujemy 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.shSkrypt 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_nodelayDodamy do pliku ~/.xinitrc uruchomienie preferowanego menedżera okien / środowiska pulpitu, które będzie uruchamiane przy starcie serwera X:
% echo "exec i3" > ~/.xinitrcWyłą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 HvSocketWłą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.


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

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:

Schowek działa poprawnie. Przesyłanie drukarek nie jest możliwe, nie tylko nie jest to wspierane, ale i . 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:
- Zgłoszenia błędów na GitHubie: ,
Źródło: habr.com
