容器内运行游戏
时代确实变了,GNU/Linux 上现在甚至可以通过 proton 运行许多的 m$win 游戏了。m$win 世袭的独占的领域,我认为也离崩塌不远了
下面是翻译(原文是用英语瞎写的)
这个解决方案是我和 Gemini 之间对话的结果。它已经过测试,似乎是一个很好的方法。
我这样做是为了隔离游戏环境并提高安全性。
游戏在容器中运行,但在主机上显示。
步骤:
创建一个 systemd-nspawn 容器
请参考互联网上的指南。我建议您运行非特权容器(启用 PrivateUsers)并启用尽可能多的安全选项。
必须:
-
将
/dev/dri绑定到容器中,并确保容器中的用户可以访问 dri 设备(可以通过 acl 来做到这一点) -
将另一个自定义路径绑定到容器中。我们需要从主机到容器共享 gamescope 文件,例如,在本主题中,我在主机和容器上都使用路径
/share-with-container/
提示:您可以在容器中运行无头桌面,例如:sway。
在容器中安装 proton 和游戏
你可以使用一些启动器来帮助你设置 proton 和游戏,我使用 Faugus。
运行
在主机上(请注意,我假设您已经在主机上运行桌面,其套接字为 /run/user/1000/wayland-1):
touch /share-with-container/tmp/.X{0..10}-lock
systemd-run --user --wait --pty -p "BindPaths=/share-with-container/tmp:/tmp" \
-E XDG_RUNTIME_DIR=/share-with-container/runtime \
-E WAYLAND_DISPLAY=/run/user/1000/wayland-1 \
gamescope \
--expose-wayland -W 2560 -H 1422 --borderless --force-windows-fullscreen -- sleep infinity
systemd-run --user --wait -p "BindPaths=/share-with-container/tmp:/tmp" \
-E DISPLAY=:11 \
xhost '+'
在容器中(将 … 部分替换为游戏启动命令):
systemd-run --user --wait -p "BindPaths=/share-with-container/tmp:/tmp" \
-E DISPLAY=:11 \
-E WAYLAND_DISPLAY=/share-with-container/runtime/gamescope-0 \
...
音频
我用的是 pipewire netjack2 来将容器内的声音转到宿主机播放
测试过的游戏
- red alert 3
- gta sa
- ac 2