使用 Hyper-V 去安装 GNU/Linux 发行版,启用增强会话最令人头大。不清楚是不是 Microsoft 有意为之让大家用 WSL 2。但总归,这并不容易。

本教程将教您如何为 Hyper-V 中的 Arch Linux 虚拟机启用增强会话。

0 准备工作

Important

请确保您的 Arch Linux 虚拟机是第二代虚拟机,同时使用 pipewire 作声音服务,并且在 Hyper-V 设置中允许使用增强会话。

然后,在主机 Windows OS 下以管理员权限打开 PowerShell,执行(<VM> 改成 Arch Linux 虚拟机的名字,最好加上英文半角双引号):

Set-VM -VMName <VM> -EnhancedSessionTransportType HvSocket

1 配置包管理器

详见这篇教程的第 3 部分和另一篇教程

2 安装集成服务

执行以下命令:

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

3 安装软件包

如果没有安装 git,请先执行以下命令:

sudo pacman -S git base-devel

执行以下命令:

git clone https://github.com/microsoft/linux-vm-tools.git  
git clone https://aur.archlinux.org/xrdp-devel-git.git  

首先切换到文件夹 xrdp-devel-git,在文件 PKGBUILD 中的 build() 部分中,添加以下参数到构建选项中:

--enable-vsock

即整个 build() 变为:

build() {
  cd $pkgname
  ./configure --prefix=/usr \
              --sysconfdir=/etc \
              --localstatedir=/var \
              --sbindir=/usr/bin \
	      --libexecdir=/usr/lib \
              --with-systemdsystemdunitdir=/usr/lib/systemd/system \
              --enable-jpeg \
              --enable-tjpeg \
              --enable-fuse \
	      --enable-opus \
	      --enable-rfxcodec \
	      --enable-mp3lame \
	      --enable-pixman \
              --enable-vsock
  # Fight unused direct deps
  sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/      func_append compile_command " -Wl,-O1,--as-needed"\n      func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
  make V=0
}

就是 # Fight unused direct deps 上面的两行改了一下。

编辑完成后,执行命令:

makepkg --skipchecksum -si

然后执行以下命令:

paru -S xorg-xinit xorgxrdp-devel-git openssl-1.1 pipewire-module-xrdp

接着切换回当初克隆仓库时所在的目录,切换到 linux-vm-tools/arch,执行:

sudo ./install-config.sh

Warning

不要使用 linux-vm-tools/arch 中的 makepkg.sh 脚本,其编译选项并不正确。

4 解决 XRDP 反复连接问题

在当前用户的家目录下创建 .xinitrc

根据不同的桌面环境添加内容:

exec i3w
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec dbus-launch  gnome-shell --x11
export DESKTOP_SESSION=plasma
exec startplasma-x11
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec dbus-launch startxfce4

然后执行:

sudo systemctl enable xrdp.service
sudo systemctl enable xrdp-sesman.service
sudo xrdp-keygen xrdp /etc/xrdp/rsakeys.ini
sudo pacman -Rcns $(pacman -Qtdq)

接着重启虚拟机。

重启后依次输入用户名、用户密码登录账户,然后在弹出窗口中再次输入账户密码即可。

Tip

实际上直接关闭弹出的窗口也是可以正常使用的,不过最好还是输入一下账户密码。

至此,一切大功告成!

Extra 汉化 SDDM

这一部分和本篇教程没什么关系,了解下就可以。

如果是以 Systemd 启动 SDDM,可以打开 /usr/lib/systemd/system/sddm.service,在 [Service] 下添加:

Environment=LANG=zh_CN.UTF-8

如果不是 Systemd 启动,只能改 /etc/locale.conf 了(不建议改,虚拟终端会乱码)。

转载请注明出处