Activer le mode de session amélioré pour les invités Arch Linux dans Hyper-V

KDPV


L'utilisation de machines virtuelles Linux dans Hyper-V prête à l'emploi est une expérience légèrement moins confortable qu'avec des machines Windows invitées. La raison en est qu'Hyper-V n'était toujours pas initialement prévu pour une utilisation sur le bureau; vous ne pouvez pas simplement prendre et installer un ensemble de modules complémentaires invités et obtenir une accélération graphique, un presse-papiers, des répertoires partagés et d'autres plaisirs de la vie, comme cela se produit dans VirtualBox.


Hyper-V lui-même fournit plusieurs services d'intégration - par exemple, les invités peuvent utiliser le service de Copy-VMFile (VSS) de l'hôte, les invités peuvent recevoir un signal d'arrêt, les invités peuvent synchroniser l'heure du système avec l'hôte de virtualisation, les fichiers peuvent être échangés avec la machine virtuelle de l'hôte ( Copy-VMFile in PowerShell). Pour certains systèmes d'exploitation invités, y compris, bien sûr, Windows, l'application Virtual Machine Connection ( vmconnect.exe ) vmconnect.exe mode de session amélioré, qui fonctionne via le protocole RDP et vous permet de transférer des périphériques de disque et des imprimantes vers la machine virtuelle, ainsi que d'utiliser le commun presse-papiers.


Le mode de session amélioré prêt à l'emploi s'exécute sur Windows dans Hyper-V immédiatement après l'installation. Avec les invités sous Linux, vous devez installer un serveur RDP qui prend en charge vsock (un espace d'adressage réseau virtuel spécial sous Linux conçu pour communiquer avec l'hyperviseur). Si pour Ubuntu dans l'application VMCreate fournie avec Hyper-V sur les éditions de bureau de Windows, il existe un modèle de machine virtuelle spécialement préparé dans lequel le serveur XRDP RDP fonctionnant avec vsock est déjà préinstallé, alors avec d'autres distributions, tout est de moins en moins clair - ainsi, l'auteur de cet article Il s'est avéré inclure ESM dans Fedora. Ici, nous activons le mode de session amélioré pour une machine virtuelle avec Arch Linux.


Installer les services d'intégration


Tout ici est plus ou moins simple, il suffit d'installer le paquet hyperv depuis le dépôt communautaire:


 % sudo pacman -S hyperv 

Activez les services VSS, de métadonnées et de partage de fichiers:


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

Installer XRDP


Le référentiel linux-vm-tools sur GitHub fournit des scripts qui automatisent l'installation et la configuration de XRDP pour Arch Linux et Ubuntu. Installez Git, s'il n'est pas déjà installé, avec le compilateur et d'autres logiciels pour les assemblages manuels, puis clonez le référentiel:


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

Au moment d'écrire ces lignes, la dernière version de XRDP, qui est installée par le script makepkg.sh proposé dans le référentiel, est 0.9.11, dans laquelle l'analyse des vsock:// est interrompue, vous devez donc installer XRDP à partir de Git et le pilote Xorg à partir d'AUR à la main. Le correctif XRDP proposé dans AUR est également légèrement obsolète, vous devrez donc modifier PKGBUILD et le correctif manuellement.


Nous clonons les référentiels avec des PKGBUILD d'AUR (généralement cette procédure avec l'assembly est automatisée par des programmes comme yay , mais l'auteur a fait toute cette procédure sur un système propre):


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

Installez d'abord XRDP lui-mĂŞme. Ouvrez le fichier PKGBUILD avec n'importe quel Ă©diteur de texte.


Modifiez les paramètres d'assemblage. PKGBUILD pour la construction de XRDP à partir de Git n'inclut pas le support vsock pendant l'assemblage, alors activez-le vous-même:


  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 } 

Le patch arch-config.diff , qui arch-config.diff unités et les scripts pour exécuter XRDP sous le chemin d'accès aux fichiers utilisés dans Arch Linux, contient un patch pour le instfiles/xrdp.sh , qui a été supprimé du package XRDP au moment de l'écriture, donc le patch devra être édité manuellement:


  [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 

Nous allons construire et installer le package avec la commande % makepkg --skipchecksums -si (le --skipchecksums nécessaire pour désactiver la vérification des sommes de contrôle des fichiers source, puisque nous les avons modifiés manuellement).


xorgxrdp-devel-git , puis collectez simplement le package avec la % makepkg -si .


Accédez au répertoire linux-vm-tools/arch et exécutez le script install-config.sh, qui installe les paramètres XRDP, PolicyKit et PAM:


 % sudo ./install-config.sh 

Le script définit le paramètre obsolète use_vsock , qui a été ignoré depuis la version 0.9.11, nous allons donc éditer le fichier de configuration /etc/xrdp/xrdp.ini manuellement:


  ; 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 

Ajoutez au ~/.xinitrc lancement de notre gestionnaire de fenêtres / environnement de bureau préféré, qui sera exécuté au démarrage du serveur X:


 % echo "exec i3" > ~/.xinitrc 

Éteignez la machine virtuelle. Nous activons le transport vsock pour la machine virtuelle en exécutant la commande suivante dans PowerShell en tant qu'administrateur:


 PS Admin > Set-VM -VMName _ -EnhancedSessionTransportType HvSocket 

Rallumez la machine virtuelle.


Connexion


Dès que le service XRDP démarre après le démarrage du système, l'application vmconnect le détermine et l'élément de menu Affichage -> Session améliorée devient disponible. Lors du choix de cet élément, il nous sera demandé de définir la résolution de l'écran, et sur l'onglet Ressources locales de la boîte de dialogue qui s'ouvre, il sera possible de sélectionner les périphériques qui sont transférés à l'intérieur de la session RDP.


Boîte de dialogue de résolution d'écran
Boîte de dialogue de sélection des ressources locales


Connecter Voir la fenĂŞtre de connexion XRDP:


FenĂŞtre de connexion XRDP


Saisissez votre nom d'utilisateur et votre mot de passe.


Utiliser


Le bénéfice de ces manipulations est perceptible: la session RDP est beaucoup plus réactive que lorsque vous travaillez avec un affichage virtuel sans session améliorée. Les VM lancées à l'intérieur via RDP sont disponibles dans le répertoire ${HOME}/shared-drives :


Le contenu du lecteur C jeté à l'intérieur de la machine virtuelle


Le presse-papiers fonctionne bien. Vous ne pouvez pas transférer d'imprimantes à l'intérieur, non seulement il n'est pas pris en charge, mais il interrompt également le transfert de disque . Le son ne fonctionne pas non plus, mais l'auteur n'en avait pas besoin. Afin de capturer les raccourcis clavier comme Alt + Tab, vous devez déployer vmconnect en plein écran.


Si, pour une raison quelconque, vous souhaitez utiliser le client RDP intégré à Windows au lieu de l'application vmconnect, ou, par exemple, vous connecter à cette machine à partir d'une autre machine, vous devrez remplacer le fichier de port /etc/xrdp/xrdp.ini par tcp://:3389 . Si la machine virtuelle est connectée au commutateur par défaut et reçoit les paramètres réseau via DHCP, vous pouvez vous y connecter depuis l'hôte sur _.mshome.net . Vous ne pouvez saisir de téléscripteur qu'à partir de l'application vmconnect en désactivant le mode amélioré.


Sources utilisées :


  1. Hyper-V - Arch Wiki
  2. Bagreport sur GitHub: 1 , 2

Source: https://habr.com/ru/post/fr482372/


All Articles