![Vulkan 驱动程序在谷歌远程桌面中运行时停止工作](https://linux22.com/image/923786/Vulkan%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E5%9C%A8%E8%B0%B7%E6%AD%8C%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E4%B8%AD%E8%BF%90%E8%A1%8C%E6%97%B6%E5%81%9C%E6%AD%A2%E5%B7%A5%E4%BD%9C.png)
nvidia-smi
我正在运行一个连接了 nvidia v100 的 ubuntu gcp 实例。我安装了显卡驱动程序,并使用和检查了正确性vulkaninfo
。两者都没有显示错误。这表明显卡驱动程序安装正确。
现在我想使用远程显示访问Google 的远程桌面服务。所以我跟着无头安装说明一切似乎都进展顺利,直到我测试了显卡。不知何故,vulkaninfo
在远程桌面内的终端中运行时,它出现以下错误信息:
/build/vulkan-UL09PJ/vulkan-1.1.70+dfsg1/demos/vulkaninfo.c:2700: failed with VK_ERROR_INITIALIZATION_FAILED
我已经在各处用 Google 搜索过,甚至搜索了 vulkaninfo 源代码来了解这个错误的根源,但我找不到它。
有人知道是什么原因导致了这个错误吗?为什么 vulkan 驱动程序在 ssh 终端中工作正常,但在虚拟显示器中却不行?
答案1
我找到了一种方法来让它工作,但它很不可靠。我不建议在敏感系统上使用这种方法
一切都始于这一页这告诉我们
如果与 dpy 关联的 X11 服务器不拥有显示器,或者访问它的权限已被另一个实体获取,则该调用必须返回错误代码 VK_ERROR_INITIALIZATION_FAILED。
这让我这个问题和这个命令:ps -ef | grep X
。这表明当前显示是使用 启动的xvfb
。这是x 虚拟帧缓冲区。 显然xvbf 不支持 vulkan。那么让我们看看是否可以让 google-remote-desktop 使用普通的 x 服务器(剧透:是的!)。
该服务背后的代码chrome-remote-desktop
位于/etc/init.d/chrome-remote-desktop
,它依次运行/opt/google/chrome-remote-desktop/chrome-remote-desktop
(源代码)。我们发现可以使用CHROME_REMOTE_DESKTOP_USE_XORG
环境变量让 google-remote-desktop 使用虚拟驱动程序启动 Xorg 显示器。让我们通过在文件中添加以下行来启用它/etc/environment
:
CHROME_REMOTE_DESKTOP_USE_XORG=1
重新启动服务后,出现以下错误
Only console users are allowed to run the X server
为什么 X 服务器不能由 root 启动?因为 chrome-remote-desktop 服务会以该用户的名义为每个用户启动一个单独的显示。
到修复上述错误您可以编辑/etc/X11/Xwrapper.config
和设置allowed_users = anybody
。
现在 X 服务器抱怨-logfile
只有以 root 身份运行服务器时才可用(即 real-uid 为 0)。如果您和我一样不关心日志记录,则可以编辑/opt/google/chrome-remote-desktop/chrome-remote-desktop
并删除以下行(大约第 581 行):
"-logfile", "/dev/null",
差不多了!
现在 X 服务器抱怨必须-config
是相对路径。这一页说明配置文件必须放在/etc/X11/<cmdline>
或中/usr/etc/X11/<cmdline>
。查看 的源代码,/opt/google/chrome-remote-desktop/chrome-remote-desktop
我们看到以下内容:
with tempfile.NamedTemporaryFile(
prefix="chrome_remote_desktop_",
suffix=".conf", delete=False) as config_file:
config_file.write(gen_xorg_config(self.sizes).encode())
此时配置文件已在中创建/tmp
,因此让我们移动它。在前缀和后缀行之间添加以下行:
dir="/etc/X11/",
X 想要接收相对路径,所以我们必须改变
"-config", config_file.name
到
"-config", os.path.basename(config_file.name)
由于我们不是 root,因此我们必须授予用户对此文件夹的写入权限。因此,让我们运行:
sudo chmod 777 /etc/X11
我们这样做是为了能够使用 nvidia 驱动程序。替换虚拟驱动程序:
'Section "Device"\n'
' Identifier "Chrome Remote Desktop Videocard"\n'
' Driver "dummy"\n'
' VideoRam {video_ram}\n'
'EndSection\n'
使用 nvidia 驱动程序:
'Section "Device"\n'
' Identifier "Chrome Remote Desktop Videocard"\n'
' Driver "nvidia"\n'
' VendorName "NVIDIA Corporation"\n'
' VideoRam {video_ram}\n'
'EndSection\n'
不知为何,这个设置不喜欢调整大小,因此我通过设置DEFAULT_SIZES_XORG
为来强制使用单一尺寸"1920x1080"
。
现在它起作用了!