Una forma eficiente de iniciar una aplicación gráfica con múltiples monitores con WSL2 y VcXsrv en Windows

Una forma eficiente de iniciar una aplicación gráfica con múltiples monitores con WSL2 y VcXsrv en Windows

Estoy usando WSL2 en Windows, por el momento principalmente solo para iniciar mis emacs personalizados. Mi flujo de trabajo para iniciar emacs es un poco engorroso. Después de cada inicio, tengo que iniciar la aplicación Xsrv con la configuración de varios monitores. Luego abra la nueva terminal de Windows, abra Ubuntu 18.04, inicie el entorno gráfico Xfce4. Luego, en este entorno gráfico inicie una terminal y finalmente use emacsel comando para iniciar emacs.

Como habrá notado, estos son algunos pasos solo para obtener una versión gráfica de emacs que se pueda utilizar en múltiples monitores. Mi pregunta es cómo se podría acelerar el proceso. En este momento tengo la idea de crear algún script de autohotkey y verificar si se puede iniciar la sesión gráfica con WSL2 de forma predeterminada. Le agradecería mucho si pudiera darme algunos consejos. ¿Son estas ideas lo mejor que puedo hacer o hay otros trucos para ejecutar la versión gráfica de emacs con pocas acciones?

Respuesta1

Puede automatizar el inicio de VcXsrv completo con su configuración. Eso es lo que he hecho.

Parte 1: Hacer que VcXsrv se inicie automáticamente

Cuando ejecute vcxsrv, aparecerá una pantalla de configuración cada vez.
Cuando llegas a la última pantalla de configuración, hay una opción para guardarla. Luego, creará un acceso directo que apunte a esa configuración guardada y la iniciará. Aquí hay una publicación de superusuario.hablando de diferentes formas de iniciar vcxsrv automáticamente.

Parte 2: exporta tu pantalla

x11 admite el "reenvío" de comandos de ventanas a diferentes direcciones IP (y escritorios) para permitir algo como el escritorio remoto de Windows... mejor en muchas/la mayoría de las formas... pero no en todas. Esta característica ha estado en x11 desde el principio.

Para exportar su pantalla, debe configurar la variable de entorno DISPLAY antes de iniciar una aplicación x11. Por lo general, la mejor manera de lograr esto es colocar el comando de exportación en su archivo ~/.bashrc (suponiendo que esté usando bash) para que no sea necesario hacerlo cada vez. La línea se verá así: export DISPLAY=<ip_address>:0.0 0.0 se refiere al escritorio al que se dirige, pero para evitar confusión aquí, simplemente use 0.0.

Una forma rápida de lograr esto es ejecutar los siguientes comandos en la terminal bash.

  1. echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
  2. source ~/.bashrc(o puedes reiniciar tu terminal aquí)

Ahora debería estar listo para iniciar cualquier aplicación x11 que desee y que aparezca en Windows.

Señalaré que si tiene fallas con alguna aplicación en particular, intente deshabilitar la compatibilidad con open gl dentro de VcXsrv. No pude iniciar VisualStudio Code hasta que deshabilité esta configuración.

Parte 3: ¡Un acceso directo de Windows para ejecutar Linux x11!

  1. Cree un acceso directo de Windows a bash.exe (o wsl.exe).
  2. Después de ".exe" en el cuadro Destino:, agregue "-c [x11_thing_to_run]" (para wsl.exe, es --exec, no -c)
  3. Si no se inicia en modo gráfico, vuelva a agregar su entorno DISPLAY a la línea... asíbash.exe -c "DISPLAY=127.0.0.1:0.0 xemacs"
  4. Cambie el nombre de su acceso directo a x11 y asígnele un ícono súper elegante. ingrese la descripción de la imagen aquí

El producto terminado ingrese la descripción de la imagen aquí

Respuesta2

Elrespuesta del Señor CMasMases correcto en todas las cuentas. Pero si estás en WSL 2 localhostno funcionará. Al menos, no funciona al momento de escribir esto. (Hay rumores de que el equipo de WSL está trabajando en algo para solucionar este problema).

La razón es que WSL 2 coloca su Ubuntu (o lo que sea) en una máquina (virtual) separada como parte de la máquina Windows (como lo hizo WSL 1).

Para solucionar este problema necesitas calcular algo DISPLAYasí:

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

Una buena forma de hacerlo y luego olvidarse de ello es ponerlo en el ~/.bashrcarchivo. Pero entonces el inicio de sesión en WSL debe ser un shell de inicio de sesión, de lo contrario no se ejecutará.

Si usa un enlace a bash.exe, que es la ruta más fácil, creo, su comando debería verse así

 bash.exe -i -c emacs

Esto -isignifica que el shell debe ser interactivo, lo que significa que debe realizar la secuencia de comandos de inicio de sesión completa.

Pero eso deja la ventana bash abierta mientras se esté ejecutando el comando (emacs). Como tengo Cygwin instalado, aprovecho su runcomando que inicia el comando y luego desaparece. Entonces esta es mi orden

C:\cygwin64\bin\run.exe bash -i -c emacs

información relacionada