
Използването на виртуални машини с Linux в Hyper-V от кутията е малко по-малко комфортно, отколкото с хоствани Windows машини. Причината е, че Hyper-V не е предназначен първоначално за десктоп употреба; не може просто да инсталирате пакета с добавки за гости и да получите работещо графично ускорение, clipboard, споделени директории и други удобства, както е при VirtualBox.
Hyper-V сам предоставя — така хостваните машини могат да използват услугата за тенево копиране (VSS) на хоста, може да се изпрати сигнал за изключване на гостите, гостите могат да синхронизират системното време с хоста на виртуализацията, възможен е обмен на файлове от хоста с виртуалната машина (Copy-VMFile в PowerShell). За някои операционни системи на гости, сред които, разбира се, е и Windows, в приложението Virtual Machine Connection (vmconnect.exe) е наличен Enhance Session Mode, работещ по RDP протокол и позволяващ предаване на дискови устройства и принтери в виртуалната машина, както и използване на общ clipboard.
Enhanced Session Mode работи от кутията в Windows в Hyper-V веднага след инсталация. При гостите с Linux трябва да се инсталира RDP сървър, поддържащ vsock (специално виртуално мрежово адресно пространство в Linux, предназначено за комуникация с хипервизора). Ако за Ubuntu в приложението VMCreate, което идва с Hyper-V на десктоп редакциите на Windows, има специално подготвен шаблон на виртуална машина, където RDP сървърът, работещ с vsock, е предварително инсталиран, то с други дистрибуции е по-малко ясно — например, на автора му успя да включи 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://:
-port=3389
+port=vsock://-1:3389
; 'port' по-горе трябва да се свърже с vsock вместо tcp
; използвайте това само с число само в порта по-горе
; предпочитайте да използвате vsock://: по-горе
-use_vsock=true
+;use_vsock=true
; регулирайте дали слушащият сокет използва опцията сокет tcp_nodelayНека добавим в файла ~/ .xinitrc стартиране на предпочитан мениджър на прозорци / работна среда, който ще се изпълнява при стартиране на X-сервера:
% echo "exec i3" > ~/ .xinitrcИзключваме виртуалната машина. Активираме транспорт vsock за виртуалната машина, като изпълняваме следната команда в PowerShell от администратора:
PS Admin > Set-VM -VMName ИМЕ_НА_МАШИНАТА -EnhancedSessionTransportType HvSocketВключваме виртуалната машина отново.
Свързване
След като службата XRDP стартира след стартиране на системата, приложението vmconnect това ще определи и в менюто ще стане достъпен елемент View -> Enhanced Session. При избора на тази опция ще ни предложат да зададем разрешение на екрана, а на таба Local Resources вдигнатия диалог можем да изберем устройства, пренасочвани вътре в 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
