Registrarse

[Win10] Usar aplicaciones gráficas desde WSL

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
Algo que tal muchos no sabían es que es posible ejecutar aplicaciones gráficas usando el WSL. Es decir, poder abrir ventanas como si de un sistema operativo se tratara.

Si bien, este tutorial no está muy ligado a la decompilación (Puesto que utilizamos todo desde Windows) bien podría ser interesante para tenerlo en cuenta. Adicionalmente, para el WSL2 tendría más sentido que lo corriéramos las aplicaciones gráficas (como Porymap y mGBA) directamente desde Linux y no desde Windows, ya que el rendimiento sería altísimo.

Con este truco podremos:
  • Iniciar aplicaciones de Linux desde el menú de Inicio de Windows [Win11]
  • Anclar las aplicaciones de Linux a la barra de tareas de Windows
  • Usar alt-tab para cambiar entre las aplicaciones de Linux y Windows
  • Cortar y pegar entre aplicaciones de Windows y Linux
Comenzamos:

Este tutorial lo he implementado para Windows 10. Según tengo entendido, Windows 11 ya da soporte directo para esto de forma nativa en al WSL2. Sin embargo, puedes usar este tutorial si sigues con Windows 10 y/o el WSL 1.

Instalar vcXsrv:
El bash en WSL está pensado para ejecutar programas de línea de comandos que los desarrolladores podrían necesitar, pero también es posible ejecutar aplicaciones gráficas de escritorio de Linux en Windows utilizando el shell Bash. Para ser más precisos, se pueden mostrar GUIs que se ejecutan en WSL en un escritorio de Windows 10 utilizando un servidor X que se ejecuta en Windows 10.

Lograr esto, será necesario instalar un servidor X en el sistema Windows 10 y establecer la variable DISPLAY en Bash. Afortunadamente, hay muchos servidores X que se ejecutan en Windows; algunos de los más populares y gratuitos son Xming, Cygwin X y vcXsrv.

Yo he usado vcXsrv y es bastante bueno por lo que les dejo el link:
https://sourceforge.net/projects/vcxsrv/

Instalamos el programa y lo abrimos (para ello vamos al menú inicio y buscamos XLaunch)
1652095491092.png


Se nos abrirá un wizard preguntándonos por opciones:
1652095527945.png


Este lo dejamos tal cual está ahí y le damos a siguiente.
1652095585912.png

Nuevamente, dejamos la opción por defecto y vamos a siguiente.

1652095637365.png

Para el WSL2 es importante que activemos la tercera opción.

Le damos siguiente y finalizar y debería aparecer un pequeño ícono en nuestra barra de tareas:
1652095763930.png


Ahora vamos a el WSL

Descargar los paquetes en el WSL

Primero actualizamos la distribución:
Bash:
sudo apt update
E instalamos las apps para X11

Bash:
sudo apt install x11-apps -y
Ahora añadimos las siguientes líneas al final de nuestro ~/.bashrc, para esto debemos abrir el archivo (como por ejemplo en VScode).

Una vez abierto el archivo, bajamos hasta el final y agregamos:

PARA WSL2:
Bash:
export DISPLAY=$(ip route list default | awk '{print $3}'):0
export LIBGL_ALWAYS_INDIRECT=1
Bash:
export DISPLAY:0

Reiniciamos ahora la terminal

Bash:
bash
Para probar que las aplicaciones gráficas están sirviendo ejecutamos la siguiente prueba:

Bash:
xeyes
Debería iniciar una nueva ventana (podría estar minimizada, así que revisa la barra de tareas)
1652096517117.png


Los ojos deben seguir el cursor del mouse. Así que si eres capaz de abrirlo, quiere decir que la has configurado perfectamente.

OPCIONAL:

Nautilus, también conocido como Archivos de GNOME, es el gestor de archivos del escritorio GNOME. (Similar al Explorador de Archivos de Windows).

Bash:
sudo apt install nautilus -y
Para iniciar simplemente escribimos nautilus

1652096784413.png


