Wie führe ich eine grafische Anwendung auf einem Remote-Server aus, wenn ich über SSH angemeldet bin?


14

Ich versuche, geditvon einem SSH-Terminal unter Windows aus zu starten , das mit einer Amazon EC2-Instanz unter Ubuntu 12.04 Server verbunden ist, und erhalte den folgenden Fehler:

Cannot open display:

Wie behebe ich das?

Antworten:


14

Da Sie Windows auf Ihrer Seite verwenden, benötigen Sie einen SSH-Client, auf dem ein lokaler X-Server unter Windows ausgeführt wird, um grafische Anwendungen vom Server aus auf Ihrem Bildschirm auszuführen.

Aus Erfahrung würde ich das kostenlose MobaXTerm empfehlen, das diese Funktionalität eingebaut hat. Bitte laden Sie es herunter und probieren Sie es aus:

Bildbeschreibung hier eingeben

Wenn Sie Fehler erhalten, die wegen manchmal ein minimales Server - Image nicht eingerichtet werden kann , um damit X-Forwarding hinein. In diesem Fall kommentieren Sie bitte, und ich helfe Ihnen bei der Lösung. Ich habe das mit vielen minimalen VPSs gemacht, auf denen Ubuntu / Debian läuft.


17

Sie verbinden sich also von Ihrem Heim-PC (nennen wir ihn Ihren Computer ) über ssh mit einem Server (nennen wir ihn Server ) ? Sie möchten über Ihren Rechner ein Programm mit einem Grafikfenster auf dem Server starten? Wenn das stimmt, lesen Sie unbedingt weiter.

Rufen wir das Programm zum Starten auf, geditaber der Vorgang ist für alle gleich. Abhängig davon, wo Sie das Grafikfenster sehen möchten, springen Sie zur rechten Überschrift.

Fenster auf dem Bildschirm Ihres Computers

Wenn Sie das Fenster von gedit auf Ihrem Remotecomputer sehen und verwenden möchten, aber auf dem Server starten möchten, sollte Ihre Shell-Sitzung folgendermaßen aussehen:

user@remote-machine:~$ ssh -X user@server
Last login: Tue Aug 14 13:47:04 2012 from clientXX
*******************************************************************************
M O T D (Message Of The Day)
*******************************************************************************
user@server:~$ gedit .bash_aliases 

** (gedit:7851): WARNING **: Could not load theme icon gtk-home: Icon 'gtk-home' not present in theme

(gedit:7851): Gtk-WARNING **: Attempting to store changes 

Beachten Sie die Warnungen, sie sind normal - das gedit-Fenster wird auf dem Bildschirm Ihres Remote-Computers so angezeigt, als würde es auf dem Server aussehen. Der Trick besteht darin, die "-X" -Option zu verwenden, in ssh -Xder das X-Tunneln aktiviert und das gesetzt wirdDISPLAY Variable richtig gesetzt wird.

Dies setzt voraus, dass Sie einen SSH-Client verwenden, der X11 unterstützt, und dass auf Ihrem Server ein X-Server ausgeführt wird (einige ohne GUIs führen keinen X-Server aus). Besonders unter Windows kann dies ein Problem sein, da die meisten Windows-Terminal-Programme kein X haben. Wie izx sagte, ist der MobaXTerm einer der vielen SSH-Clients für Windows mit einem X-Server.

Für einen Server ohne X11 müsste er jedoch installiert werden.

Auf dem Bildschirm des Servers

Sie können eine Instanz auch auf dem Bildschirm Ihres Servers starten, indem Sie gedit wie folgt aufrufen:

ssh user@server
DISPLAY=:0.0 gedit

Sie müssen den richtigen Wert einsetzen, anstatt :0.0ihn auf dem richtigen X-Bildschirm anzuzeigen (nur wichtig, wenn mehrere Bildschirme mit Ihrem Server verbunden sind oder wenn die Konfiguration etwas eigenartig ist).

Hier ist das häufigste Szenario, in dem dies nicht funktioniert, wenn dem Server ein X11-Server fehlt, aber kein Monitor angeschlossen ist oder keine grafische Benutzeroberfläche vorhanden ist und Sie dies nicht lesen würden: D.

Ein bisschen Theorie

Ich bin kein Experte in diesem, aber die Art , wie ich denke , es funktioniert , ist, dass jeder physischen Bildschirm, dh jeder Monitor an einen einzelnen Computer angeschlossen bekommt eine laufende Nummer in Form von 0.0, 1.0, 2.0, ...

Diese Nummer wird vom X-Window-System aka X11 vergeben. Dies ist eine Ebene, um ein Netzwerk und eine grundlegende grafische Oberfläche bereitzustellen, auf die Unity, Gnome, KDE und dergleichen aufbauen können.

Sie können sehen, wie viele Anzeigen ein bestimmter Computer hat und welche Nummern verwendet werden, indem Sie for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; doneauf dem betreffenden Computer ausführen. * Dann hat jeder Computer, der so konfiguriert ist, dass seine Bildschirme verfügbar sind und auf dem ein X-Server ausgeführt wird, einen Hostnamen. Sie können einen Host-Bildschirm von jedem Computer im selben Netzwerk aus verwenden, indem Sie Ihre DISPLAYVariable entsprechend einstellen DISPLAY=hostname:0.0. Ssh erledigt dies auf vernünftige Weise für Sie, wenn Sie die -XOption bereitstellen .

* Hinweis: Es gibt vermutlich einen besseren Weg als diese for-Schleife.

Wenn alle Stricke reißen

Verwenden Sie einen Shell-Texteditor. vi, vim, nanoUnd emacssind die häufigste und mindestens einer von ihnen wird installiert und betriebsbereit sein. Von ihnen nanoist die einfachste und selbsterklärendste.


@coding crow: Wenn Sie SSHing unter Windows verwenden, hängt es vom Client ab, ob dies funktioniert oder nicht. Einige Clients kommunizieren nicht mit X11 und daher auch nicht mit X-Forwarding - bei manchen funktioniert es jedoch einwandfrei. Wenn es nicht funktioniert, ändern Sie den SSH-Client für Windows oder verwenden Sie nano, vim oder emacs, wie in seiner Antwort vorgeschlagen.
con-f-use

Ja, ich habe eine Ablehnung erhalten, sie in meinem Profil gesehen und mich gefragt, warum es keinen Kommentar oder sonst etwas gibt. Nicht so wichtig, hatte nichts mit dir zu tun, nur gewundert - ich bin froh, dass dein Problem gelöst ist und ich könnte dir hier etwas helfen.
Con-F-Use

Ich habe die forSchleife ein wenig modifiziert. Sie zeigt jetzt nur die Anzeigeadresse an, z :0 :0.0. Fühlen Sie sich frei, zurück zu kehren, wenn Sie denken, es ist nicht das, was Sie wollen ..
Heemayl

0

Was con-f-use gesagt hat .

Grundsätzlich haben Sie ein Terminal über SSH und Gedit ist ein GUI-Programm. Mit der Antwort von con-f-use funktioniert es in einer Linux-GUI-Client-Sitzung.

Die andere Möglichkeit wäre, einen Nicht-GUI-Editor wie Nano, Vi oder zahlreiche andere zu verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.