我正在尝试使用 x-forwarding 在远程服务器中运行 Blender 3.6.5。服务器安装了基础 x11 和 mesa 软件包,以及 freetype 软件包。
user@server:~$ sudo apt install -y
bzip2 libfreetype6 libgl1-mesa-dev \
libglu1-mesa \
fontconfig \
libxi6 libxrender1 libglib2.0-0 x11-utils
我使用 ssh 客户端连接到服务器,并定义 x11 转发选项。
user@client$ ssh -X -v user@server
我试着跑GLX齿轮它工作正常,但是当我运行搅拌机时,它崩溃并出现我不明白的错误。
user@server:~/blender-3.6.5-linux-x64$ ./blender
0debug1: client_input_channel_open: ctype x11 rchan 3 win 65536 max 16384
debug1: client_request_x11: request from 127.0.0.1 60744
debug1: channel 1: new [x11]
debug1: confirm x11
Failed to open dir (No such file or directory): /run/user/7693/gvfs/
X Error of failed request: BadGC (invalid GC parameter)
Major opcode of failed request: 60 (X_FreeGC)
Resource id in failed request: 0x6e00025
Serial number of failed request: 218
Current serial number in output stream: 223
debug1: channel 1: FORCE input drain
远程运行 Blender 时还需要考虑其他事项吗? (例如字体或特定库)
答案1
由于 Blender 使用现代 X11 功能,并且依赖于编写 glxgears 时甚至还没有发明的功能,因此 glxgears 需要更少的功能来工作也就不足为奇了。
快速跟踪 X11 调用的 Blender 在启动期间所做的工作表明它使用了共享内存扩展 - 这对于执行修改纹理并将其显示在模型上等操作的程序来说非常有意义。然后我确信 OpenGL 方面也使用类似的功能,因此即使您以某种方式修补所有 x11-mitshm 调用并使它们以某种方式通过 SSH 透明传输,它也会失败。
您需要您的搅拌机在本地渲染(即在实际运行搅拌机的远程计算机上)。然后您可以将渲染的位图转发到本地计算机。我怀疑这就是您想要做的事情:您可能不会从具有强大 GPU 和 CPU 的计算机登录到以很少计算能力运行的服务器,但事实恰恰相反!您可能尝试在一台速度太慢且未配备 GPU 的笔记本电脑上使用搅拌机,而服务器速度很快且具有 GPU,对吧? (否则你的整个努力就没有意义。在本地运行搅拌机。)
传统上,VNC 对所显示的图形进行屏幕捕获是实现此目的的方法。但我不确定这是否是高分辨率低延迟大增量图形所需的方式。您通常需要一个连接到远程服务器的物理屏幕来启动 GPU 加速的 X.org,然后 VNC 服务器可以进行屏幕抓取、编码并发送给您 - 这些都是不可取的。
我想我会研究在谷歌放弃 Stadia(及其所有付费客户和业务合作伙伴)后人们为无头服务器构建的应用程序流解决方案,这应该会损害谷歌作为平台提供商的形象,包括其云计算产品,几十年来来)。我认为服务器端的 Sunshine 和客户端的 Moonshine 是目前流行的解决方案,但我对这些没有经验。