Schakel verbeterde sessiemodus in voor Arch Linux-gasten in Hyper-V
Het out-of-the-box gebruiken van virtuele Linux-machines in Hyper-V is iets minder comfortabel dan met gast-Windows-machines. De reden hiervoor is dat Hyper-V oorspronkelijk niet bedoeld was voor desktopgebruik; je kunt niet zomaar doorgaan en het gasttoevoegingspakket installeren en werkbare grafische versnelling, klembord, gedeelde mappen en andere geneugten van het leven krijgen, zoals het gebeurt in VirtualBox.
Hyper-V biedt zelf meerdere integratiediensten - gasten kunnen dus gebruik maken van de schaduwkopieservice (VSS) van de host, gasten kunnen een uitschakelsignaal sturen, gasten kunnen de systeemtijd synchroniseren met de virtualisatiehost, bestanden kunnen worden uitgewisseld met de virtuele machine van de host (Copy-VMFile in PowerShell). Voor sommige gastbesturingssystemen, waaronder natuurlijk Windows, in de Virtual Machine Connection-toepassing (vmconnect.exe) Er is een verbeterde sessiemodus beschikbaar, die werkt via het RDP-protocol en waarmee u schijfapparaten en printers kunt doorsturen naar de virtuele machine en het gedeelde klembord kunt gebruiken.
Verbeterde sessiemodus werkt direct na installatie op Windows in Hyper-V. Met gasten op Linux moet u een RDP-server installeren die vsock ondersteunt (een speciale virtuele netwerkadresruimte in Linux die is ontworpen om te communiceren met de hypervisor). Als voor Ubuntu de VMCreate-toepassing die wordt geleverd met Hyper-V op desktopedities van Windows een speciaal voorbereid sjabloon voor virtuele machines heeft waarin een RDP-server draait met vsock xrdp al voorgeïnstalleerd, dan is het bij andere distributies steeds minder duidelijk - bijvoorbeeld de auteur deze post het bleek ESM in Fedora in te schakelen. Hier schakelen we ook de verbeterde sessiemodus in voor de Arch Linux virtuele machine.
Integratieservices installeren
Alles is hier min of meer eenvoudig, we hoeven alleen het pakket te installeren hyperv uit gemeenschapsrepository:
% sudo pacman -S hyperv
VSS-services inschakelen, uitwisselen metagegevens en bestanden:
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; done
XRDP-installatie
opslagplaats linux-vm-tools op GitHub biedt scripts die het proces van het installeren en configureren van XRDP voor Arch Linux en Ubuntu automatiseren. Installeer Git, als het nog niet is geïnstalleerd, samen met de compiler en andere software voor handmatige builds, en kloon vervolgens de repository:
Op het moment van schrijven is dit de meest recente versie van XRDP, die door het script wordt geïnstalleerd makepkg.shvoorgesteld in de repository is 0.9.11, waarin parsing is verbrokenvsock://-adressen, dus je moet XRDP handmatig installeren vanuit Git en de Xorg-driver ervoor vanuit AUR. De patch voor XRDP die wordt aangeboden in de AUR is ook enigszins verouderd, dus u zult de PKGBUILD en de patch handmatig moeten bewerken.
We klonen de repositories met PKGBUILD's van de AUR (meestal wordt deze procedure, samen met de montage, geautomatiseerd door programma's zoals yay, maar de auteur heeft deze hele procedure op een schoon systeem uitgevoerd):
Laten we eerst XRDP zelf installeren. Laten we het bestand openen PKGBUILD elke tekstverwerker.
Laten we de buildparameters bewerken. De PKGBUILD voor het bouwen van XRDP vanuit Git bevat geen vsock-ondersteuning in de build, dus laten we het zelf inschakelen:
Op een pleister arch-config.diff, dat eenheden en XRDP-opstartscripts bewerkt onder de paden naar bestanden die in Arch Linux worden gebruikt, bevat onder andere een patch voor het script instfiles/xrdp.sh, die op het moment van schrijven was verwijderd van de XRDP-distributie, dus de patch moet handmatig worden bewerkt:
Bouw en installeer het pakket met de opdracht % makepkg --skipchecksums -si (sleutel --skipchecksums is nodig om controlesomverificatie van bronbestanden uit te schakelen, omdat we ze handmatig hebben bewerkt).
Laten we naar de directory gaan xorgxrdp-devel-git, waarna we het pakket eenvoudig bouwen met het commando % makepkg -si.
Laten we naar de directory gaan linux-vm-tools/arch en voer het script uit install-config.sh, waarmee XRDP-, PolicyKit- en PAM-instellingen worden ingesteld:
% sudo ./install-config.sh
Script installeert verouderde instelling use_vsock, die wordt genegeerd sinds versie 0.9.11, dus laten we het configuratiebestand bewerken /etc/xrdp/xrdp.ini handmatig:
; 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
Toevoegen aan bestand ~/.xinitrc het starten van uw favoriete windowmanager/desktopomgeving, die wordt uitgevoerd wanneer de X-server wordt gestart:
% echo "exec i3" > ~/.xinitrc
Laten we de virtuele machine uitschakelen. Schakel het vsock-transport voor de virtuele machine in door de volgende opdracht uit te voeren in PowerShell als beheerder:
Zodra de XRDP-service start nadat het systeem is gestart, zal de vmconnect-applicatie dit bepalen en komt het menu-item beschikbaar. Bekijk -> Uitgebreide sessie. Wanneer u dit item selecteert, wordt ons gevraagd om de schermresolutie in te stellen en op het tabblad Lokale bronnen in het dialoogvenster dat wordt geopend, kunt u de apparaten selecteren die binnen de RDP-sessie worden doorgestuurd.
Laten we verbinding maken. We zullen het XRDP-inlogvenster zien:
Voer uw gebruikersnaam en wachtwoord in.
Gebruiken
De winst van deze manipulaties is merkbaar: de RDP-sessie werkt veel responsiever dan bij het werken met een virtueel beeldscherm zonder Enhanced Session. De schijven die via RDP binnen de VM worden doorgestuurd, zijn beschikbaar in de directory ${HOME}/shared-drives:
Het klembord werkt prima. Je kunt geen printers naar binnen gooien, dit wordt niet alleen niet ondersteund, maar ook verbreekt het doorsturen van schijven. Het geluid werkt ook niet, maar de auteur had het niet nodig. Om sneltoetsen zoals Alt + Tab vast te leggen, moet u vmconnect uitbreiden naar volledig scherm.
Als er om wat voor reden dan ook een wens is om de RDP-client die in Windows is ingebouwd te gebruiken in plaats van de vmconnect-applicatie of om bijvoorbeeld verbinding te maken met deze machine vanaf een andere machine, dan moet u het bestand wijzigen /etc/xrdp/xrdp.iniport op tcp://:3389. Als de virtuele machine is verbonden met de standaardswitch en netwerkinstellingen ontvangt via DHCP, dan kunt u er verbinding mee maken vanaf de host op название_машины.mshome.net. U kunt alleen inloggen op TTY vanuit de vmconnect-toepassing door de Verbeterde modus uit te schakelen.