
在開箱即用的 Hyper-V 中使用 Linux 虛擬機不如使用來賓 Windows 機器舒適。 原因是 Hyper-V 最初不是為桌面使用而設計的; 您不能像在 VirtualBox 中那樣繼續安裝來賓附加程序包並獲得可用的圖形加速、剪貼板、共享目錄和其他生活樂趣。
Hyper-V 本身提供 - 所以,來賓可以使用主機的捲影複製服務(VSS),來賓可以發送關機信號,來賓可以與虛擬化主機同步系統時間,可以從主機與虛擬機交換文件(Copy-VMFile 在 PowerShell 中)。 對於某些來賓操作系統,當然包括 Windows,在虛擬機連接應用程序 (vmconnect.exe) 增強會話模式可用,它通過 RDP 協議工作,允許您將磁盤設備和打印機轉發到虛擬機,以及使用共享剪貼板。
增強型會話模式在安裝後立即在 Hyper-V 中的 Windows 上運行。 對於 Linux 上的來賓,您需要安裝支持 vsock(Linux 中用於與管理程序通信的特殊虛擬網絡地址空間)的 RDP 服務器。 如果對於 Ubuntu,Windows 桌面版的 Hyper-V 附帶的 VMCreate 應用程序有一個專門準備的虛擬機模板,其中運行 vsock 的 RDP 服務器 已經預裝,然後與其他發行版一起越來越不清楚 - 例如,作者 結果是在 Fedora 中啟用了 ESM。 在這裡,我們還為 Arch Linux 虛擬機啟用增強會話模式。
安裝集成服務
這裡的一切都或多或少簡單,我們只需要安裝包 hyperv 來自社區存儲庫:
% sudo pacman -S hyperv啟用 VSS 服務,交換 和文件:
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; doneXRDP 安裝
存儲庫 GitHub 上提供的腳本可以自動為 Arch Linux 和 Ubuntu 安裝和配置 XRDP。 安裝 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://-addresses,因此您必須從 Git 手動安裝 XRDP,並從 AUR 手動安裝 Xorg 驅動程序。 AUR 中提供的 XRDP 補丁也略有過時,因此您必須手動編輯 PKGBUILD 和補丁。
我們從 AUR 中克隆帶有 PKGBUILD 的存儲庫(通常這個過程連同程序集由程序自動執行,例如 ,但作者在乾淨的系統上完成了整個過程):
% git clone https://aur.archlinux.org/xrdp-devel-git.git
% git clone https://aur.archlinux.org/xorgxrdp-devel-git.git讓我們先安裝 XRDP 本身。 讓我們打開文件 PKGBUILD 任何文本編輯器。
讓我們編輯構建參數。 用於從 Git 構建 XRDP 的 PKGBUILD 不包括構建中的 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,它在 Arch Linux 中使用的文件路徑下編輯單元和 XRDP 啟動腳本,除其他外,還包含腳本的補丁 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讓我們關閉虛擬機。 通過以管理員身份在 PowerShell 中運行以下命令,為 VM 啟用 vsock 傳輸:
PS Admin > Set-VM -VMName НАЗВАНИЕ_МАШИНЫ -EnhancedSessionTransportType HvSocket讓我們再次打開虛擬機。
Подключение
系統啟動後,只要 XRDP 服務啟動,vmconnect 應用程序就會確定這一點,並且菜單項將變為可用。 查看 -> 增強會話. 當您選擇此項時,我們會提示您設置屏幕分辨率,並在選項卡上 當地資源 在打開的對話框中,您可以選擇在 RDP 會話中轉發的設備。


讓我們連接。 我們將看到 XRDP 登錄窗口:

輸入你的用戶名與密碼。
使用
這些操作的好處是顯而易見的:RDP 會話的響應速度比使用沒有增強會話的虛擬顯示器時要快得多。 通過 RDP 在 VM 內部轉發的磁盤在目錄中可用 ${HOME}/shared-drives:

剪貼板工作正常。 不能把打印機扔進去,這不僅不支持,而且 . 聲音也不起作用,但作者不需要它。 為了捕獲 Alt + Tab 等鍵盤快捷鍵,您需要將 vmconnect 擴展到全屏。
如果出於某種原因希望使用 Windows 內置的 RDP 客戶端而不是 vmconnect 應用程序,或者,例如,從另一台機器連接到這台機器,那麼您將需要更改文件 /etc/xrdp/xrdp.ini port 上 tcp://:3389. 如果虛擬機連接到默認交換機並通過 DHCP 接收網絡設置,則您可以從主機連接到它 название_машины.mshome.net. 您只能通過關閉增強模式從 vmconnect 應用程序登錄到 TTY。
使用的來源:
- GitHub 上的錯誤報告: ,
來源: www.habr.com
