¿Cómo ver aplicaciones X11 a través de SSH en MAC?

Standard
Hola a todos, como les venía comentando en mi publicación anterior (PostgreSQL desde terminal con psql), últimamente estoy trabajando bastante desde mi MAC con la terminal. Los ambientes de trabajo más comunes son con ambientes virtuales, como RDS o EC2, ya sea conexión directa o con Dockers. Esto permite no requerir an ambiente de desarrollo que demande una gran cantidad de recursos.
Como parte de este cambio que estoy haciendo de manejar mis ambientes por terminal, empecé a mover mis ambientes de desarrollo de local a una máquina virtual de Ubuntu en EC2, y me topé con un reto: ver aplicaciones X11 en servidores Ubuntu en EC2.
Mi ambiente de desarrollo estaba en Java y contaba con un Application Server embebido, que al levantarlo lanza al final una consola en Swing para ver logs y administrar el servidor.

Ejemplo Propuesto

Como caso ilustrativo voy a utilizar una aplicación de X11 sencilla como es xclock.
xclock
Nota. Les dejo algunos ejemplos de usos más complejos que se pueden hacer con este enfoque:
xterm-1xterm-2

Para este ejemplo en particular, EC2 no incluye X-apps por default, pero las podemos instalar con el siguiente comando:
sudo apt-get install x11-apps
Si yo me conecto a mi servidor por SSH desde Terminal, me da un error similar a este:
ubuntu@donOmar:~$ xclock
Error: Can't open display: localhost:11.0
error-1
Buscando un poco en internet me topé con que a partir de la version de Yosemite ya no se incluye el X Window Server para correr aplicaciones X11 en Mac y utilizar un protocolo de reenvío de X11 a través de SSH.
Empecemos por el servidor de ventanas, para lo que necesitamos instalar XQuartz para esto.

Instalar XQuartz

Ocupamos bajar el sistema que soporta ventanas XOrg, como es XQuartz, desde esta página:
Nota. En windows tienes la opción de utilizar XMing, con Putty por ejemplo.
Para seguir la instalación seguimos estos pasos.

Paso #1.

xquarz-1

Paso #2.

xquarz-2

Paso #3.

xquarz-3

Paso #4.

xquarz-4

Paso #5.

xquarz-5

Paso #6.

xquarz-6

Sintaxis de reenvío de X11 por SSH

Un protocolo de tunneling es un protocolo de red el cual encapsula un protocolo con payload (información extra). Algunas razones para utilizar un protocolo de tunneling, incluye el llevar un payload sobre una red incompatible de entrega, o proveer un camino segura a través de una red insegura. SSH se utiliza frecuentemente para hacer un túnel de tráfico inseguro a través de internet en un modo seguro. Para hacer el reenvío de X11 en SSH agregamos la opción de X al comando de ssh:
ssh -X user@RemoteserverNameHere
ssh -X userName@Server-Ip-Address-Here
Ejemplo:
$ssh -X nixcraft@nas01
Nota. Esta opción también funciona con docker-machine, lo sé porque mi solución lo hice por este medio.
$docker-machine  -X

Integrando todo desde XQuartz

Una vez que abrimos XQuartz, podemos lanzar una Terminal (Aplicaciones > Terminal), para abrir xterm:
Una vez dentro de xterm, nos conectamos al servidor y ejecutamos la aplicación X11:
$ssh -X nixcraft@nas01
$xclock
xterm-xclock

Comentarios finales

Aunque el ejemplo en sí es sencillo, el potencial como herramienta es muy grande, sobre todo para el uso de consolas de administración en servidores remotos.
Y aunque el sistema de edición es limitado en xterm, siempre puedes seguir usando Terminal para el uso cotidiano de comandos y usar xterm a través de un archivo shell que automatice las tareas mas comunes y que requieren de las aplicaciones x11.
Nos vemos en el siguiente post.
Nota. Si te interesó mi publicación anterior, asegúrate de revisarla al final, agregué una opción para guardar las salidas de los queries.

Leave a Reply

Your email address will not be published. Required fields are marked *