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

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

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