![Gtk-警告**:无法打开显示](https://linux22.com/image/1446236/Gtk-%E8%AD%A6%E5%91%8A**%EF%BC%9A%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E6%98%BE%E7%A4%BA.png)
我有 centos 6 minimal (headless) 作为主机,并安装了 ubuntu 14.04 Desktop 作为客户机并使用 KVM。
Guest 内部部署了一个 Web 应用程序,它在后台打开和关闭一个 GTK 应用程序(javafx)。
我通过 ssh 从我的主机调用这个 Web 应用程序,命令为“curlhttp://guest/myapp/start“我观察了客户机操作系统中的日志并看到错误消息“Gtk-WARNING **:无法打开显示”
我不明白这个错误的原因。1) 这个 GTK 应用程序没有在主机上的 ssh 控制台中物理打开任何窗口,而且它是后台的。2) Guest 是桌面版本。
有人能帮我解决这个问题吗?由于客户端的安全要求,我无法启用 XWindows。
谢谢,
斯里达尔
答案1
“背景”实际上不会改变程序的工作方式。
当纯文本程序在“后台”运行时,它们仍然需要某物附加到“stdin”(键盘)和“stdout”(终端);它们只是用 /dev/null 代替实际的终端。
同样,无论你如何运行 GTK 程序,它仍然是 GTK 程序——它将总是尝试连接到 X11 或 Wayland 服务器并在那里打开其窗口。
因此你需要一些客户机上的 X11 服务器。您不需要需要一个完整的图形界面,仅 X 服务器;您甚至不需要 Xorg – 理想情况下它应该是专用于您的程序的东西,而不是通过控制台访问。
你最好的选择是使用虚拟主机或者贰伍(也许使用xpra
可以使配置更简单)。弄清楚如何在“后台”启动其中一个,然后确保您的 Web 应用设置了适当的环境变量 –DISPLAY=
和XAUTHORITY=
。
即使客人已经有一个带有 Xorg 的完整图形界面,您仍然需要告诉程序如何访问它。它不能只是随机地在某个地方弹出一个窗口(尤其是通过 SSH);它需要相同的环境变量来查找客户的 Xorg 服务器。(但是有一个问题,对于实际的图形界面,它们在每次重新启动后都会有所不同,因此您仍然应该使用 Xdummy 或 Xvfb 来获得可预测的地址。)