
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 emacs
el 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.
echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
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!
- Cree un acceso directo de Windows a bash.exe (o wsl.exe).
- Después de ".exe" en el cuadro Destino:, agregue "-c [x11_thing_to_run]" (para wsl.exe, es --exec, no -c)
- 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"
- Cambie el nombre de su acceso directo a x11 y asígnele un ícono súper elegante.
Respuesta2
Elrespuesta del Señor CMasMases correcto en todas las cuentas. Pero si estás en WSL 2 localhost
no 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 DISPLAY
así:
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 ~/.bashrc
archivo. 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 -i
significa 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 run
comando que inicia el comando y luego desaparece. Entonces esta es mi orden
C:\cygwin64\bin\run.exe bash -i -c emacs