Est-il possible de déplacer une fenêtre d'un écran X à un autre sur le même hôte?

16

J'utilise XFCE 4.12 avec 3 écrans configurés sur deux écrans X et deux cartes vidéo sur le même ordinateur. Deux des moniteurs forment un seul écran X en utilisant la fonctionnalité nvidia twinview, qui est Screen0 sur Device0 dans la configuration Xorg. Le troisième moniteur est pour le deuxième écran qui est Screen1 sur Device1 dans la configuration Xorg. Je peux très bien faire glisser les fenêtres entre les moniteurs de Screen0. Je peux également déplacer librement ma souris entre Screen0 et Screen1 et même les données du presse-papiers sont transportées entre les deux écrans X ok.

Ces deux écrans X agissent comme des bureaux indépendants qui ont leur propre ensemble de fenêtres. Je l'aime de cette façon et c'est utile pour faire "coller" un côté automatiquement. Cependant, si je démarre un programme sur un écran X, je ne peux pas le déplacer vers l'autre écran X en le faisant simplement glisser. Si je veux exécuter ce programme sur l'autre écran, je dois le redémarrer sur cet écran.

Ma question est de savoir s'il existe un moyen de déplacer le programme pendant son exécution vers l'autre écran en utilisant une commande ou une autre fonction de X Windows. Merci.

Mise à jour: je vais commencer une prime sur cette question mais je me pose des questions à ce sujet depuis un moment. Pour gagner la prime, vous devez fournir une citation pour preuve.

deltaray
la source
1
xpra offre quelque chose d'assez similaire à ce que vous demandez ...
vlp
googling révèle également xmove
Je ne me souviens pas que j'ai dû changer quelque chose sur CentOS 5 ou 6 pour obtenir ce comportement. Quelle distribution dans quelle version utilisez-vous ici?
Nils
Cela ressemble à un doublon de unix.stackexchange.com/questions/152291/…
Nathan Fellman
@NathanFellman Peut-être, mais je ne pense même pas dans mon cas que je parle de passer d'un affichage à l'autre. Selon ma liste de processus, je ne lance qu'une seule fois l'instance du processus X, qui est: 0. Il n'y a pas: 1 ou: 2, etc. Peut-être que c'est juste un problème avec la façon dont XFCE gère plusieurs écrans ou quelque chose dans ma configuration. En ce qui concerne les programmes mentionnés jusqu'à présent, aucun ne semble être encore maintenu ou disponible. xmove a presque 20 ans et je ne trouve pas de copie de XiMove. xpra semble également être le mauvais type de programme pour ce que j'essaie de faire.
deltaray

Réponses:

13

Vous ne pouvez pas déplacer une application X démarrée directement avec le serveur X sur lequel l'application est finalement affichée, cela est dû au fait qu'un client X est «lié au serveur X (affichage X) sur lequel il a été démarré pour sa durée de vie» [ 1 ] le plus susceptible de faire avec les métadonnées que le serveur X détient sur les fenêtres d'un client qui ne peuvent pas être facilement transférées entre les serveurs X.

Il en va de même pour les écrans configurés séparément (lorsque vous n'utilisez pas d'extensions telles que Xinerama ou Twinview) pour les programmes qui ne prennent pas en charge plusieurs écrans explicitement écrits - "Avec cette configuration, il n'est pas possible de déplacer des fenêtres entre les écrans, à l'exception de quelques programmes spéciaux comme GIMP et Emacs qui prennent en charge plusieurs écrans. "[ 2 ]

En théorie, si une application a été conçue pour faire face à un changement de contexte du serveur X, elle pourrait être fournie avec le nouveau numéro d'affichage / d'écran, enregistrer l'état de ses fenêtres, se connecter au nouveau serveur / écran X et ressusciter ses fenêtres, mais peu les applications seraient conçues de cette manière et impliqueraient nécessairement soit beaucoup de passe-partout, soit l'inclusion d'une bibliothèque qui faciliterait cela d'une manière ou d'une autre.

La meilleure option pour vous est probablement d'utiliser d'autres applications qui peuvent agir comme proxy entre un client X et le serveur X d'affichage de la même manière que l'écran GNU peut être utilisé pour les applications de console et le terminal. Xmove et Xpra [ 3 & 4 ] semblent être les implémentations les plus utilisées pour ce faire. La mise en garde de ceux-ci est que les applications que vous démarrez doivent s'enregistrer auprès de Xmove ou Xpra en tant que serveur X afin de pouvoir basculer en contexte entre différents serveurs d'affichage.

Enfin, il y a une autre question, sur SuperUser, qui pose une question similaire dans un but légèrement différent (se reconnecter à X après un crash X, plutôt que de déconnecter / reconnecter délibérément le client) [ 5 ]

Benjamin
la source
2
Merci d'avoir essayé de répondre, mais ce n'est tout simplement pas le problème. Je parle de se déplacer entre les écrans X dans le même serveur, pas entre les serveurs X.
deltaray
5
J'ai manqué cette nuance à l'origine, excuses. Malheureusement, sans une extension telle que Xinerama qui fusionne plusieurs écrans en un seul, il semble que les applications traitent des écrans séparés sur le même serveur comme des serveurs logiques distincts, et gèrent les connexions à eux séparément - voir le lien [2] que j'ai ajouté dans la dernière édition. La solution de contournement pour déplacer une application entre des serveurs X devrait également s'appliquer pour passer d'un écran à l'autre, il vous suffira de spécifier la partie écran de la variable d'environnement DISPLAY lorsque (par exemple) vous attachez Xpra.
Benjamin