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


16

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

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

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

更新:我将开始悬赏这个问题,但我一直对此感到疑惑。为了获得赏金,您必须提供一些引证作为证明。


1
xpra提供的功能与您所要求的非常相似...
vlp 2015年

谷歌搜索还揭示了xmove

我不记得我必须在CentOS 5或6上进行一些更改才能获得这种性能。您在这里使用哪个版本的发行版?
尼尔斯


@NathanFellman可能,但就我而言,我什至没有想到要在显示器之间移动。根据我的进程列表,我只运行一次X进程的实例,即:0。没有:1或:2等。也许这只是XFCE如何管理多个屏幕或配置中的某些问题。关于到目前为止提到的程序,它们似乎都没有被维护或可用。xmove已经快20岁了,我找不到XiMove的副本。对于我尝试执行的操作,xpra似乎也似乎是错误的程序。
deltaray

Answers:


13

您无法移动直接在最终显示该应用程序的X服务器上启动的X应用程序,这是由于X客户端“在其生命周期内已绑定到在其上启动的X服务器(X显示)” [ 1 ] X服务器最可能处理的是与客户机窗口相关的元数据,这些元数据无法在X服务器之间轻松地传输。

对于单独配置的屏幕(当不使用扩展程序,例如Xinerama或Twinview时)也是如此,这些程序不明确地编写有不支持多屏幕的程序-“通过这种配置,除了在屏幕之间移动窗口外,一些具有多屏支持的特殊程序,例如GIMP和Emacs。” [ 2 ]

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

对您来说,最好的选择是使用其他应用程序,它们可以充当X客户端和显示的X服务器之间的代理,其方式类似于GNU屏幕可以用于控制台应用程序和终端。Xmove和Xpra [ 34 ]似乎是执行此操作最广泛使用的实现。使用这些警告说明的是,您启动的应用程序必须向Xmove或Xpra注册作为其X服务器,以便能够在不同的显示服务器之间进行上下文切换。

最后,还有一个关于SuperUser的问题,就是出于类似的目的而问类似的问题(X崩溃后重新连接到X,而不是故意断开/重新连接客户端)[ 5 ]


2
感谢您尝试回答,但这不是问题所在。我说的是在同一服务器的X屏幕之间移动,而不是X服务器之间。
deltaray

5
我很想念那个细微的差别,抱歉。不幸的是,没有像Xinerama这样的扩展程序,它将几个屏幕合并为一个屏幕,看来应用程序将同一服务器上的单独屏幕视为单独的逻辑服务器,并分别管理与它们的连接-请参阅我在上一次编辑中添加的链接[2]。在X服务器之间移动应用程序的变通方法也应该在屏幕之间移动时也适用,您仅需在(例如)附加Xpra时指定DISPLAY环境变量的屏幕部分。
本杰明
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.