我的问题最好用一个场景来解释。想象一下您的桌面运行某种形式的 Linux(我正在运行 arch)。现在我们还要添加一个在您的计算机上运行的 VNC 服务器,为您提供一个虚拟桌面。
我在桌面上打开 Firefox,然后登录到我的 vnc 来处理某些事情。如果我必须用 google 搜索某些内容,我将打开 Firefox 并收到会话已在运行的错误,因此现在我必须关闭 Firefox 之前正在运行的会话,然后在我的 vnc 中重新打开它。如果我忘记它正在我的 vnc 中运行,我必须执行相同的操作才能在桌面上打开它。
我知道有一些方法可以解决这个特定问题,但这只是一个例子。为什么(在本例中)Firefox 只需要分配给 1 个窗口?
为什么不能创建 Firefox 并且不将其分配给任何特定窗口,然后当我想要将它放在特定桌面上时,它只是将其加载到那里,而不必关闭并重新启动它,或启动另一个实例?我想更好的表达方式是:为什么图形进程不在自己的服务器上运行,然后移交给/移动到任何发出请求的桌面?
答案1
能够同时连接到多个 X11 服务器的程序非常非常罕见。它们大多是专门的应用程序,旨在监视一个 X11 会话并在另一个 X11 会话上显示结果,或类似的事情。一般应用程序实际上从不支持这一点。我不确定,但我猜想许多 X11 客户端库包含全局变量和其他与每个进程中只有一个 X11 连接这一假设相关的各种位。
这通常不是问题,因为如果您希望应用程序在两个不同的显示器上显示,您只需运行它的两个副本即可。问题是 Firefox 不支持在同一用户帐户上同时运行其自身的两个副本(无论它们是否在同一显示器上)。