通常在 Linux 上,VNC 服务器是 Xorg X11 服务器 (Xvnc) 的专用变体,它使用基于软件的渲染器后端并且没有 GPU 加速。我猜你正在使用 NVidia GPU 和 NVidia 专有驱动程序,或 AMD GPU 和 AMD 专有驱动程序,否则 Mesa 软管道实施就会启动。
如果您真的想使用 GPU,则必须将 VNC 连接到正在运行的 X11 会话中,在该会话中启动 x11vnc 服务器。
更新
首先,要让 GPU 工作,必须运行 X 服务器并将其输出发送到显示连接器。抱歉,目前的驱动模型不允许纯屏外GPU加速X11服务器;这不是硬件的限制,而只是 Xorg X11 服务器实现。这也意味着,将监视器连接到屏幕的任何人都可以看到您正在做的任何事情。至少我们可以照顾到,没有人会弄乱鼠标和键盘。
首先创建一个自定义的 /etc/X11/xorg.vnc.conf 包含这个
Section "ServerFlags"
Option "AllowEmptyInput" "true"
Option "AutoAddDevices" "off"
Option "DontZap" "false"
Option "DontVTSwitch" "true"
Option "HandleSpecialKeys" "Never"
EndSection
Section "Device"
Identifier "DeviceGPU"
Driver "nvidia"
EndSection
接下来实现一个脚本 stat 启动你想在那个特定的 X11 会话中运行的一切。大多数情况下,这会启动 x11vnc 服务器,然后执行到桌面环境中,例如
#!/bin/sh
x11vnc -display $DISPLAY &
exec startxfce4 # or whatever
我建议您参考 x11vnc 的手册页,了解如何配置要使用的身份验证。
最后,您应该检查 Xorg 服务器二进制文件是否为 SUID root;NVidia 驱动程序仍然没有充分利用 KMS,并且依赖于以完全权限启动的 X 服务器。
一旦满足这些先决条件,您就可以使用支持 VNC 的 X11 会话
xinit $FULL_PATH_TO_YOUR_SESSION_SCRIPT -- $DISPLAY -config xorg.vnc.conf
其中$DISPLAY
是一个免费的 X11 显示编号。