Ahora podemos visualizar nuestras carpetas en Linux de una forma más estilizada, así como crear carpetas y mover archivos de forma nativa en Linux.


Porymap:
La joya de la corona.

Técnicamente, si instalas la versión Linux de Porymap y la inicias dentro de la terminal, podrías usar Porymap como si estuviera en Windows, pero ejecutándose desde Linux.


Seguimos los pasos para Ubuntu.

(Luego profundizaré en esto)
 
Última edición:

Lunos

Enfrentando a La Organización
Miembro insignia
Esto va genial. La verdad es que yo ya lo habia revisado, si hasta le metí like, pero lo habia olvidado totalmente.
Ahora le dí una probada y funcionó casi que de maravilla (y)
1667768927222.png

La unica putada es que si no usas Visual Studio Code, pues el botón para abrir scripts de mapa pues como que se rompe.
No he podido hacer que Porymap ejecutandose de esta forma me abra el Sublime Text que tengo en Windows, al menos.
Imagino que podria intentar descargar y ejecutar la versión de Linux usando vcXsrv, aunque seria una jodienda re-configurarlo.
¿De casualidad no sabes si hay forma? 👀
 

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
Esto va genial. La verdad es que yo ya lo habia revisado, si hasta le metí like, pero lo habia olvidado totalmente.
Ahora le dí una probada y funcionó casi que de maravilla (y)

La unica putada es que si no usas Visual Studio Code, pues el botón para abrir scripts de mapa pues como que se rompe.
No he podido hacer que Porymap ejecutandose de esta forma me abra el Sublime Text que tengo en Windows, al menos.
Imagino que podria intentar descargar y ejecutar la versión de Linux usando vcXsrv, aunque seria una jodienda re-configurarlo.
¿De casualidad no sabes si hay forma? 👀
Ya, una de las ventajas del VSC es su soporte nativo al WSL, lo que hace muy cómodo ejecutarlo directamente desde el bash, sin tener que tener una versión linux instalada.

Para ejecutar el Sublime, se me ocurre, aunque no lo he probado, que crees un alias y que uses ese alias desde Porymap. Algo así

alias subl='"/mnt/c/Program Files/Sublime Text 3/subl.exe"'

Para mi la gracia es abrir el de Windows y no usar una versión Linux, ya que podría traer problemas.

Primero lo intentaría directamente en el bash a ver si funciona y luego lo integraría directamente en el ~/.bashrc

Así puedes reemplazar el code por subl. Capaz que funciona. ¡Me cuentas como te va!
 

Lunos

Enfrentando a La Organización
Miembro insignia
Ya, una de las ventajas del VSC es su soporte nativo al WSL, lo que hace muy cómodo ejecutarlo directamente desde el bash, sin tener que tener una versión linux instalada.

Para ejecutar el Sublime, se me ocurre, aunque no lo he probado, que crees un alias y que uses ese alias desde Porymap. Algo así

alias subl='"/mnt/c/Program Files/Sublime Text 3/subl.exe"'

Para mi la gracia es abrir el de Windows y no usar una versión Linux, ya que podría traer problemas.

Primero lo intentaría directamente en el bash a ver si funciona y luego lo integraría directamente en el ~/.bashrc

Así puedes reemplazar el code por subl. Capaz que funciona. ¡Me cuentas como te va!
Bueno, en mi caso la ruta al ejecutable cambia, pero entendí el punto.
Creé un alias valido y comprobé que me abria el Sublime Text normalmente.
Despues de eso abrí el Porymap de Linux mediante vcXsrv, fui a Edit Preferences y en Goto Line Command escribí subl -r --goto %F:%L.
Desafortunadamente, no funcionó.
Probé quitando la -r y tampoco.
Probé escribiendo subl %D en "Open Directory Command", fui a Tools -> Open Project in Text Editor, y tampoco.
Preguntaré en el servidor de Discord de Pret a ver si alguien tiene alguna sugerencia, pero parece ser que esto no va 😔

