Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

为 Hyper-V 中的 Arch Linux 启用增强会话 #5

Open
MaxLHy0424 opened this issue Jun 24, 2024 · 0 comments
Open

为 Hyper-V 中的 Arch Linux 启用增强会话 #5

MaxLHy0424 opened this issue Jun 24, 2024 · 0 comments

Comments

@MaxLHy0424
Copy link
Owner

MaxLHy0424 commented Jun 24, 2024

使用 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.

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

  • 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
/usr/lib/plasma-dbus-run-session-if-needed 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

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

至此, 一切大功告成!

DLC 汉化 SDDM

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

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

Environment=LANG=zh_CN.UTF-8

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant