如何解决旧 X 应用程序在现代 X 服务器上运行不正常的问题?

如何解决旧 X 应用程序在现代 X 服务器上运行不正常的问题?

我有一个旧的 X 应用程序作为复杂信号处理包的一部分提供。应用程序驻留在无显示服务器上,具有不同 X 服务器的客户端连接到它。

在旧的 Linux 客户端系统(例如 RHEL5)上,应用程序绘制良好,但在现代 Linux 客户端系统(例如 RHEL6、Centos5、Ubuntu10)上绘图存在缺陷 - 窗口是空白的,或者不刷新,或者乱码,或者在之前被遮挡的后面有空方块部分。

当 X 服务器调整为使用 BackingStore 选项时,问题部分消失,但这只是微小的改进。如何对应用程序进行故障排除以使其正确绘制窗口内容?必须启用任何特定的扩展和/或解决方法吗?任何旧的 X bug/细节都必须“支持”吗?

xdpyinfo编辑:我在这里上传了一个工作客户端的转储:http://pastebin.com/W0WHQ8hx和非工作客户在这里:http://pastebin.com/X49c6ckW。看起来主要的区别在于PseudoColor工作客户端上存在的视觉效果和非工作客户端上不存在的视觉效果,但我不确定这是否重要。

答案1

(这不是一个真正的答案,更多的是一堆建议 - 但它太长,无法放入评论中。)

命令xdpy信息提供 X 服务器功能列表,包括所有已注册扩展和视觉效果的列表;你可以从比较开始。

然而,你暗示重新启用 BackingStore 可以解决问题,这让我怀疑这是一个客户端问题:客户端对 X11 的工作做出了一些错误的假设,或者以某种方式违反了 ICCCM(Java 为此而臭名昭著),因此被破坏通过更新版本的 X11 更改了一些默认设置...

两个暂定的解决方法:

  • 跑步x11vnc在应用程序所在的节点上,然后从较新的主机通过 VNC 连接到该节点;您可以适当调整 x11vnc 屏幕的大小,以减少带宽消耗。

  • 跑步X巢在较新的节点上,让麻烦的应用程序连接到 Xnest 显示器;您应该能够编译足够旧的 Xnest 版本以与该应用程序兼容。

答案2

(这不是一个明确的答案,但有可能。)

可以编写仅在支持给定颜色数的显示器上运行的 X 应用程序。我遇到过一些旧程序,它们根本无法在非 8 位颜色的显示器上运行。工作显示屏提供PseudoColor视觉效果,使应用程序除了本机 24 位深度之外还可以使用 8 位或 12 位深度。非工作显示屏仅提供 24 位和 32 位视觉效果。

因此,当应用程序无法使用其最喜欢的颜色数量(最有可能是 256)与服务器交互时,这可能是应用程序中的一个错误。我不知道修复它有多难。

尝试在 VNC 中运行应用程序;Xvnc -depth 8Xvnc -cc 3(在真实VNC VNC服务器) 可能有帮助。

相关内容