2017-08-04 1 views
0

Ich habe eine mit Swing geschriebene Java-Anwendung, die ich auf einem Remote-Linux-Server ausführen und auf meinem lokalen Computer (mit MacOS) anzeigen möchte.Der Versuch, die Java Swing-Anwendung remote anzeigen zu lassen (Linux)

Wenn ich hier suche, weiß ich, dass dies von X11 abhängt, und dass ich X11 sowohl auf der Client- als auch auf der Serverseite aktivieren muss.

Auf der Serverseite wird X11 installiert, indem die Datei/etc/ssh/sshd_config überprüft und bestätigt wird, dass "X11Forwarding" auf "yes" gesetzt ist. Ich habe auch bestätigt, dass xauth installiert ist und auf dem Pfad (in/usr/bin/xauth) ist.

Auf der Clientseite, ich rufe ssh mit den Optionen -X (Kapital) und -v auf. Die Option -v bewirkt, dass eine Reihe von Debug-Zeilen angezeigt wird, aber keine Referenz auf X11. Ich suchte nach etwas, das X11-Weiterleitung referenzierte, aber nichts wurde angezeigt (und nichts, das anzeigt, dass es auch unterdrückt wurde). Außerdem habe ich die Client-Seite (MacOS) in der/etc/ssh_config überprüft und sowohl "ForwardX11" als auch "ForwardX11Trusted" auf "yes" gesetzt.

Ich versuche, das Programm trotzdem auszuführen, bekomme ich eine "kopflose" Ausnahme und der Stack-Trace enthält meine Anwendung (so weiß ich, dass ich das richtige Programm ohne Klassenpfad Probleme aufrufen).

Dies ist der genau gleiche Fehler (und die gleiche Stacktrace), die ich erhalte, wenn ssh ohne die Option -X aufgerufen wird.

Ich habe dann versucht "Export DISPLAY =: 0.0" und "1.0" und bekomme eine andere Ausnahme ("Kann nicht mit X11-Fensterserver verbinden mit ': 0.0' als Wert der Anzeigevariable").

Ich weiß nicht genug, um zu verstehen, ob der X-Window-Server etwas ist, das auf dem Server oder meinem lokalen Mac ausgeführt werden muss.

Wenn es auf dem Mac ist, weiß ich (noch) nicht, wie das geht, aber ich werde das untersuchen. Ich suche nur nach einem Zeiger in die richtige Richtung. Hier

ist der Stack-Trace:

Exception in thread "main" java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it. 
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204) 
    at java.awt.Window.<init>(Window.java:536) 
    at java.awt.Frame.<init>(Frame.java:420) 
    at java.awt.Frame.<init>(Frame.java:385) 
    at javax.swing.SwingUtilities$SharedOwnerFrame.<init>(SwingUtilities.java:1758) 
    at javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1833) 
    at javax.swing.JDialog.<init>(JDialog.java:272) 
    at com.fi.tools.gui.common.BaseGuiDriver.start(BaseGuiDriver.java:35) 
    at com.fi.tools.gui.CreateWorkflowTask.<init>(CreateWorkflowTask.java:38) 
    at com.fi.tools.gui.CreateWorkflowTask.<init>(CreateWorkflowTask.java:33) 
    at com.fi.tools.gui.CreateWorkflowTask.main(CreateWorkflowTask.java:28) 

Der SSH-Login:

===> ~ $ ssh -X -v [email protected] 
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011 
debug1: Reading configuration data /etc/ssh_config 
debug1: /etc/ssh_config line 20: Applying options for * 
debug1: Connecting to app1 [16x.24y.5z.7w] port 22. 
debug1: Connection established. 
debug1: identity file /Users/dave/.ssh/id_rsa type -1 
debug1: identity file /Users/dave/.ssh/id_rsa-cert type -1 
debug1: identity file /Users/dave/.ssh/id_dsa type -1 
debug1: identity file /Users/dave/.ssh/id_dsa-cert type -1 
debug1: Enabling compatibility mode for protocol 2.0 
debug1: Local version string SSH-2.0-OpenSSH_6.2 
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.2 
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.2 pat OpenSSH* 
debug1: SSH2_MSG_KEXINIT sent 
debug1: SSH2_MSG_KEXINIT received 
debug1: kex: server->client aes128-ctr [email protected] none 
debug1: kex: client->server aes128-ctr [email protected] none 
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<2048<8192) sent 
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP 
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent 
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY 
debug1: Server host key: RSA ff:3c:2c:17:65:bc:be:c3:ba:c3:27:83:f6:6b:1d:e8 
debug1: Host 'app1' is known and matches the RSA host key. 
debug1: Found key in /Users/dave/.ssh/known_hosts:4 
debug1: ssh_rsa_verify: signature correct 
debug1: SSH2_MSG_NEWKEYS sent 
debug1: expecting SSH2_MSG_NEWKEYS 
debug1: SSH2_MSG_NEWKEYS received 
debug1: SSH2_MSG_SERVICE_REQUEST sent 
debug1: SSH2_MSG_SERVICE_ACCEPT received 
debug1: Authentications that can continue: publickey,password 
debug1: Next authentication method: publickey 
debug1: Trying private key: /Users/dave/.ssh/id_rsa 
debug1: Trying private key: /Users/dave/.ssh/id_dsa 
debug1: Next authentication method: password 
[email protected]'s password: 
debug1: Authentication succeeded (password). 
Authenticated to app1 ([16x.24y.5z.7w]:22). 
debug1: channel 0: new [client-session] 
debug1: Requesting [email protected] 
debug1: Entering interactive session. 
debug1: client_input_global_request: rtype [email protected] want_reply 0 
debug1: Sending environment. 
debug1: Sending env LANG = en_US.UTF-8 
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64) 
+0

Können Sie uns bitte die volle Stapelverfolgung geben? –

+0

Es war zu lang, um es hier als Kommentar hinzuzufügen, also fügte ich es in den ursprünglichen Beitrag oben hinzu. –

+0

OK, also bitte 'ssh -X -v your_server' (anstelle von' ssh -X your_server') und füge die Ausgabe dem ursprünglichen Post hinzu (es gibt Informationen über die Weiterleitung von X11). –

Antwort

1

In X11 Terminologie Programme eine Verbindung zum X11-Server als Clients. Das Swing-Programm auf Ihrem Linux-Server wäre also der Client des X-Servers, der auf Ihrem Mac läuft.

Jetzt läuft MacOS keinen X11-Server aus der Box. Sie müssen einen installieren und starten. Ich denke, https://www.xquartz.org/ ist die richtige Adresse, aber ich habe einen Mac für eine Weile nicht verwendet.

Verwandte Themen