cd ~{,/zhs/}
# su # 切换到 root 用户
# cd /var/lib/machines
# container_name=steam
# btrfs subvolume create $container_name
当前最新的长期支持版 Ubuntu 代号为 jammy
。随你选用喜欢的仓库地址。
# codename=jammy
# repository_url='https://mirrors.ustc.edu.cn/ubuntu/'
# debootstrap --include=systemd-container \
--components=main,universe,multiverse \
$codename $container_name $repository_url
安装完成后,运行 systemd-nspawn --machine=$container_name
即可启动进入崭新的容器。
可能需要加上 --bind-ro=/etc/resolv.conf
参数才能让容器里的 DNS 正常工作。
想要检查网络状态的话,可以使用命令 ping 1.1.1.1
和 ping archlinux.org
:如果前者通后者不通,说明是 DNS 问题。
设置 en_US.UTF-8
区域,否则 Steam 会报一些错。
在容器内,启用 32 位架构并从 Ubuntu 官方仓库安装软件包:
# dpkg --add-architecture i386
# apt update
# apt install steam
根据文件列表判断,Steam 的启动脚本位于 /usr/games/steam
。我们创建一个符号链接以便启动:
# file /usr/games/steam
# ln --verbose --symbolic /usr/games/steam /usr/local/bin/
在容器从添加一个专门的普通用户,就叫「steam」吧。再创建一下基础目录:
# useradd --create-home steam
# su --login steam
# mkdir --parents ~/.config ~/.local/share
后续我还创建了 ~/library
目录来作为自定义的 Steam 默认库文件夹,并挂载了一个
~/screenshots
目录以便在宿主机上存储截图。
命令行参数已然太多,从这一步开始,想要在图形界面运行 Steam 就要着手撰写脚本了。
--bind=/dev/dri/card0
以此类推--bind=/dev/nvidia0
以此类推--property=DeviceAllow='char-drm rw'
N 卡用户注意事项:
别用 N 卡,会变得不幸- 把
/dev/nvidia*
全都挂上- 确保容器内的用户空间驱动版本与主机的内核模块版本完全一致
--bind-ro=/dev/input/js0
以此类推--property=DeviceAllow='char-input r'
systemd-nspawn
命令这个游戏使用 FMOD 引擎,貌似 明确依赖 ALSA。无法播放任何音频,持续将音量重置为零。
解决方案:
apt install pulseaudio
pacman --sync pulseaudio-alsa --assume-installed pulseaudio
(通过 Steam Play 运行)
使用非 DRM 版本的可执行文件(3.4MiB)替换 DRM 版(5.1MiB)。
我把自己的非 DRM 版可执行文件上传到了这里:pvz-non-drm.tar.xz,附带了它的
SHA-256 校验和:cdddfb30f50510afa389de4966089a1ac1a9a2bf09fb8d0aa0793178b0814cd1
下面是提取非 DRM 版可执行文件然后替换的完整步骤:
cd /home/steam/library
;steamapps/compatdata/3590/pfx/drive_c/ProgramData/PopCap Games/PlantsVsZombies/popcapgame1.exe
到 /tmp/
;/tmp/popcapgame1.exe
到 steamapps/common/Plants\ Vs\ Zombies/PlantsVsZombies.exe
并将后者覆盖,完事。库文件夹在哪儿?到「设置 -> 下载 -> 内容库」打开配置对话框:
这个游戏严格依赖「文泉驿微米黑」字体,在 Ubuntu 20.04 上其包名为 fonts-wqy-microhei
:
# systemd-nspawn --machine=steam --bind-ro=/etc/resolv.conf apt install fonts-wqy-microhei
如果没效果,可能需要手动刷新一下 fontconfig
:
# systemd-nspawn --machine=steam fc-cache --force --verbose