Estoy tratando de ejecutar gedit
desde un terminal SSH en Windows, conectado a una instancia de Amazon EC2 que ejecuta Ubuntu 12.04 Server y obtengo este error:
Cannot open display:
¿Cómo lo soluciono?
Como está utilizando Windows de su lado, necesitará un cliente SSH que ejecute un servidor X local en Windows para ejecutar aplicaciones gráficas desde el servidor de forma remota en su pantalla.
Por experiencia, recomendaría el MobaXTerm gratuito que tiene esta funcionalidad incorporada. Descárgalo y pruébalo:
Si obtiene algún error, es porque a veces una imagen mínima del servidor puede no estar configurada para permitir el reenvío de X en ella. En ese caso, comente y lo ayudaré a resolverlo; He hecho esto con muchos VPS mínimos que ejecutan Ubuntu / Debian.
Entonces, ¿se está conectando desde la PC de su casa (llamémosla máquina ) a un servidor (llamémosla servidor ) a través de ssh ? ¿Desea iniciar un programa con una ventana gráfica en el servidor a través de su máquina? Si eso es correcto, siga leyendo.
Llamemos al programa para comenzar, gedit
pero el proceso es el mismo para todos. Dependiendo de dónde desee ver la ventana gráfica, salte al encabezado correcto.
Si desea ver y usar la ventana de gedit en su máquina remota pero comienza en el servidor, querrá que su sesión de shell se vea así:
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
No se preocupe por las advertencias, son normales: la ventana gedit aparecerá en la pantalla de su máquina remota como se vería en el servidor. El truco consiste en utilizar la opción "-X", ya ssh -X
que habilita el túnel X y establece la DISPLAY
variable correctamente.
Esto supone que está utilizando un cliente SSH que admite X11 y que su servidor tiene un servidor X en ejecución (algunos sin necesidad de GUI no ejecutan un servidor X). Especialmente en Windows, esto podría ser un problema, ya que la mayoría de los programas de terminal de Windows no tienen X. Como izx afirmó, MobaXTerm es uno de los muchos clientes SSH para Windows que tiene un X-Server.
Sin embargo, para un servidor que carece de X11, tendría que instalarlo.
También puede iniciar una instancia en la pantalla de su servidor llamando a gedit de esta manera:
ssh user@server
DISPLAY=:0.0 gedit
Debe sustituir el valor correcto en lugar de hacerlo :0.0
para obtenerlo en la pantalla X correcta (solo es importante si hay varias pantallas conectadas a su servidor o si es algo peculiar en su configuración).
Aquí, el escenario más común para que eso no funcione sería si el Servidor careciera de un Servidor X11 pero no tendría un monitor conectado o no tuviera una interfaz gráfica de usuario y no estaría leyendo esto: D.
No soy un experto en esto, pero la forma en que creo que funciona es que cada pantalla física, es decir, cada monitor conectado a una computadora individual obtiene un número en forma de 0.0
` 1.0
` 2.0
, ...
Este número es asignado por el X-Window-System, también conocido como X11. Esa es una capa para proporcionar una red y una interfaz gráfica básica sobre la cual Unity, Gnome, KDE y similares pueden construir.
Puede ver cuántas pantallas tiene una máquina determinada y qué números están en uso ejecutando for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done
en la máquina en cuestión. * Luego, cada computadora que está configurada para hacer que sus pantallas estén disponibles y ejecuta un servidor X tiene un nombre de host. Puede usar pantallas de hosts desde cualquier máquina en la misma red configurando su DISPLAY
variable de acuerdo a DISPLAY=hostname:0.0
. Ssh hace esto por usted de manera sensata si proporciona la -X
opción.
* Nota: supongo que hay una mejor manera que este for-loop.
Use un editor de texto de shell. vi
, vim
, nano
Y emacs
son los más comunes y por lo menos uno de ellos será instalado y operativo. De ellos nano
es el más fácil y más explicativo.
for
bucle un poco ... ahora solo mostrará la dirección de pantalla, por ejemplo:0
:0.0
. Siéntete libre de volver si crees que no es lo que quieres ...Lo que dijo con-f-use .
Básicamente tienes una terminal a través de SSH y Gedit es un programa GUI. La respuesta de con-f-use hará que funcione desde una sesión de cliente GUI de Linux.
La otra opción sería usar un editor que no sea GUI como nano, Vi u muchos otros.
fuente