使用 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 配置包管理器
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
。
根据不同的桌面环境添加内容:
- i3w / dwm:
exec i3w
- Gnome:
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec dbus-launch gnome-shell --x11
- KDE Plasma:
export DESKTOP_SESSION=plasma
exec startplasma-x11
- Xfce4:
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
了(不建议改,虚拟终端会乱码)。