如何在不同的X11会话中打开窗口?

时间:2009-05-31 03:35:55

标签: linux x11 remote-desktop

仅限linux: 我想为我的应用程序打开两个窗口,一个在计算机的主屏幕上,另一个在虚拟X11会话上,只能由远程桌面访问。有些X11专家可以告诉我这是怎么做到的吗?

4 个答案:

答案 0 :(得分:1)

我对这个问题有点不清楚,但这是一个假设的设置:

我坐在我的电脑上(我们称之为根会话)我有一个shell。在这种情况下,有一个环境变量DISPLAY,其值为“127.0.0.1:0.0”。

第二个会话开始了。您需要知道此机器上的显示变量。如果它也在localhost上,它可能类似于“127.0.0.1:1.0”。如果您在另一台主机上执行“echo $ DISPLAY”,它会告诉您这一点。如果它报告“:1.0”或没有“127.0.0.1”的东西那没关系。如果未指定地址,则隐含localhost。

接下来,在返回根会话之前,您需要运行“xhost”以允许其他来源在此主机上显示窗口。 (免责声明:我要告诉你的是非常不安全,所以如果你在一个不安全的网络上,你可能想要阅读xhost的手册页)。在另一个显示器上的xterm中键入“xhost +”。此命令(特别是“+”选项)允许任何主机在此显示上弹出窗口。

那么你要做的就是回到root会话shell并且(我假设bash)运行“export DISPLAY =”127.0.0.1:1.0“。然后运行”xterm“,它应该弹出窗口在另一场会议上。

我希望这会有所帮助。

如果有任何不明确的情况,你可以搜索“X windows DISPLAY变量”。

答案 1 :(得分:1)

这取决于你编程的级别 - 如果你直接调用Xlib,我想你知道XCreateWindow的第一个参数是Display *,当然这就是你的方式告诉X11创建窗口的位置。 http://tronche.com/gui/x/xlib/window/XCreateWindow.html有关详情,请参阅。

如果您正在使用其他语言/框架/等,那么如果您提到它们是哪些语言/框架将会有所帮助。

答案 2 :(得分:1)

您需要设置 DISPLAY 环境变量,如下所示:

DISPLAY=host:0.0

有关详细信息,请参阅X manpage

答案 3 :(得分:1)

programmatic interface to this $DISPLAY functionality in xlib appears to be called XOpenDisplay()。您需要管理两个(或更多)Display个对象。

各种更高级别的界面工具包(qt,...)可能提供更抽象的界面。这样可以省去相当大的痛苦。

祝你好运。