
开箱即用地在Hyper-V中使用Linux虚拟机的体验比使用来宾Windows计算机的体验略差。 原因是Hyper-V最初仍不打算用于台式机。 您不仅可以安装并安装访客插件包,还可以像VirtualBox一样获得可行的图形加速,剪贴板,共享目录和其他生活乐趣。
Hyper-V本身提供了几种集成服务 -例如,来宾可以使用主机的卷影复制服务(VSS),可以向来宾发送关闭信号,来宾可以与虚拟化主机同步系统时间,可以从主机与虚拟机交换文件( Copy-VMFile
in PowerShell)。 对于某些客户机操作系统,当然包括Windows,虚拟机连接应用程序( vmconnect.exe
) vmconnect.exe
增强的会话模式,该模式通过RDP协议工作,并允许您将磁盘设备和打印机转发到虚拟机,以及使用通用剪贴板。
开箱即用的增强会话模式在安装后立即在Windows中的Hyper-V中运行。 对于Linux上的guest虚拟机,您需要安装支持vsock的RDP服务器(Linux中用于与虚拟机管理程序通信的特殊虚拟网络地址空间)。 如果对于Windows桌面版上Hyper-V附带的VMCreate应用程序中的Ubuntu,有一个特殊的准备好的虚拟机模板,其中已经预安装了与vsock一起使用的XRDP 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; done
安装XRDP
GitHub上的linux-vm-tools存储库提供了脚本,这些脚本可以自动安装和配置用于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://
地址的解析已损坏,因此您必须从Git安装XRDP,并从AUR安装Xorg驱动程序用手。 AUR中提供的XRDP补丁也有些过时,因此您必须手动编辑PKGBUILD和补丁。
我们使用来自AUR的PKGBUILDs克隆存储库(通常,此过程以及程序集是由yay之类的程序自动化的,但是作者在干净的系统上完成了整个过程):
% 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 arch-config.diff
单元和脚本,其中包含instfiles/xrdp.sh
的补丁,在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中运行以下命令来激活虚拟机的vsock传输:
PS Admin > Set-VM -VMName _ -EnhancedSessionTransportType HvSocket
再次打开虚拟机。
连接方式
系统启动后,一旦XRDP服务启动,vmconnect应用程序就确定了这一点,并且菜单项“ 视图” ->“ 增强的会话”可用。 选择此项时,将要求我们设置屏幕分辨率,然后在打开的对话框的“ 本地资源”选项卡上,可以选择在RDP会话内转发的设备。


连接 请参阅XRDP登录窗口:

输入您的用户名和密码。
使用方法
这些操作的好处是显而易见的:与不使用增强会话的虚拟显示器一起使用时,RDP会话的响应速度要快得多。 在${HOME}/shared-drives
目录中可以找到通过RDP抛出的VM:

剪贴板工作正常。 您不能在内部转发打印机,不仅不支持它,而且还会中断磁盘转发 。 声音也不起作用,但是作者不需要它。 为了捕获键盘快捷键(例如Alt + Tab),您需要全屏部署vmconnect。
如果出于某种原因希望使用Windows内置的RDP客户端而不是vmconnect应用程序,或者例如,从另一台计算机连接到该计算机,则需要将/etc/xrdp/xrdp.ini
port
文件更改为tcp://:3389
。 如果虚拟机连接到默认交换机并通过DHCP接收网络设置,则可以从主机_.mshome.net
连接到该虚拟机。 您只能通过关闭增强模式从vmconnect应用程序输入TTY。
使用的来源 :
- Hyper-V-Arch Wiki
- GitHub上的Bagreport: 1、2