2016-04-11 11 views
2

Ich habe ein Setup in Docker, mit dem GUI-Anwendung in Docker in Ubuntu 14.04.03 ausgeführt wird.Ausführen von mehreren GUIs in Docker mit X11 Forwarding

Die GUI-Anwendung wird mit einer Skriptdatei mit den erforderlichen Parametern gestartet. Das Setup funktioniert gut, wenn die Anwendung nur ein Fenster hat und ich die Ergebnisse einfach durch eine X11-Weiterleitung anzeigen kann. Dies ist der Befehl, den ich verwenden, um die Anwendung

sudo docker run -it \ 
-v /tmp/.X11-unix:/tmp/.X11-unix \ 
-e DISPLAY=$DISPLAY \ 
-w /Apps/ \ 
--rm appsdocker:v1 \ 
/bin/bash -c "./run_singleGUIapp.sh param1" 

laufen Aber wenn die GUI einen Druckknopf hat, dass, wenn darauf geklickt, öffnet sich ein neues Fenster, schlägt die GUI-Anwendung zu reagieren und nach einer Weile wieder in der Eingabeaufforderung .

Ich habe versucht, das Beispiel von dieser link ausgeführt, die erläutert, wie Firefox auf Docker mit X11-Weiterleitung ausgeführt wird. Sobald ich nach einer Abfrage auf dem Firefox suche, der in Docker läuft und versuche, 'in neuem Fenster zu öffnen' für jeden nachfolgenden Schlag, funktioniert die Anwendung. Ich habe dies mit der Annahme versucht, dass es auch zu einem nicht reagierenden Verhalten führen würde, aber es scheint, dass dies kein allgemeiner Fall ist und nur bei meinen Skripten beharrlich ist.

Ich verstehe, dass dies eine sehr vage Problembeschreibung ist, da ich Details der Anwendungen und der Umgebung nicht offen legen kann. Irgendwelche Hinweise darauf, wie mit einer GUI-Anwendung umzugehen ist, die sich selbst erzeugt, würden sehr geschätzt werden.

+0

Erstens brauchen Sie nicht zu schreiben: '-v /tmp/.X11-unix:/tmp/ .X11-Unix' und '-e DISPLAY = $ DISPLAY'. '-v /tmp/.X11-unix \ -e DISPLAY' ist genug. –

+0

Ich habe eine Lösung als eine Antwort beschrieben. Ich kann auch ein anderes Problem sein: das zweite Fenster wird in einer anderen Umgebung angezeigt, in der der Wert der 'DISPLAY'-Variablen nicht gesetzt ist. Versuchen Sie, mehr darüber zu schreiben, was passiert, nachdem Sie auf diese Schaltfläche geklickt haben. Wird eine neue Anwendung gestartet? –

Antwort

0

Es kann das Problem mit der X-Authentifizierung sein.

Versuchen Sie Folgendes zu tun. Auf dem Host:

  1. echo $DISPLAY und erinnere mich an die Nummer (so etwas wie :4)
  2. xauth list das Cookie mit der Nummer oben finden und die ganze Linie

Innen Docker kopieren:

  1. xauth add <paste the copied line>

(Wie Sie den Behälter nicht sind angebracht, können Sie diese Zeile in run Befehl passieren kann: /bin/bash -c "xauth add <cookie>; ./run_singleGUIapp.sh param1")