
Korzystanie z maszyn wirtualnych na Linux w Hyper-V od razu po wyjęciu z pudełka jest nieco mniej komfortowe niż w przypadku gościa Windows-maszyn. Powodem tego jest fakt, że Hyper-V nie został pierwotnie zaprojektowany do użytku na komputerach stacjonarnych; nie można po prostu zainstalować pakietu Guest Additions i uzyskać działającej akceleracji grafiki, schowka, katalogów współdzielonych i innych udogodnień, jak w przypadku VirtualBox.
Sama funkcja Hyper-V zapewnia - 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 PowerShell). W przypadku niektórych gościnnych systemów operacyjnych, które oczywiście obejmują Windows, w aplikacji Połączenie z maszyną wirtualną (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.
Tryb ulepszonej sesji działa od razu po wyjęciu z pudełka Windows w Hyper-V natychmiast po instalacji. Z gośćmi na Linux musisz zainstalować serwer RDP obsługujący vsock (specjalną wirtualną przestrzeń adresową sieci) Linux, przeznaczony do komunikacji z hiperwizorem). Jeśli dla Ubuntu w aplikacji VMCreate, która jest dostarczana z wersjami Hyper-V na komputerach stacjonarnych Windowsistnieje specjalnie przygotowany szablon maszyny wirtualnej, w którym serwer RDP współpracuje z vsock już preinstalowany, to przy innych dystrybucjach jest to coraz mniej jasne - na przykład autor Udało nam się włączyć ESM w Fedorze. Tutaj również aktywujemy tryb Enhanced Session Mode 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 hypervWłącz usługi VSS, wymień i pliki:
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; doneInstalacja XRDP
magazyn udostępnia skrypty na GitHubie, które automatyzują proces instalacji i konfiguracji XRDP dla Arch Linux и UbuntuZainstalujmy Gita, jeśli jeszcze nie jest zainstalowany, a także kompilator i inne oprogramowanie do ręcznych kompilacji, a następnie sklonujmy repozytorium:
% sudo pacman -S git base-devel
% git clone https://github.com/microsoft/linux-vm-tools.git
% cd linux-vm-tools/archW chwili pisania tego tekstu najnowsza wersja XRDP, która jest instalowana przez skrypt makepkg.shproponowana w repozytorium to 0.9.11, 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 , 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.gitNajpierw 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, jednostki rządzące i skrypty startowe XRDP w ścieżkach plików używanych w Arch Linux, zawiera poprawkę do skryptu instfiles/xrdp.sh, który w momencie pisania 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 -0600Zbuduj 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.shSkrypt 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_nodelayDodaj do pliku ~/.xinitrc uruchomienie preferowanego menedżera okien/środowiska pulpitu, które zostanie wykonane po uruchomieniu serwera X:
% echo "exec i3" > ~/.xinitrcWyłą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 HvSocketWłą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 -> 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.


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

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:

Schowek działa dobrze. Nie można wrzucać drukarek do środka, to nie tylko nie jest obsługiwane, ale także . 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 jakiegokolwiek powodu chcesz użyć wbudowanej aplikacji vmconnect zamiast Windows Jeśli chcesz nawiązać połączenie z tym komputerem z innego komputera, a następnie nawiązać połączenie z klientem RDP, konieczna będzie zmiana pliku /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:
- Raporty o błędach w GitHub: ,
Źródło: www.habr.com
