Nur Linux: Ich möchte zwei Fenster für meine Anwendung öffnen, eine auf dem Hauptbildschirm des Computers und eine auf einer virtuellen X11-Sitzungen, auf die nur über Remote Desktop zugegriffen werden kann. Kann mir ein X11-Experte sagen, wie das geht?Wie öffne ich ein Fenster in einer anderen X11-Sitzung?
Antwort
Ich bin ein wenig über die Frage unklar, aber hier ist eine hypothetische Setup:
ich auf meinem Computer sitze (wir, dass die Wurzel Sitzung nennen wollen), und ich habe eine Schale. In diesem Fall gibt es eine Umgebungsvariable DISPLAY mit dem Wert "127.0.0.1.0.0".
Eine zweite Sitzung wird gestartet. Sie müssen wissen, was die Anzeigevariable auf diesem Rechner ist. Wenn es auch auf dem localhost ist, kann es etwas wie "127.0.0.1:1.0" sein. Wenn Sie ein "Echo $ DISPLAY" auf dem anderen Host machen, wird es Ihnen dies sagen. Wenn es ": 1.0" oder etwas ohne "127.0.0.1" meldet, ist das in Ordnung. Der localhost wird impliziert, wenn eine Adresse nicht angegeben ist.
Bevor Sie wieder zur root-Sitzung zurückkehren, müssen Sie "xhost" ausführen, damit andere Quellen Fenster auf diesem Host anzeigen können. (Haftungsausschluss: Was ich dir sagen werde, ist furchtbar unsicher, also solltest du vielleicht die Manpage für xhost lesen, wenn du in einem unsicheren Netzwerk bist). Geben Sie "xhost +" in einem xterm auf dem anderen Display ein. Dieser Befehl (insbesondere die Option "+") erlaubt jedem Host, Fenster auf dieser Anzeige zu öffnen.
Also alles, was Sie tun müssen, ist zurück zu Ihrer root-Session-Shell und (ich nehme bash an) run "Export DISPLAY =" 127.0.0.1:1.0 ". Führen Sie dann" xterm ", die das Fenster haben sollte up in der anderen Sitzung.
ich hoffe, das hilft.
Sie könnten für „X-Windows-DISPLAY Variable“ eine Suche, wenn irgendetwas davon unklar.
Es hängt davon ab, auf welcher Ebene du bist Programmierung - wenn Sie direkt in Xlib aufrufen, stelle ich mir vor, Sie wissen, dass das erste Argument zu XCreateWindow
ist ein Display *
und natürlich th Sie sagen X11, wo das Fenster erstellt werden soll. http://tronche.com/gui/x/xlib/window/XCreateWindow.html für Details, falls es hilft.
Wenn es andere Sprachen/Frameworks/etc, die Sie verwenden, wäre es hilfreich, wenn Sie erwähnt, welche sie sind.
Sie benötigen die DISPLAY Umgebungsvariable wie folgt festgelegt:
DISPLAY=host:0.0
die X manpage für mehr Details.
Die programmatic interface to this $DISPLAY
functionality in xlib
appears to be called XOpenDisplay()
. Sie müssen zwei (oder mehr) Display
Objekte verwalten.
Es ist möglich, dass die verschiedenen Interface-Toolkits der höheren Ebene (qt, ...) eine abstrahiertere Schnittstelle bereitstellen. Das würde dir erhebliche Schmerzen ersparen.
Viel Glück.
Bitte nicht "schrecklich unsichere" Dinge empfehlen. – andrewdotn