ngrok

Esto es una traducción libre de un procedimiento que vi en este blog para hacer funcionar Terminator dentro de Windows por WSL.

El problema

Sabemos que podemos usar Linux dentro de Windows 10 gracias a WSL. Por ejemplo, yo instalé Ubuntu dentro de Windows y presionando Inicio puedo escribir “Ubuntu” y obtengo una terminal con Ubuntu que es totalmente funcional. Sin embargo, los que hayan utilizado Linux en Windows o fuera de Windows notarán que la terminal por defecto de WSL no funciona muy bien con todas las aplicaciones de texto que existen. Esto tiene que ver con los encuadres del texto en aplicaciones que usan ncurses: Básicamente aparece todo muy desordenado e incluso en algunos casos (tratando de editar un texto con un editor como Vim o nano por SSH) la aplicación simplemente no se ve bien (ej. no puedo ver el texto que estoy escribiendo). También me pasó que jugaba a dopewars (un jueguito que funciona con ncurses) y los textos aparecen todos descuadrados, un desastre.

¿Por qué no simplemente usar otra terminal? Eso es lo que vamos a hacer, pero en principio WSL no soporta el uso de aplicaciones gráficas de Linux. Podemos instalar cualquier terminal de Ubuntu (en este caso) pero no va a funcionar.

La solución

Podemos tener X11 en Windows. X es el servidor gráfico que habitualmente usamos en Linux para levantar aplicaciones gráficas. Hay varias versiones del mismo pero la que nos recomienda ropnop es VcXsrv. No basta con instalarla.

Una vez instalado VcXsrv tenemos que crear un acceso directo con la siguiente ruta y argumentos:

"C:\Program Files\VcXsrv\vcxsrv.exe" :0 -ac -terminate -lesspointer -multiwindow -clipboard -wgl -dpi auto

acceso directo servidor X11

Lo que le estamos diciendo en los argumentos al servidor gráfico es que lance las aplicaciones de nuestro computador, que reconozca el portapapeles y que permita multiples ventanas entre otras cosas.

Ahora podemos plantearnos instalar una terminal nueva.

Terminator es una terminal bastante buena y nativa en Ubuntu que soporta pestañas y colores, así como el uso del ratón. Esta refleja bastante mi experiencia con la terminal de Lubuntu que uso en un netbook (sí, un netbook, no es un error).

Un tema con WSL es que nativamente no está pensado para lanzar aplicaciones gráficas, así que tenemos que indicarle a WSL que debe servir las aplicaciones gráficas al servidor en esta misma máquina, lo que se hace con el parámetro de entorno

DISPLAY=:0

Entonces para inicializar Terminator (o la terminal que queramos) tenemos que escribir:

DISPLAY=:0 terminator &

Segundo problema y resolución

Tenemos un pequeño problema nuevo. Para abrir una aplicación de Linux necesitamos una ventana de WSL. Normalmente procederíamos así pero no tiene sentido abrir una terminal para abrir otra.

Hay una alternativa parcial, ejecutar con Windows + R o desde el Símbolo de sistema:

C:\Users\Equipo>bash -c -l "DISPLAY=:0 terminator &"

De nuevo, no es lo ideal escribir todo eso. Cómo ahorrárnoslo? Hagamos un script:

En este caso le puse este nombre: startTerminator.vbs en mi carpeta personal con el siguiente contenido:

args = "-c" & " -l " & """DISPLAY=:0 terminator"""
WScript.CreateObject("Shell.Application").ShellExecute "bash", args, "", "open", 0

Guardamos el archivo y luego creamos un acceso directo con una ruta y argumento muy simple (abajo una captura):

C:\Windows\System32\wscript.exe C:\Users\ronnie\startTerminator.vbs

Iniciar en %USERPROFILE% (esto apunta a nuestra carpeta de usuario) y le damos un nombre: “Terminator” en mi caso.

acceso directo terminal

Cada vez que deseemos ejecutar nuestra terminal, lo único que necesitamos es ejecutar el servidor X y luego el ejecutable de Terminator.

terminal

Por supuesto, podría preguntarse por qué no simplemente ejecutar ambas cosas a la vez. Sólo tendríamos que asegurarnos de no ejecutar el servidor X una y otra vez ya que sólo necesitamos un servidor X corriendo. También si lo consideramos pertinente, podríamos iniciar el servidor X (VcXsrv) desde el arranque de Windows para no tener que molestarnos con ejecutarlo manualmente. Por supuesto, esto tiene sentido si vas a usar WSL todos los días.