Ҳолати мукаммали сессияро барои меҳмонони Arch Linux дар Hyper-V фаъол созед

Ҳолати мукаммали сессияро барои меҳмонони Arch Linux дар Hyper-V фаъол созед

Истифодаи мошинҳои виртуалии Linux дар Hyper-V берун аз қуттӣ нисбат ба мошинҳои меҳмонони Windows каме бароҳаттар аст. Сабаби ин дар он аст, ки Hyper-V аслан барои истифодаи мизи корӣ пешбинӣ нашуда буд; шумо наметавонед танҳо пеш равед ва бастаи иловаҳои меҳмононро насб кунед ва суръатбахшии графикӣ, буфер, директорияҳои муштарак ва дигар лаззатҳои ҳаётро ба даст оред, чунон ки дар VirtualBox рӯй медиҳад.

Худи Hyper-V таъмин менамояд хидматҳои ҳамгироии сершумор - ҳамин тавр, меҳмонон метавонанд аз хидмати нусхабардории сояи ҳост (VSS) истифода баранд, меҳмонон метавонанд сигнали хомӯширо фиристанд, меҳмонон метавонанд вақти системаро бо хости виртуализатсия ҳамоҳанг созанд, файлҳоро бо мошини виртуалӣ аз мизбон иваз кардан мумкин аст (Copy-VMFile дар PowerShell). Барои баъзе системаҳои оператсионии меҳмонон, аз ҷумла, албатта, Windows, дар замимаи Пайвасти мошини виртуалӣ (vmconnect.exe) Ҳолати мукаммали ҷаласа мавҷуд аст, ки тавассути протоколи RDP кор мекунад ва ба шумо имкон медиҳад, ки дастгоҳҳои диск ва чопгарҳоро ба мошини виртуалӣ интиқол диҳед ва инчунин буфери муштаракро истифода баред.

Ҳолати мукаммали сессия дар Windows дар Hyper-V фавран пас аз насб кор мекунад. Бо меҳмонон дар Linux, шумо бояд сервери RDP-ро насб кунед, ки vsock-ро дастгирӣ мекунад (фазои суроғаи махсуси шабакаи виртуалӣ дар Linux барои муошират бо гипервизор пешбинӣ шудааст). Агар барои Ubuntu, барномаи VMCreate, ки бо Hyper-V дар нашрияҳои мизи кории Windows меояд, дорои қолаби махсуси омодашудаи мошини виртуалӣ мебошад, ки дар он сервери RDP бо vsock кор мекунад. XRDP аллакай пешакӣ насб карда шудааст, пас бо тақсимоти дигар он камтар ва камтар равшан аст - масалан, муаллиф ин пост маълум шуд, ки ESM-ро дар Федора фаъол созад. Дар ин ҷо мо инчунин режими мукаммали сессияро барои мошини виртуалии Arch Linux фаъол мекунем.

Насб кардани хидматҳои ҳамгироӣ

Дар ин ҷо ҳама чиз камтар ё камтар содда аст, мо танҳо бояд бастаро насб кунем hyperv аз анбори ҷомеа:

% sudo pacman -S hyperv

Хидматҳои VSS, мубодиларо фаъол созед метамаълумот ва файлҳо:

% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; done

Насби XRDP

анбор linux-vm-асбобҳо дар 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-ро барои VM тавассути иҷро кардани фармони зерин дар PowerShell ҳамчун администратор фаъол созед:

PS Admin > Set-VM -VMName НАЗВАНИЕ_МАШИНЫ -EnhancedSessionTransportType HvSocket

Биёед боз мошини виртуалиро ба кор дарорем.

Пайвастшавӣ

Ҳамин ки хидмати XRDP пас аз оғози система оғоз мешавад, барномаи vmconnect инро муайян мекунад ва ҷузъи меню дастрас мешавад. View -> Сеанси мукаммал. Вақте ки шумо ин ашёро интихоб мекунед, аз мо хоҳиш карда мешавад, ки ҳалли экран ва дар ҷадвалро таъин кунем Манбаъҳои маҳаллӣ дар муколамае, ки кушода мешавад, шумо метавонед дастгоҳҳоеро, ки дар дохили сессияи RDP ирсол шудаанд, интихоб кунед.

Ҳолати мукаммали сессияро барои меҳмонони Arch Linux дар Hyper-V фаъол созед
Ҳолати мукаммали сессияро барои меҳмонони Arch Linux дар Hyper-V фаъол созед

Биёед пайваст шавем. Мо равзанаи воридшавии XRDP-ро мебинем:

Ҳолати мукаммали сессияро барои меҳмонони Arch Linux дар Hyper-V фаъол созед

Номи корбар ва пароли худро ворид кунед.

Истифода кунед

Фоида аз ин манипулятсияҳо назаррас аст: сессияи RDP нисбат ба кор бо дисплейи виртуалӣ бе Сессияи мукаммалшуда хеле ҷавобгартар кор мекунад. Дискҳое, ки дар дохили VM тавассути RDP фиристода мешаванд, дар феҳрист дастрасанд ${HOME}/shared-drives:

Ҳолати мукаммали сессияро барои меҳмонони Arch Linux дар Hyper-V фаъол созед

Буфер хуб кор мекунад. Шумо чопгарҳоро дар дохили он партофта наметавонед, ин на танҳо дастгирӣ намешавад, балки инчунин интиқоли дискро вайрон мекунад. Садо низ кор намекунад, аммо ба муаллиф лозим набуд. Барои сабт кардани миёнабурҳои клавиатура ба монанди Alt + Tab, шумо бояд vmconnect -ро ба экрани пурра васеъ кунед.

Агар бо ягон сабаб хоҳиши истифодаи муштарии RDP-и дар Windows сохташуда ба ҷои барномаи vmconnect вуҷуд дошта бошад ё масалан, ба ин мошин аз мошини дигар пайваст шавед, пас шумо бояд файлро тағир диҳед /etc/xrdp/xrdp.ini port ба tcp://:3389. Агар мошини маҷозӣ ба Гузариши пешфарз пайваст бошад ва танзимоти шабакаро тавассути DHCP қабул кунад, шумо метавонед ба он аз мизбон дар название_машины.mshome.net. Шумо метавонед танҳо аз барномаи vmconnect ба TTY бо хомӯш кардани Ҳолати мукаммал ворид шавед.

Сарчашмаҳои истифодашуда:

  1. Hyper-V Arch Wiki
  2. Ҳисобот оид ба хатогиҳо дар GitHub: 1, 2

Манбаъ: will.com

Илова Эзоҳ