在 Hyper-V 中为 Arch Linux 来宾启用增强会话模式

在 Hyper-V 中为 Arch Linux 来宾启用增强会话模式

在开箱即用的 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 服务器 XRDP 已经预装,然后与其他发行版一起越来越不清楚 - 例如,作者 这个帖子 结果是在 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 安装

存储库 linux-vm-工具 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 会话中转发的设备。

在 Hyper-V 中为 Arch Linux 来宾启用增强会话模式
在 Hyper-V 中为 Arch Linux 来宾启用增强会话模式

让我们连接。 我们将看到 XRDP 登录窗口:

在 Hyper-V 中为 Arch Linux 来宾启用增强会话模式

输入你的用户名与密码。

使用

这些操作的好处是显而易见的:RDP 会话的响应速度比使用没有增强会话的虚拟显示器时要快得多。 通过 RDP 在 VM 内部转发的磁盘在目录中可用 ${HOME}/shared-drives:

在 Hyper-V 中为 Arch Linux 来宾启用增强会话模式

剪贴板工作正常。 不能把打印机扔进去,这不仅不支持,而且 中断磁盘转发. 声音也不起作用,但作者不需要它。 为了捕获 Alt + Tab 等键盘快捷键,您需要将 vmconnect 扩展到全屏。

如果出于某种原因希望使用 Windows 内置的 RDP 客户端而不是 vmconnect 应用程序,或者,例如,从另一台机器连接到这台机器,那么您将需要更改文件 /etc/xrdp/xrdp.ini porttcp://:3389. 如果虚拟机连接到默认交换机并通过 DHCP 接收网络设置,则您可以从主机连接到它 название_машины.mshome.net. 您只能通过关闭增强模式从 vmc​​onnect 应用程序登录到 TTY。

使用的来源:

  1. Hyper-V 架构维基
  2. GitHub 上的错误报告: 1, 2

来源: habr.com

添加评论