¿Es posible mover una ventana de una pantalla X a otra en el mismo host?

16

Estoy ejecutando XFCE 4.12 con 3 monitores configurados en dos pantallas X y dos tarjetas de video en la misma computadora. Dos de los monitores forman una única pantalla X con la funcionalidad nvidia twinview, que es Screen0 en Device0 en la configuración Xorg. El tercer monitor es para la segunda pantalla, que es Screen1 en Device1 en la configuración de Xorg. Puedo arrastrar ventanas bien entre los monitores en Screen0. También puedo mover mi mouse libremente entre Screen0 y Screen1 e incluso los datos del portapapeles se transportan entre las dos pantallas X bien.

Ambas pantallas X actúan como escritorios independientes que tienen su propio conjunto de ventanas gráficas. Me gusta de esta manera y es útil para hacer que un lado se "pegue" automáticamente. Sin embargo, si inicio un programa en una pantalla X, no puedo moverlo a la otra pantalla X simplemente arrastrándolo. Si quiero ejecutar ese programa en la otra pantalla, tengo que reiniciarlo en esa pantalla.

Mi pregunta es si hay forma de mover el programa mientras se ejecuta a la otra pantalla usando algún comando u otra función de X windows. Gracias.

Actualización: voy a comenzar una recompensa por esta pregunta, pero me he estado preguntando sobre esto por un tiempo. Para ganar la recompensa, debe proporcionar algunas citas como prueba.

deltaray
fuente
1
xpra ofrece algo bastante similar a lo que estás preguntando ...
vlp
Google también revela xmove
No recuerdo que tuve que cambiar algo en CentOS 5 o 6 para obtener ese comportamiento. ¿Qué distribución en qué versión estás usando aquí?
Nils
Esto parece un duplicado de unix.stackexchange.com/questions/152291/…
Nathan Fellman
@NathanFellman Posiblemente, pero ni siquiera creo que en mi caso estoy hablando de moverme entre pantallas. Según mi lista de procesos, solo estoy ejecutando una vez la instancia del proceso X, que es: 0. No hay: 1 o: 2, etc. Tal vez esto sea solo un problema con la forma en que XFCE administra múltiples pantallas o algo en mi configuración. Con respecto a los programas mencionados hasta ahora, ninguno de ellos parece estar todavía disponible o disponible. xmove tiene casi 20 años y no puedo encontrar una copia de XiMove. xpra también parece el tipo de programa incorrecto para lo que estoy tratando de hacer.
deltaray

Respuestas:

13

No puede mover una aplicación X iniciada directamente con el servidor X en el que finalmente se muestra la aplicación, esto se debe a que un cliente X está "vinculado al servidor X (pantalla X) en el que se inició durante toda su vida útil" [ 1 ] Esto es Lo más probable es que tenga que ver con los metadatos que el servidor X tiene sobre las ventanas de un cliente que no se pueden transferir fácilmente entre los servidores X.

Lo mismo se aplica a las pantallas configuradas por separado (cuando no se usan extensiones como Xinerama o Twinview) para programas que no tienen soporte multipantalla escrito explícitamente: "Con esta configuración no es posible mover ventanas entre pantallas, aparte de algunos programas especiales como GIMP y Emacs que tienen soporte para pantallas múltiples ". [ 2 ]

En teoría, si una aplicación fue diseñada para hacer frente a un cambio de contexto del servidor X, se le podría proporcionar el nuevo número de pantalla / pantalla, guardar el estado de sus ventanas, conectarse al nuevo servidor / pantalla X y resucitar sus ventanas, pero pocos Las aplicaciones se diseñarían de esta manera y necesariamente implicarían una gran cantidad de repeticiones o la inclusión de una biblioteca que facilitaría esto de alguna manera.

La mejor opción para usted es probablemente usar otras aplicaciones que puedan actuar como proxy entre un cliente X y el servidor X que se muestra de manera similar a la pantalla GNU que se puede usar para las aplicaciones de consola y el terminal. Xmove y Xpra [ 3 y 4 ] parecen ser las implementaciones más utilizadas para hacer esto. La advertencia de usarlos es que las aplicaciones que inicias tienen que registrarse con Xmove o Xpra como su servidor X para poder cambiar de contexto entre diferentes servidores de visualización.

Finalmente, hay otra pregunta, en SuperUser, que es hacer una pregunta similar para un propósito ligeramente diferente (reconectarse a X después de X crash, en lugar de desconexión / reconexión deliberada del cliente) [ 5 ]

Benjamín
fuente
2
Gracias por intentar responder, pero este no es el problema. Estoy hablando de moverme entre pantallas X en el mismo servidor, no entre servidores X.
deltaray
55
Me perdí ese matiz originalmente, disculpas. Desafortunadamente, sin una extensión como Xinerama que combina varias pantallas en una, parece que las aplicaciones tratan pantallas separadas en el mismo servidor como servidores lógicos separados y administran las conexiones a ellas por separado; vea el enlace [2] que he agregado en la última edición. La solución para mover una aplicación entre servidores X también debe ser válida para moverse entre pantallas, solo tendrá que especificar la parte de pantalla de la variable de entorno DISPLAY cuando (por ejemplo) adjunte Xpra.
Benjamin