
Карыстанне віртуальнымі машынамі на Linux у Hyper-V са скрынкі некалькі менш камфортны занятак, чым з гасцёўнямі Windows-машинами. Причиной тому является то, что Hyper-V все же изначально не предназначался для десктопного пользования; нельзя просто взять, поставить пакет гостевых дополнений и получить работоспособное графическое ускорение, буфер обмена, общие директории и другие радости жизни, как это происходит в VirtualBox.
Hyper-V сам дае - так, госці могуць карыстацца службай ценявога капіявання (VSS) хаста, гасцям можна паслаць сігнал выключэння, госці могуць сінхранізаваць сістэмны час з хастом віртуалізацыі, з хаста магчымы абмен файламі з віртуальнай машынай (Copy-VMFile в PowerShell). Для некоторых гостевых операционных систем, в числе которых, конечно, находится и Windows, в приложении Virtual Machine Connection (vmconnect.exe) даступны Enhanced Session Mode, які працуе па пратаколе 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 з рэпазітара community:
% 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 для віртуальнай машыны, выканаўшы наступную каманду ў PowerShell ад адміністратара:
PS Admin > Set-VM -VMName НАЗВАНИЕ_МАШИНЫ -EnhancedSessionTransportType HvSocketУключым віртуальную машыну зноў.
падключэнне
Як толькі пасля запуску сістэмы запусціцца сэрвіс XRDP, прыкладанне vmconnect гэта вызначыць і ў меню стане даступны пункт выгляд -> Палепшаная сесія. Пры выбары гэтага пункта нам прапануюць усталяваць дазвол экрана, а на ўкладцы мясцовыя рэсурсы які адкрыўся дыялогу можна будзе абраць прылады, якія пракідваюцца ўнутр RDP-сесіі.


Падключымся. Убачым акно ўваходу XRDP:

Увядзём свае імя карыстальніка і пароль.
Выкарыстанне
Профіт ад гэтых маніпуляцый прыкметны: сесія RDP працуе нашмат спагадней, чым пры працы з віртуальным дысплеем без Enhanced Session. Пракінутыя ўнутр VM праз RDP дыскі даступныя ў дырэкторыі ${HOME}/shared-drives:

Буфер абмену працуе нармальна. Пракідваць друкаркі ўнутр нельга, гэта не толькі не падтрымліваецца, але і . Таксама не працуе гук, але аўтару гэта і не патрабавалася. Для таго, каб захопліваліся спалучэнні клавіш накшталт Alt+Tab, трэба разгортваць vmconnect на ўвесь экран.
Если по каким-либо причинам есть желание использовать вместо приложения vmconnect встроенный в Windows RDP-клиент или, например, подключаться к этой машине из другой машины, то нужно будет поменять в файле /etc/xrdp/xrdp.ini port на tcp://:3389. Калі віртуальная машына падлучаная да Default Switch і атрымлівае сеткавыя наладкі па DHCP, то падлучыцца да яе з хаста можна па адрасе название_машины.mshome.net. Увайсці ў TTY можна толькі з дадатку vmconnect, выключыўшы Enhanced Mode.
Выкарыстаныя крыніцы:
- Багрэпорты на GitHub: ,
Крыніца: habr.com