EDITO: Esto es lo que me pasa por no leer. El asunto con el campo Goto Line Command es que añade un botón al lado del campo "Script" de un evento en el mapa que es el que ejecuta el comando.
Igualmente no funciona, pero.
vcxsrv_20221107_112113337.png

EDITO2: Pues Porymap, o más bien Qt, no es capaz de leer aliases, pero si escribís la ruta directa como WSL la leeria, pues ahi si funciona.
Probé con "/mnt/d/Lunos/Portable Programs/Sublime Text x64/sublime_text.exe" -r --goto %F:%L, y casi que funciona.
El problema es que me abre un archivo en blanco, y en una ruta de carpeta incorrecta.

Esto es lo que me abre:
sublime_text_20221107_134645327.png


Y esto es lo que deberia abrir:
sublime_text_20221107_134718235.png


EDITO3: ¡Eureka! ¡Esto funciona! ¡Woohoo!
"/mnt/d/Lunos/Portable Programs/Sublime Text x64/sublime_text.exe" \\wsl$\Ubuntu\%F

EDITO4: Y encima esto ha corregido el botón "Open Map Scripts". Esto es un goze.
 
Última edición:

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
Bueno, en mi caso la ruta al ejecutable cambia, pero entendí el punto.
Creé un alias valido y comprobé que me abria el Sublime Text normalmente.
Despues de eso abrí el Porymap de Linux mediante vcXsrv, fui a Edit Preferences y en Goto Line Command escribí subl -r --goto %F:%L.
Desafortunadamente, no funcionó.
Probé quitando la -r y tampoco.
Probé escribiendo subl %D en "Open Directory Command", fui a Tools -> Open Project in Text Editor, y tampoco.
Preguntaré en el servidor de Discord de Pret a ver si alguien tiene alguna sugerencia, pero parece ser que esto no va 😔

EDITO: Esto es lo que me pasa por no leer. El asunto con el campo Goto Line Command es que añade un botón al lado del campo "Script" de un evento en el mapa que es el que ejecuta el comando.
Igualmente no funciona, pero.

EDITO2: Pues Porymap, o más bien Qt, no es capaz de leer aliases, pero si escribís la ruta directa como WSL la leeria, pues ahi si funciona.
Probé con "/mnt/d/Lunos/Portable Programs/Sublime Text x64/sublime_text.exe" -r --goto %F:%L, y casi que funciona.
El problema es que me abre un archivo en blanco, y en una ruta de carpeta incorrecta.

Esto es lo que me abre:
Ver el archivo adjunto 12190

Y esto es lo que deberia abrir:
Ver el archivo adjunto 12189

EDITO3: ¡Eureka! ¡Esto funciona! ¡Woohoo!
"/mnt/d/Lunos/Portable Programs/Sublime Text x64/sublime_text.exe" \\wsl$\Ubuntu\%F

EDITO4: Y encima esto ha corregido el botón "Open Map Scripts". Esto es un goze.
Vale, pues me alegra muchísimo que lo hayas podido arreglar. Al final fue cuestion de ensayo y error pero al meno mal encaminados no íbamos...

Happy coding!~!
 

Lunos

Enfrentando a La Organización
Miembro insignia
A mí me gustaría saber las ventajas de hacerlo así :D
¿Te refieres a usar la versión de Porymap para Linux en Windows?
Pues una lectura de archivos más rapida para quienes usamos WSL2 y trabajamos en el sistema de archivos de Linux, comparado a usar la versión para Windows.
 

Lunos

Enfrentando a La Organización
Miembro insignia
export DISPLAY:0
Yo siento que la ultima vez que usé esto en WSL1 estaba funcionando, pero ahora que ando en WSL1 con Ubuntu 24.04 ya no funciona.
Lo que sí funciona es DISPLAY=localhost:0.0 ; export DISPLAY, pero.
Sentí la necesidad de mencionarlo por las dudas. Tengo motivos personales para no usar WSL2 y capaz que alguien en algun momento se encuentra en la misma situación.
Suerte.
 
Arriba