
Χρήση εικονικών μηχανών σε Linux στο Hyper-V από την πρώτη στιγμή είναι μια ελαφρώς λιγότερο άνετη εμπειρία από ό,τι με το guest Windows-машинами. Причиной тому является то, что Hyper-V все же изначально не предназначался для десктопного пользования; нельзя просто взять, поставить пакет гостевых дополнений и получить работоспособное графическое ускорение, буфер обмена, общие директории и другие радости жизни, как это происходит в VirtualBox.
Το ίδιο το Hyper-V παρέχει - έτσι, οι επισκέπτες μπορούν να χρησιμοποιήσουν την υπηρεσία σκιώδους αντιγραφής (VSS) του κεντρικού υπολογιστή, οι επισκέπτες μπορούν να στείλουν ένα σήμα τερματισμού λειτουργίας, οι επισκέπτες μπορούν να συγχρονίσουν την ώρα του συστήματος με τον κεντρικό υπολογιστή εικονικοποίησης, τα αρχεία μπορούν να ανταλλάσσονται με την εικονική μηχανή από τον κεντρικό υπολογιστή (Copy-VMFile в PowerShell). Для некоторых гостевых операционных систем, в числе которых, конечно, находится и Windows, в приложении Virtual Machine Connection (vmconnect.exe) Διατίθεται η βελτιωμένη λειτουργία περιόδου λειτουργίας, η οποία λειτουργεί μέσω του πρωτοκόλλου RDP και σας επιτρέπει να προωθείτε συσκευές δίσκου και εκτυπωτές στην εικονική μηχανή, καθώς και να χρησιμοποιείτε το κοινόχρηστο πρόχειρο.
Enhanced Session Mode из коробки работает в Windows в Hyper-V сразу после установки. С гостями на Linux нужно устанавливать RDP-сервер, поддерживающий vsock (специальное виртуальное сетевое адресное пространство в Linux, предназначенное для коммуникации с гипервизором). Если для Ubuntu в приложении VMCreate, идущим с Hyper-V на настольных редакциях Windows, есть специальный подготовленный шаблон виртуальной машины, в котором работающий с vsock RDP-сервер είναι ήδη προεγκατεστημένο, τότε με άλλες διανομές είναι όλο και λιγότερο σαφές - για παράδειγμα, ο συγγραφέας получилось включить ESM в Fedora. Здесь же мы активируем Enhanced Session Mode для виртуальной машины с Arch Linux.
Εγκατάσταση υπηρεσιών ολοκλήρωσης
Όλα είναι λίγο πολύ απλά εδώ, απλά πρέπει να εγκαταστήσουμε το πακέτο hyperv από το αποθετήριο της κοινότητας:
% sudo pacman -S hypervΕνεργοποίηση υπηρεσιών VSS, ανταλλαγή και αρχεία:
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; doneΕγκατάσταση XRDP
αποθήκη на GitHub предоставляет скрипты, автоматизирующие процесс установки и настройки XRDP, для Arch Linux и Ubuntu. Установим Git, если он еще не установлен, вместе с компилятором и другим софтом для ручных сборок, после чего склонируем репозиторий:
% sudo pacman -S git base-devel
% git clone https://github.com/microsoft/linux-vm-tools.git
% cd linux-vm-tools/archΤη στιγμή που γράφονται αυτές οι γραμμές, η πιο πρόσφατη έκδοση του XRDP, η οποία εγκαθίσταται από το σενάριο makepkg.shπου προτείνεται στο αποθετήριο είναι 0.9.11, vsock://-διευθύνσεις, επομένως πρέπει να εγκαταστήσετε χειροκίνητα το XRDP από το Git και το πρόγραμμα οδήγησης Xorg για αυτό από το AUR. Η ενημερωμένη έκδοση κώδικα για XRDP που προσφέρεται στο AUR είναι επίσης ελαφρώς ξεπερασμένη, επομένως θα πρέπει να επεξεργαστείτε το PKGBUILD και την ενημερωμένη έκδοση κώδικα με μη αυτόματο τρόπο.
Κλωνοποιούμε τα αποθετήρια με PKGBUILD από το AUR (συνήθως αυτή η διαδικασία, μαζί με τη συναρμολόγηση, αυτοματοποιείται από προγράμματα όπως , αλλά ο συγγραφέας έκανε όλη αυτή τη διαδικασία σε ένα καθαρό σύστημα):
% git clone https://aur.archlinux.org/xrdp-devel-git.git
% git clone https://aur.archlinux.org/xorgxrdp-devel-git.gitΑς εγκαταστήσουμε πρώτα το ίδιο το XRDP. Ας ανοίξουμε το αρχείο PKGBUILD οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου.
Ας επεξεργαστούμε τις παραμέτρους κατασκευής. Το PKGBUILD για τη δημιουργία XRDP από το Git δεν περιλαμβάνει υποστήριξη vsock στην κατασκευή, οπότε ας το ενεργοποιήσουμε μόνοι μας:
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
}Σε ένα έμπλαστρο arch-config.diff, правящем юниты и скрипты запуска XRDP под пути к файлам, используемым в Arch Linux, содержится в том числе патч к скрипту instfiles/xrdp.sh, το οποίο τη στιγμή της συγγραφής από τη διανομή XRDP, επομένως η ενημέρωση κώδικα θα πρέπει να επεξεργαστεί με μη αυτόματο τρόπο:
[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Δημιουργήστε και εγκαταστήστε το πακέτο με την εντολή % makepkg --skipchecksums -si (κλειδί --skipchecksums απαιτείται για την απενεργοποίηση της επαλήθευσης αθροίσματος ελέγχου των αρχείων προέλευσης, καθώς τα επεξεργαστήκαμε με μη αυτόματο τρόπο).
Ας πάμε στον κατάλογο xorgxrdp-devel-git, μετά το οποίο απλά χτίζουμε το πακέτο με την εντολή % makepkg -si.
Ας πάμε στον κατάλογο linux-vm-tools/arch και τρέξτε το σενάριο install-config.sh, το οποίο ορίζει τις ρυθμίσεις XRDP, PolicyKit και PAM:
% sudo ./install-config.shΡύθμιση παλαιού τύπου εγκαθιστά σενάριο use_vsock, το οποίο αγνοείται από την έκδοση 0.9.11, οπότε ας επεξεργαστούμε το αρχείο διαμόρφωσης /etc/xrdp/xrdp.ini χειροκίνητα:
; 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Προσθήκη στο αρχείο ~/.xinitrc εκκίνηση του προτιμώμενου περιβάλλοντος διαχείρισης παραθύρων/επιτραπέζιου υπολογιστή, το οποίο θα εκτελεστεί κατά την εκκίνηση του διακομιστή X:
% echo "exec i3" > ~/.xinitrcΑς απενεργοποιήσουμε την εικονική μηχανή. Ενεργοποιήστε τη μεταφορά vsock για το VM εκτελώντας την ακόλουθη εντολή στο PowerShell ως διαχειριστής:
PS Admin > Set-VM -VMName НАЗВАНИЕ_МАШИНЫ -EnhancedSessionTransportType HvSocketΑς ενεργοποιήσουμε ξανά την εικονική μηχανή.
Подключение
Μόλις ξεκινήσει η υπηρεσία XRDP μετά την εκκίνηση του συστήματος, η εφαρμογή vmconnect θα το καθορίσει και το στοιχείο μενού θα γίνει διαθέσιμο. Προβολή -> Βελτιωμένη συνεδρία. Όταν επιλέξετε αυτό το στοιχείο, θα μας ζητηθεί να ορίσουμε την ανάλυση οθόνης και στην καρτέλα Τοπικοί πόροι στο παράθυρο διαλόγου που ανοίγει, μπορείτε να επιλέξετε τις συσκευές που προωθούνται εντός της περιόδου λειτουργίας RDP.


Ας συνδεθούμε. Θα δούμε το παράθυρο σύνδεσης XRDP:

Εισαγάγετε το όνομα χρήστη και τον κωδικό πρόσβασής σας.
Χρήση
Το κέρδος από αυτούς τους χειρισμούς είναι αξιοσημείωτο: η συνεδρία RDP λειτουργεί πολύ πιο αποκριτικά από ό,τι όταν εργάζεστε με εικονική οθόνη χωρίς Ενισχυμένη περίοδο λειτουργίας. Οι δίσκοι που προωθούνται μέσα στο VM μέσω RDP είναι διαθέσιμοι στον κατάλογο ${HOME}/shared-drives:

Το πρόχειρο λειτουργεί καλά. Δεν μπορείτε να πετάξετε εκτυπωτές μέσα, αυτό όχι μόνο δεν υποστηρίζεται, αλλά και . Ο ήχος επίσης δεν λειτουργεί, αλλά ο συγγραφέας δεν τον χρειαζόταν. Για να καταγράψετε συντομεύσεις πληκτρολογίου όπως Alt + Tab, πρέπει να επεκτείνετε το vmconnect σε πλήρη οθόνη.
Если по каким-либо причинам есть желание использовать вместо приложения vmconnect встроенный в Windows RDP-клиент или, например, подключаться к этой машине из другой машины, то нужно будет поменять в файле /etc/xrdp/xrdp.ini port επί tcp://:3389. Εάν η εικονική μηχανή είναι συνδεδεμένη στον Προεπιλεγμένο διακόπτη και λαμβάνει ρυθμίσεις δικτύου μέσω DHCP, τότε μπορείτε να συνδεθείτε σε αυτήν από τον κεντρικό υπολογιστή στη διεύθυνση название_машины.mshome.net. Μπορείτε να συνδεθείτε στο TTY μόνο από την εφαρμογή vmconnect απενεργοποιώντας τη Βελτιωμένη λειτουργία.
Χρησιμοποιημένες πηγές:
- Αναφορές σφαλμάτων στο GitHub: ,
Πηγή: www.habr.com
