多年来,我一直习惯在离开家时,通过 VNC(通过 ssh)返回到我的“家庭计算机”,并在紧密的 vnc 服务器环境中运行 Evolution(用于电子邮件、联系人等)。
当家用计算机运行 Debian/Squeeze 时,此功能运行良好,但现在它已更新为 Wheezy,尝试在 VNC 服务器会话输出中启动 Evolution:
Xlib: extension "GLX" missing on display ":1".
Failed to connected to any renderer:
XServer appears to lack required GLX support
ightvncserver 不支持 GLX 并不令人意外,但 Evolution 转向 GL 后端(通过使用“杂乱”工具包?)却令人意外。 (需要明确的是:Evolution 在桌面上运行绝对正常;机器通过 DKMS 具有 nvidia 驱动程序。)
解决这个问题的前景如何?我的想法是:
- Evolution 是否有命令行选项可以解决此问题?
- 有没有办法在 VNC 服务器中获得 GLX 支持? (tightvncserver 的替代品支持它吗?)
请注意,我倾向于在高延迟/低带宽链接中使用 VNC;我之前尝试过通过 X11 远程运行 Evolution,但体验并不好; VNC 的效果要好得多。
首选 Debian 友好(apt-get -able)解决方案。
答案1
我曾遇到过同样的问题,试图让 qtcreator 通过 vnc 工作,并最终找出它不起作用的原因,以及如何修复它;
http://minkirri.apana.org.au/wiki/DevJournal
您不需要 VirtualGL,它甚至可能比其他选择更糟糕。重要的是,您只需使用标准 Debian 软件包就可以使其工作。
VirtualGL 用于应用程序服务器端硬件加速。 GLX 用于 x 服务器端硬件加速。正常使用 VNC 时,应用服务器和 x 服务器与 vnc 服务器位于同一台计算机上,因此 VirtualGL 和 GLX 之间没有太大区别。
问题是两个最常见的 vnc 服务器tightvncserver 和 vnc4server 都是 x 代理服务器,具有自己的内部 x 服务器,不支持 GLX。您仍然可以使 3D 应用程序与它们一起使用,但您需要使用老式的应用程序服务器端软件渲染,这意味着您需要在应用程序服务器上安装 libgl1-mesa-swx11,这与通常安装的硬件渲染冲突版本 libgl1-mesa-glx。
或者,您可以安装具有硬件渲染 GLX 支持的普通 x-server 并使用 x11vnc,这是一个可以抓取真实 x-server 屏幕的 vncserver。
如果有人使用 libvncserver(由 x11vnc 使用)编写一个具有适当 GLX 支持的新 x-proxy vnc-server,那就太好了。 ightvncserver 和 vnc4server 都变得有点暴躁。
答案2
经过更多研究后,所有道路似乎都通向虚拟GL(文档),尽管我还没有尝试过(设置说明有点......令人生畏)。文档指向一些.debs,并且有一个开放的Debian 的 ITP。
作为替代方案,似乎可以通过 Mesa 构建一个具有 GLX 支持的紧密 vncserver(例如提到这里)。当然,这不会是 GPU 加速(但多少图形马力可以电子邮件需要???);更令人担忧的是(至少我上次尝试过),Debian 不允许你在一台机器上同时安装多于一组的 OpenGL 库,而且我不想放弃本地使用的硬件加速。
如果我以某种方式取得任何成功,我会在这里更新;我当然仍然对任何其他(可能的)解决方案/指针感兴趣。
进展:通过适当的 .deb 安装 VirtualGL 并按照说明进行操作(并不像乍一看那么糟糕;多种平台的覆盖范围在某种程度上使它们变得庞大)让我(硬件加速!)在紧密的 vnc 服务器中支持 GLX。我还是第一次看到这样的情况!
/opt/VirtualGL/bin/vglrun glxgears
进化也确实通过这种机制起作用,解决了我的主要问题。
然而,这种方法存在一些重大问题。它仅在有人登录到主机时才有效(并且不是当 gdm3“greeter”显示时,在这种情况下 vglrun 会收到“无法打开显示:0”错误),并且任何类型的显示转换(例如某人 ctrl-alt-Fn-ing 到虚拟控制台)都会杀死vglrun 应用程序出现“无法读取像素”错误)。不过屏幕锁定似乎还可以。就我的目的而言,我可以接受这一点(还有其他人是我通过 VNC 连接的计算机的主要用户,他们始终处于登录状态,并且最不可能执行像 ctrl-alt-Fn 这样的技术性操作从桌面),但对其他人来说可能并不理想。
更新:实际上,有一个修复程序可以在显示 gdm3“问候语”时启用 VNC+GLX。只需xhost +LOCAL:
在 的开头附近放置一行即可/etc/gdm3/Init/Default
。该vglserver_config
脚本实际上确实尝试执行此操作(对于不安全的设置),但它对 gdm3 的配置文件一无所知(但它确实检查 gdm 和 xdm)。尽管请注意,更好的方法(以及配置脚本尝试执行的操作,假设您在设置过程中使用 vglusers 组选择了更安全的选项)是有一个vglgenkey
那里,但这似乎并没有做到任何东西(没有/etc/opt/VirtualGL/vgl_xauth_key
按预期创建 a )。
更新:/etc/opt/VirtualGL/vgl_xauth_key
实际上,可以通过将 Debian-gdm 用户添加到 vglusers 组来启用 gdm3的创建。但这只是将问题转移到其他地方,vglrun 现在抱怨无法锁定 /var/run/gdm3/ (具有 root:Debian-gdm 权限)中的某些内容。我现在已经超出了我的能力范围,毫无疑问,可怕的不安全的xhost +LOCAL:
线路将不得不做。
更新:刚刚抽出时间将这台破旧的 Debian 机器从 Wheezy 更新到 Jessie,并从 SourceForge 更新到 virtualgl 2.5 debs。 vglrun evolution
一旦服务器配置了vglrun_config
.
更新:从Debian9(“Stretch”)开始,我转而使用tigervncserver(我认为是这个版本中Debian稳定版的新功能;通过tigervnc-standalone-server包)而不是virtualgl。请参阅其他答案。
答案3
我看到在 Debian9(“stretch”)中有一个叫做TigerVNC-独立服务器已经出现了。这似乎包括一些 OpenGL 支持(我注意到 mesa 是一个依赖项)。我在新的 Debian9 安装上安装它并启动它没有出现任何问题,并启动它,为我提供了一个支持 VNC(任何 VNC 客户端)的独立(不是“屏幕抓取”)运行 Gnome 的桌面(不需要搞乱 .Xsession 文件),这似乎运行evolution或glxgears没有任何问题。机器上不需要甚至安装 virtualgl。很不错! (尽管我强烈怀疑这个解决方案可能使用的是 SW 渲染,而使用 virtualgl 时我使用的是 GPU;对于现代 CPU 上的主要 2D 桌面应用程序来说,这已经很好了)。
请注意,tigervnc 服务器默认不接受远程(非本地主机)连接(尽管有一个命令行选项可以覆盖它);这应该(明智地)鼓励您使用 ssh 隧道!