Kann ein Fenster auf demselben Host von einem X-Bildschirm auf einen anderen verschoben werden?

16

Ich verwende XFCE 4.12 mit 3 Monitoren, die auf zwei X-Bildschirmen und zwei Grafikkarten auf demselben Computer installiert sind. Zwei der Monitore bilden mit der nvidia twinview-Funktion einen einzigen X-Bildschirm. Dies ist Screen0 auf Device0 in der Xorg-Konfiguration. Der dritte Monitor ist für den zweiten Bildschirm vorgesehen, nämlich Bildschirm1 auf Gerät1 in der Xorg-Konfiguration. Ich kann feine Fenster zwischen den Monitoren auf Screen0 ziehen. Ich kann auch meine Maus frei zwischen Screen0 und Screen1 bewegen und sogar die Daten der Zwischenablage werden zwischen den beiden X-Bildschirmen übertragen.

Beide X-Bildschirme fungieren als unabhängige Desktops mit eigenen Ansichtsfenstern. Ich mag es so und es ist nützlich, um eine Seite automatisch "kleben" zu lassen. Wenn ich jedoch ein Programm auf einem X-Bildschirm starte, kann ich es nicht durch einfaches Ziehen auf den anderen X-Bildschirm verschieben. Wenn ich das Programm auf dem anderen Bildschirm ausführen möchte, muss ich es auf diesem Bildschirm neu starten.

Meine Frage ist, ob es eine Möglichkeit gibt, das Programm zu verschieben, während es mit einem Befehl oder einer anderen Funktion von X-Fenstern auf dem anderen Bildschirm ausgeführt wird. Vielen Dank.

Update: Ich werde mit dieser Frage ein Kopfgeld anfangen, aber ich habe mich eine Weile darüber gewundert. Um das Kopfgeld zu verdienen, müssen Sie einige Nachweise vorlegen.

DeltaRay
quelle
1
xpra bietet etwas ziemlich ähnliches, was Sie fragen ...
vlp
googeln zeigt auch xmove
Ich erinnere mich nicht, dass ich unter CentOS 5 oder 6 etwas ändern musste, um dieses Verhalten zu erreichen. Welche Distribution in welcher Version verwenden Sie hier?
Nils
Dies sieht aus wie ein Duplikat von unix.stackexchange.com/questions/152291/…
Nathan Fellman
@ NathanFellman Möglicherweise, aber ich glaube nicht, dass ich in meinem Fall über das Wechseln zwischen Displays spreche. Laut meiner Prozessliste führe ich nur eine Instanz des X-Prozesses aus, nämlich: 0. Es gibt kein: 1 oder: 2 usw. Vielleicht ist dies nur ein Problem mit der Verwaltung mehrerer Bildschirme durch XFCE oder etwas in meiner Konfiguration. In Bezug auf die bisher erwähnten Programme scheint keines von ihnen noch gepflegt oder verfügbar zu sein. xmove ist fast 20 Jahre alt und ich kann keine Kopie von XiMove finden. xpra scheint auch die falsche Art von Programm für das zu sein, was ich versuche.
Dienstag,

Antworten:

13

Sie können eine X-Anwendung, die direkt auf dem X-Server gestartet wurde, auf dem die Anwendung letztendlich angezeigt wird, nicht verschieben. Dies liegt daran, dass ein X-Client "an den X-Server gebunden ist (X-Anzeige), auf dem er während seiner Lebensdauer gestartet wurde" [ 1 ] Am wahrscheinlichsten ist dies mit Metadaten zu tun, die der X-Server über die Fenster eines Clients enthält, die nicht einfach zwischen X-Servern übertragen werden können.

Dasselbe gilt für separat konfigurierte Bildschirme (wenn keine Erweiterungen wie Xinerama oder Twinview verwendet werden) für Programme, in denen keine explizite Unterstützung für mehrere Bildschirme angegeben ist - "Mit dieser Konfiguration ist es nicht möglich, Fenster zwischen Bildschirmen zu verschieben ein paar spezielle Programme wie GIMP und Emacs, die Multi-Screen-Unterstützung bieten. "[ 2 ]

Theoretisch könnte eine Anwendung, die für die Bewältigung eines X-Server-Kontextwechsels entwickelt wurde, mit der neuen Anzeige- / Bildschirmnummer versehen werden, den Status ihrer Fenster speichern, eine Verbindung mit dem neuen X-Server / Bildschirm herstellen und ihre Fenster wiederherstellen, aber nur wenige Anwendungen würden auf diese Weise entworfen und würden notwendigerweise entweder viel Boilerplate oder die Aufnahme einer Bibliothek beinhalten, die dies irgendwie erleichtern würde.

Die beste Option für Sie ist wahrscheinlich, andere Anwendungen zu verwenden, die als Proxy zwischen einem X-Client und dem angezeigten X-Server fungieren können, ähnlich wie der GNU-Bildschirm für Konsolenanwendungen und das Terminal verwendet werden kann. Xmove und Xpra [ 3 & 4 ] scheinen die am häufigsten verwendeten Implementierungen dafür zu sein. Die Einschränkung bei der Verwendung dieser Anwendungen besteht darin, dass die Anwendungen, die Sie starten, bei Xmove oder Xpra als X-Server registriert werden müssen, um in der Lage zu sein, den Kontext zwischen verschiedenen Anzeigeservern zu wechseln.

Schließlich gibt es eine andere Frage zu SuperUser, die eine ähnliche Frage für einen etwas anderen Zweck stellt (Verbindung zu X nach X-Absturz wiederherstellen, statt absichtlich den Client zu trennen / erneut zu verbinden). [ 5 ]

Benjamin
quelle
2
Danke, dass du versucht hast zu antworten, aber das ist einfach nicht das Problem. Ich spreche über das Verschieben zwischen X-Bildschirmen auf demselben Server, nicht zwischen X-Servern.
Donnerstag,
5
Ich habe diese Nuance ursprünglich verpasst, entschuldige mich. Leider scheinen Anwendungen ohne eine Erweiterung wie Xinerama, die mehrere Bildschirme zu einem verschmilzt, separate Bildschirme auf demselben Server als separate logische Server zu behandeln und Verbindungen zu ihnen separat zu verwalten - siehe den Link [2], den ich in der letzten Bearbeitung hinzugefügt habe. Die Problemumgehung für das Verschieben einer Anwendung zwischen X-Servern sollte auch für das Verschieben zwischen Bildschirmen gelten. Sie müssen lediglich den Bildschirmteil der Umgebungsvariablen DISPLAY angeben, wenn Sie beispielsweise Xpra anhängen.
Benjamin