在开箱即用的 Hyper-V 中使用 Linux 虚拟机的体验不如使用 Windows 来宾计算机舒适。 原因是 Hyper-V 最初不是为桌面使用而设计的; 您不能像在 VirtualBox 中那样继续安装来宾附加程序包并获得可用的图形加速、剪贴板、共享目录和其他生活乐趣。
Hyper-V 本身提供 Copy-VMFile
在 PowerShell 中)。 对于某些来宾操作系统,当然包括 Windows,在虚拟机连接应用程序 (vmconnect.exe
) 增强会话模式可用,它通过 RDP 协议工作,允许您将磁盘设备和打印机转发到虚拟机,以及使用共享剪贴板。
增强型会话模式在安装后立即在 Hyper-V 中的 Windows 上运行。 对于 Linux 上的来宾,您需要安装支持 vsock(Linux 中用于与管理程序通信的特殊虚拟网络地址空间)的 RDP 服务器。 如果对于 Ubuntu,Windows 桌面版的 Hyper-V 附带的 VMCreate 应用程序有一个专门准备的虚拟机模板,其中运行 vsock 的 RDP 服务器
安装集成服务
这里的一切都或多或少简单,我们只需要安装包 hyperv
来自社区存储库:
% sudo pacman -S hyperv
启用 VSS 服务,交换
% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; done
XRDP 安装
存储库
% 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
, 在撰写本文时
[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
:
剪贴板工作正常。 不能把打印机扔进去,这不仅不支持,而且
如果出于某种原因希望使用 Windows 内置的 RDP 客户端而不是 vmconnect 应用程序,或者,例如,从另一台机器连接到这台机器,那么您将需要更改文件 /etc/xrdp/xrdp.ini
port
上 tcp://:3389
. 如果虚拟机连接到默认交换机并通过 DHCP 接收网络设置,则您可以从主机连接到它 название_машины.mshome.net
. 您只能通过关闭增强模式从 vmconnect 应用程序登录到 TTY。
使用的来源:
Hyper-V 架构维基 - GitHub 上的错误报告:
1 ,2
来源: habr.com