GTK:如何忽略“无法打开显示”错误?

时间:2010-07-19 13:17:34

标签: user-interface gtk d gtkd dev-null

我使用gtkD绑定为D编程语言编写了一些GTK程序,否则它们是控制台应用程序,但能够在屏幕上显示图并将它们保存到文件中。我想在我只有基于控制台的SSH访问的机器上运行这些,这意味着这些图不会显示在屏幕上,但仍会写入文件。

当我调用Main.init()时,我得到一个Gtk-WARNING **:无法按预期打开显示。当我调用Main.initCheck()而忽略错误时,我只会在执行后因缺少屏幕而获得更多错误。

是否有一些简单的方法可以让我的程序忽略这样一个事实,即没有可用的屏幕,将其所有屏幕上的绘图都绘制到某个虚拟设备(相当于/ dev / null的图形)并且仍然实际绘制到Pixmaps和Pixbufs (将图表保存到文件中是必要的)并运行应用程序的非基于GUI的部分?

编辑:在应用程序启动窗口并阻止事件循环的情况下,理想的做法是立即关闭窗口(或者不首先打开窗口)并继续运行非窗口基于GUI的程序部分。如果这是不可能的,我可以通过确保我不启动任何窗口来解决它。

此外,如果没有屏幕,Pixbufs和Pixmaps似乎无法正常工作。我尝试绘制到Pixmap,创建一个Pixbuf,然后将结果保存到文件中,或者在调用Main.checkInit()之后,忽略错误或没有init语句,GTK就会抱怨缺少屏幕。

2 个答案:

答案 0 :(得分:1)

我认为最简单的解决方案是仅使用GdkPixbuf来处理你的情节;据我所知,gdk-pixbuf库只处理内存中的pixbufs,不需要窗口系统。保持代码的处理和显示部分严格分开。如果你这样做,那么没有屏幕也没关系。您甚至可以创建一个命令行选项来禁用绘制到屏幕。

你也可以使用GtkOffscreenWindow,但这只是从GTK 2.20开始提供的,据我所知,D绑定只能覆盖2.18。

或者,您可以在SSH会话中使用X转发;在SSH命令行上使用-X-Y。有关更多信息,请参阅SSH手册。如果您在SSH上运行的计算机上运行X服务器,则可以在本地计算机的屏幕上显示这些图。

答案 1 :(得分:0)

如果没有服务器,Pixmaps将无法运行 - 根据定义(在X术语中),它们是存储在X服务器上的图像资源。但是,Pixbufs存储在客户端应用程序中,它们应该在没有X的情况下工作。

如果您需要Pixmaps但不想使用图形,则有两种选择:

  1. 通过传递-X标志启用SSH X隧道。在这种情况下,您的应用程序将能够使用本地X服务器。
  2. 使用Xvfb - 它是虚拟X服务器,完全不输出,所有图形都存储在内存中。