Уключаем 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, ёсць спецыяльны падрыхтаваны шаблон віртуальнай машыны, у якім які працуе з vsock RDP-сервер 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 (звычайна гэтую працэдуру разам са зборкай аўтаматызуюць праграмамі накшталт яй, але аўтар прарабляў усю гэтую працэдуру на чыстай сістэме):

% 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-сесіі.

Уключаем 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

Дадаць каментар