问题描述
我正在使用带有 lxc / lxd 蒸汽容器的 ubuntu 18:04。效果很好,我按照本教程对网络内容进行了一些更改。
https://blog.simos.info/running-steam-in-a-lxd-system-container/
Steam 适用于 opengl 游戏,但不适用于 vulkan 游戏。 lutris 也一样。
主机端:
===========
VULKAN INFO
===========
Vulkan Instance Version: 1.1.70
Instance Extensions:
====================
Instance Extensions count = 16
容器端:
ubuntu@steam:~$ vulkaninfo
===========
VULKAN INFO
===========
Vulkan Instance Version: 1.1.70
ERROR: setupLoaderTermPhysDevs: Failed to detect any valid GPUs in the current config
ERROR: setupLoaderTrampPhysDevs: Failed during dispatch call of 'vkEnumeratePhysicalDevices' to lower layers or loader to get count.
/build/vulkan-UL09PJ/vulkan-1.1.70+dfsg1/demos/vulkaninfo.c:2700: failed with VK_ERROR_INITIALIZATION_FAILED
OpenGL 工作得很好,游戏运行得很快,所以它必须在系统中找到我唯一的 gpu。我是否必须为容器单独启用 vulkan?
宿主在 vulkan 烟雾测试中也没有问题:
user@host:~$ vulkan-smoketest
7223 presents in 5.00039 seconds (FPS: 1444.49)
解决方法
该指南在 LXD 容器中手动添加了必要的 OpenGL 共享库,并且这样做不会添加 Vulkan 共享库。
LXD 现在支持 NVidia 容器运行时(由 NVidia 提供),因此您可以改用它。按照 https://blog.simos.info/running-x11-software-in-lxd-containers/
上的最新指南进行操作 ,一位名叫 zakk 的 reddit 用户在 https://blog.simos.info/running-steam-in-a-lxd-system-container/ 的评论中写了一个解决方案。
做了一些跟踪后,我注意到它无法打开文件 /dev/dri 容器权限错误;在主机上那些 文件有一个允许当前用户访问它们的 ACL 集, 容器没有。所以要修复:在容器中运行
sudo setfacl -m "u:ubuntu:rw-" /dev/dri/*
每次启动 lxc 时都必须执行 setfacl 命令。