Включваме Enhanced Session Mode за гости с Arch Linux в Hyper-V

Включваме Enhanced Session Mode за гости с Arch Linux в Hyper-V

Използването на виртуални машини с 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, XRDP е предварително инсталиран, то с други дистрибуции е по-малко ясно — например, на автора на този пост му успя да включи 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

Репозитория linux-vm-tools в 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 (обикновено тази процедура заедно със сборката се автоматизира от програми като yay, но авторът е извършил цялата тази процедура на чиста система):

% 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-сесията.

Включваме Enhanced Session Mode за гости с Arch Linux в Hyper-V
Включваме Enhanced Session Mode за гости с Arch Linux в Hyper-V

Свързваме се. Ще видим прозореца за вход XRDP:

Включваме Enhanced Session Mode за гости с Arch Linux в Hyper-V

Въвеждаме името си на потребител и парола.

Използването

Печалбата от тези манипулации е очевидна: сесията RDP работи много по-отзивчиво, отколкото при работа с виртуален дисплей без Enhanced Session. Пренасочените към VM дискове чрез RDP са достъпни в директорията ${HOME}/shared-drives:

Включваме Enhanced Session Mode за гости с Arch Linux в Hyper-V

Буферът за обмен работи нормално. Пренасочването на принтери вътре не е възможно, това не само не се поддържа, но и лома пренасочването на дисковете. Също така звукът не работи, но на автора това не му беше нужно. За да се улавят клавишни комбинации като Alt+Tab, vmconnect трябва да се разширява на цял екран.

Ако по някаква причина има желание да се използва вместо приложението vmconnect вграденият в Windows RDP-клиент или, например, да се свържете с тази машина от друга машина, ще е необходимо да смените в файла /etc/xrdp/xrdp.ini port на tcp://:3389. Ако виртуалната машина е свързана към Default Switch и получава мрежови настройки чрез DHCP, то свързването с нея от хоста може да стане по адреса име_на_машината.mshome.net. Входът в TTY е възможен само от приложението vmconnect, като се изключи Enhanced Mode.

Използвани източници:

  1. Hyper-V — Arch Wiki
  2. Бъгрепорти на GitHub: 1, 2

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster