可以将窗口从一个 X 屏幕移动到同一主机上的另一个 X 屏幕吗?

可以将窗口从一个 X 屏幕移动到同一主机上的另一个 X 屏幕吗?

我正在运行 XFCE 4.12,并在同一台计算机上将 3 个显示器设置为两个 X 屏幕和两个显卡。其中两个显示器使用 nvidia twinview 功能形成一个 X 屏幕,即 Xorg 配置中 Device0 上的 Screen0。第三个显示器用于第二个屏幕,即 Xorg 配置中 Device1 上的 Screen1。我可以在 Screen0 的显示器之间拖动窗口。我还可以在 Screen0 和 Screen1 之间自由移动鼠标,甚至剪贴板数据也可以在两个 X 屏幕之间传输。

这两个 X 屏幕都充当独立的桌面,拥有自己的一组视口。我喜欢这种方式,它对于使一侧自动“粘”很有用。但是,如果我在一个 X 屏幕上启动一个程序,我无法通过简单地将其拖动到另一个 X 屏幕上。如果我想在另一个屏幕上运行该程序,我必须在该屏幕上重新启动它。

我的问题是,是否有办法使用 X windows 的某些命令或其他功能在程序运行时将程序移动到另一个屏幕。谢谢。

更新:我将对这个问题开始悬赏,但我已经想知道这个问题有一段时间了。要获得赏金,您必须提供一些证明引用。

答案1

您无法移动直接通过最终显示该应用程序的 X 服务器启动的 X 应用程序,这是因为 X 客户端“在其整个生命周期内都与其启动时所在的 X 服务器(X 显示)绑定在一起”[1] 这很可能与 X 服务器保存的有关客户端窗口的元数据有关,这些元数据无法在 X 服务器之间轻松传输。

对于没有明确编写的多屏幕支持的程序来说,单独配置的屏幕(当不使用诸如 Xinerama 或 Twinview 之类的扩展时)也是如此 - “使用此配置,不可能在屏幕之间移动窗口,除了一些特殊的程序,如 GIMP 和 Emacs,它们具有多屏幕支持。”[2]

理论上,如果应用程序被设计为应对 X 服务器上下文切换,则可以为其提供新的显示/屏幕编号、保存其窗口的状态、连接到新的 X 服务器/屏幕并恢复其窗口,但很少有应用程序将以这种方式设计,并且必然涉及大量样板文件或包含可以以某种方式促进这一点的库。

对您来说最好的选择可能是使用其他应用程序,这些应用程序可以充当 X 客户端和显示 X 服务器之间的代理,就像 GNU 屏幕可用于控制台应用程序和终端一样。 Xmove 和 Xpra [3&4] 似乎是最广泛使用的实现。使用这些的注意事项是,您启动的应用程序必须向 Xmove 或 Xpra 注册作为其 X 服务器,以便能够在不同显示服务器之间进行上下文切换。

最后还有另一个问题,关于超级用户,这是出于稍微不同的目的提出类似的问题(在 X 崩溃后重新连接到 X,而不是故意断开/重新连接客户端)[5]

相关内容