Ich versuche, gedit
von 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?
Ich versuche, gedit
von 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:
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:
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.
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, gedit
aber der Vorgang ist für alle gleich. Abhängig davon, wo Sie das Grafikfenster sehen möchten, springen Sie zur rechten Überschrift.
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 -X
der 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.
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.0
ihn 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.
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}"; done
auf 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 DISPLAY
Variable entsprechend einstellen DISPLAY=hostname:0.0
. Ssh erledigt dies auf vernünftige Weise für Sie, wenn Sie die -X
Option bereitstellen .
* Hinweis: Es gibt vermutlich einen besseren Weg als diese for-Schleife.
Verwenden Sie einen Shell-Texteditor. vi
, vim
, nano
Und emacs
sind die häufigste und mindestens einer von ihnen wird installiert und betriebsbereit sein. Von ihnen nano
ist die einfachste und selbsterklärendste.
for
Schleife 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 ..
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.