【发布时间】:2010-07-19 13:17:33
【问题描述】:
我已经为 D 编程语言编写了一些使用 gtkD 绑定的 GTK 程序,这些程序原本是控制台应用程序,但能够在屏幕上显示绘图并将它们保存到文件中。我想在我只有基于控制台的 SSH 访问权限的机器上运行这些,这意味着这些图不会显示在屏幕上,但仍会写入文件。
当我调用 Main.init() 时,我得到一个 Gtk-WARNING **: cannot open display,如预期的那样。当我改为调用 Main.initCheck() 并忽略错误时,我只是在稍后的执行中遇到更多与缺少屏幕相关的错误。
是否有一些简单的方法可以让我的程序忽略没有可用屏幕的事实,将其所有的屏幕绘制到某个虚拟设备(相当于 /dev/null 的图形)并仍然实际绘制到 Pixmaps 和 Pixbufs (将绘图保存到文件所必需的)并运行应用程序的非基于 GUI 的部分?
编辑:如果应用程序启动一个窗口并阻塞事件循环,理想的做法是立即关闭窗口(或一开始就没有成功打开它)并继续运行非程序的基于 GUI 的部分。如果这是不可能的,我可以通过确保不启动任何窗口来解决它。
此外,Pixbufs 和 Pixmaps 似乎在没有屏幕的情况下无法工作。我尝试绘制到 Pixmap,从中创建一个 Pixbuf,然后在调用 Main.checkInit() 并忽略错误或没有 init 语句之后将结果保存到文件中,无论哪种方式 GTK 都会抱怨缺少屏幕。
【问题讨论】:
-
我可以很容易地看到 GUI 工具包的开发人员甚至从未考虑过有人想要在没有 GUI 的情况下运行 GUI 应用程序。通常,这没有任何意义。事实上,如果有可能,我会比没有可能更惊讶。这就像尝试在没有标准输入、标准输出或标准错误的情况下运行控制台应用程序。事情不是那样的。我明白为什么在这种情况下你会想要它,但你正在做一些非常不正常的事情。如果没有 GUI(无论是通过命令行标志还是通过检测它),将您的应用程序更改为仅跳过图形内容似乎更合理。
-
@Johnathan:我想更改我的应用程序,但似乎不可能将我的绘图库移植到完全不同的图形后端(最终可能会发生,但我不觉得喜欢在短期内做)。
标签: user-interface gtk d gtkd dev-null