
Het gebruik van virtuele machines op Linux in Hyper-V out-of-the-box is een iets minder comfortabele bezigheid dan met Windows-gastmachines. Dit komt omdat Hyper-V oorspronkelijk niet bedoeld was voor desktopgebruik; je kunt niet gewoon het gasttools-pakket installeren en een werkende grafische versnelling, klembord, gedeelde mappen en andere geneugten van het leven krijgen, zoals in VirtualBox.
Hyper-V biedt ā gasten kunnen gebruikmaken van de volume shadow copy service (VSS) van de host, gasten kunnen een uitschakelsignaal ontvangen, gasten kunnen het systeemklok met de virtualisatiehost synchroniseren, en bestanden kunnen van de host naar de virtuele machine worden overgedragen (Copy-VMFile in PowerShell). Voor sommige gast-besturingssystemen, waaronder Windows, is er in de Virtual Machine Connection (vmconnect.exe) Enhanced Session Mode beschikbaar, welke werkt via het RDP-protocol en het mogelijk maakt om schijfapparaten en printers naar de virtuele machine door te schakelen, evenals gebruik te maken van een gedeeld klembord.
Enhanced Session Mode werkt direct out-of-the-box in Windows op Hyper-V na installatie. Voor gasten op Linux moet een RDP-server worden geĆÆnstalleerd die vsock ondersteunt (een speciaal virtueel netwerkadresruimte in Linux bedoeld voor communicatie met de hypervisor). Als er voor Ubuntu een speciaal voorbereid sjabloon voor virtuele machines is in de VMCreate-applicatie met Hyper-V op desktopversies van Windows, waarin een werkende RDP-server voor vsock, al is voorgeĆÆnstalleerd, is het met andere distributies minder eenduidig ā zo heeft de auteur van ESM in Fedora weten in te schakelen. Hier activeren we Enhanced Session Mode voor de virtuele machine met Arch Linux.
Installatie van integratieservices
Dit is vrij eenvoudig, we hoeven alleen het pakket hyperv uit de community-repository te installeren:
% sudo pacman -S hypervWe schakelen de VSS-services, de uitwisseling van en bestanden in:
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; doneInstallatie van XRDP
Repository op GitHub biedt scripts die het installatie- en configuratieproces voor XRDP automatiseren voor Arch Linux en Ubuntu. Laten we Git installeren als dit nog niet is gebeurd, samen met de compiler en andere software voor handmatige builds, waarna we de repository moeten klonen:
% sudo pacman -S git base-devel
% git clone https://github.com/microsoft/linux-vm-tools.git
% cd linux-vm-tools/archOp het moment van schrijven is de nieuwste versie van XRDP, die wordt geĆÆnstalleerd via het script makepkg.sh, die in de repository is voorgesteld, versie 0.9.11, vsock://-adressen is verbroken, dus we moeten XRDP handmatig installeren vanuit Git en de Xorg-driver vanuit AUR. De patch voor XRDP, die wordt aangeboden in AUR, is ook een beetje verouderd, dus we moeten PKGBUILD en de patch handmatig bewerken.
Laten we de repositories met PKGBUILD's uit AUR klonen (normaal gesproken automatiseren programma's zoals , maar de auteur volbracht deze procedure op een schone systeem):
% git clone https://aur.archlinux.org/xrdp-devel-git.git
% git clone https://aur.archlinux.org/xorgxrdp-devel-git.gitWe installeren eerst XRDP zelf. We openen het bestand PKGBUILD met een teksteditor.
Laten we de bouwparameters bewerken. PKGBUILD voor het bouwen van XRDP vanuit Git bevat geen ondersteuning voor vsock bij het bouwen, dus laten we dit zelf inschakelen:
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
}In de patch arch-config.diff, die de units en opstartscripts van XRDP aanpast aan de paden naar de bestanden die in Arch Linux worden gebruikt, bevat ook een patch voor het script instfiles/xrdp.sh, dat op het moment van schrijven uit de levering van XRDP, dus de patch moet handmatig worden bewerkt:
[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 -0600Laten we het pakket verzamelen en installeren met het commando % makepkg --skipchecksums -si (de sleutel --skipchecksums is nodig om de controle van de checksum van de bronbestanden uit te schakelen, omdat we deze handmatig hebben bewerkt).
Laten we naar de directory gaan xorgxrdp-devel-git, waarna we eenvoudig het pakket verzamelen met het commando % makepkg -si.
Laten we naar de directory gaan linux-vm-tools/arch en het script uitvoeren install-config.sh, dat de instellingen voor XRDP, PolicyKit en PAM installeert:
% sudo ./install-config.shHet script installeert de verouderde instelling use_vsock, die wordt genegeerd sinds versie 0.9.11, dus laten we het configuratiebestand /etc/xrdp/xrdp.ini handmatig bewerken:
; port=vsock://:
-port=3389
+port=vsock://-1:3389
; 'port' hierboven moet worden verbonden met vsock in plaats van tcp
; gebruik dit alleen met een enkel cijfer in de bovenstaande poort
; geef de voorkeur aan gebruik vsock://: hierboven
-use_vsock=true
+;use_vsock=true
; regel of de luisterende socket de socketoptie tcp_nodelay gebruikttoevoegen: ~/.xinitrc start je favoriete windowmanager / desktopomgeving, die zal worden uitgevoerd bij het opstarten van de X-server:
% echo "exec i3" > ~/.xinitrcLaten we de virtuele machine uitschakelen. Activeer het vsock transport voor de virtuele machine door de volgende opdracht in PowerShell als administrator uit te voeren:
PS Admin > Set-VM -VMName NAAM_VAN_DE_MACHINE -EnhancedSessionTransportType HvSocketLaten we de virtuele machine opnieuw inschakelen.
Verbinden
Zodra de service XRDP is gestart na het opstarten van het systeem, zal de vmconnect-app dit detecteren en zal de optie Bekijk -> Verbeterde sessie. Bij het selecteren van deze optie worden we gevraagd om de schermresolutie in te stellen, en op het tabblad Lokale resources in het geopende dialoogvenster kunnen we de apparaten kiezen die naar de RDP-sessie worden doorgestuurd.


We maken verbinding. We zien het inlogvenster van XRDP:

Voer je gebruikersnaam en wachtwoord in.
Gebruik van
De voordelen van deze handelingen zijn duidelijk: de RDP-sessie is veel responsiever dan wanneer je werkt met een virtueel scherm zonder Verbeterde sessie. De via RDP naar de VM doorgestuurde schijven zijn beschikbaar in de directory ${HOME}/shared-drives:

Het klembord werkt goed. Printers kunnen niet doorgestuurd worden, dat wordt niet alleen niet ondersteund, maar het . Ook geluid werkt niet, maar daarvoor had de auteur geen behoefte. Om sneltoetscombinaties zoals Alt+Tab vast te leggen, moet je vmconnect op volledig scherm draaien.
Als je om welke redenen dan ook de ingebouwde RDP-client van Windows in plaats van de vmconnect-app wilt gebruiken of bijvoorbeeld verbinding wilt maken met deze machine vanaf een andere machine, moet je aanpassen in het bestand /etc/xrdp/xrdp.ini port en een werkende opdracht krijgen. tcp://:3389. Als de virtuele machine verbonden is met de Default Switch en netwerkconfiguraties via DHCP ontvangt, dan kan je er vanaf de host mee verbinden via het adres naam_van_de_machine.mshome.net. Je kunt in TTY alleen toegang krijgen tot de vmconnect-app door de Verbeterde modus uit te schakelen.
Gebruikte bronnen:
- Bugrapporten op GitHub: ,
Bron: habr.com
