¿Una mejor experiencia de terminal para Windows Subsystem for Linux (WSL)?

29

El terminal para el Subsistema de Windows para Linux (WSL) es bastante mínimo. No he usado mucho el terminal en Windows, generalmente uso Ubuntu u OSX, pero me sorprende que el terminal predeterminado sea tan simple.

¿Es posible:

  1. Conecte un programa de terminal de Windows a WSL o

  2. ¿Lanzar el programa de terminal de Ubuntu desde WSL como una ventana X?

David LeBauer
fuente

Respuestas:

26

Yo personalmente hago lo último: uso VcXsrv como mi servidor X en modo de múltiples ventanas, luego lanzo el terminal xfce4 (porque gnome-terminal tenía problemas visuales que no me importaba tratar de aprender a solucionar), y de repente tengo Un terminal competente con soporte de fuente y color.

Descubrí que necesitaba agregar estos a mi bashrc ...

export DISPLAY="localhost:0"
export TERM=xterm-256color

Haga la solución de este reddit para dbus:

sudo sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf

También instalé compiz y uso el proyecto cbwin para ejecutar programas de Windows desde mi shell xfce4-terminal.

Estoy muy contento con esta configuración y uso NeoVim + muchos complementos nativos de Linux a pesar de que mi máquina "para el trabajo" debe ser Windows. :)

También es posible iniciar un servidor SSH en Bash-on-Linux-on-Windows y luego conectarse a él, digamos desde MinTTY como desde Cygwin.

PD: para hacer que el lanzamiento de xfce4-terminal sea sencillo y sin la ventana cmd bash adicional, escribí un programa que no hace nada más que iniciar el proceso bash con argumentos para iniciar xfce4-terminal sin una ventana de consola. Hice esto en C #: básicamente uso los argumentos "UseShellExecute" false y "CreateNoWindow" true. Luego lo puse en mi barra de tareas y parece casi inútil.

EDITAR: La respuesta con VBScript es brillante. Aquí está el mismo script, pero una versión JScript ...

WScript.CreateObject("WScript.Shell").run('bash.exe -l -c "DISPLAY=:0.0 xfce4-terminal"', 0, false);
aikeru
fuente
1
Respuesta seleccionada porque es completa y me ayudó a encontrar stackoverflow.com/a/39188790 ; Me di cuenta de que actualizar MobaXterm a> 9.0 me dio un terminal decente para WSL.
David LeBauer
Si alguien tiene curiosidad, aquí está el enlace a la publicación de reddit desde la que the "fix from reddit" for dbusse levantó.
Tel.
@tel gracias! En realidad, no sabía de donde vino y hemos añadido el enlace ...
aikeru
Si el "problema visual que no le interesa solucionar" es que no puede ver parte del mensaje del directorio o los nombres de los archivos, la razón es que son de color azul oscuro. No son visibles en el fondo púrpura del terminal del gnomo. El truco es reasignar el color azul oscuro a turquesa y luego funciona bien.
WinEunuuchs2Unix
22

Me llevó un tiempo descubrir todos los pasos implícitos en las otras respuestas, así que aquí hay un resumen paso a paso:

  1. En Windows, instale VcXsrv o XMing .
  2. En Bash para Windows, instale el terminal: sudo apt-get install xfce4-terminal.
  3. Añadir export DISPLAY=:0a tu .bashrc. (Agregarlo .profileo .bash_profile no funcionó para mí ). Esto le permitirá comenzar xfce4-terminalcorrectamente desde bash, pero es ortogonal al siguiente comando.
  4. Ejecute lo siguiente en un acceso directo o en la solicitud Ejecutar (como @OhJeez sugirió en los comentarios):

    powershell -windowstyle hidden -Command "iex \"bash ~ -c 'DISPLAY=:0 xfce4-terminal'\" "
    

Otras notas:

  • El ~inicio bashen su directorio de inicio, puede eliminarlo para comenzar en cualquier directorio en el .vbsque se encuentre el archivo. Por lo tanto, es conveniente ponerlo C:\Users\foo, por ejemplo.
  • Tenga en cuenta que XMing tiene que estar ejecutándose para que el script funcione; Para iniciarlo automáticamente con Windows, puede seguir las instrucciones de este artículo .
  • Emacs 24 (incluido con Ubuntu 14.04) no parece funcionar con XMing; Tuve que instalar una versión más nueva como se sugiere en esta publicación .
Andrew Mao
fuente
1
Gracias por tu ayuda. Cuando ejecuto el script, parece que no sucede nada (el servidor Xming está en ejecución) Sin embargo, si abro bash y ejecuto xfce4-terminal, funciona bien. Además, si ejecuto bash -l -c xfce4-terminaldesde Windows cmd, recibo una advertencia Gtk-WARNING **: cannot open display:y no sucede nada. Estoy bastante confundido ya que pensé que estos comandos deberían comportarse de manera idéntica, ¿alguna suposición?
rperryng
@rperryng sí, también estoy tratando de obtener una línea para abrir xfce sin el símbolo del sistema feo bash en el medio, pero aún no tuve suerte.
Andrew Mao
1
La mejor solución para iniciar xfce4-terminal con acceso directo. Hay un parpadeo, pero no queda ninguna ventana: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -Command "iex \"bash.exe ~ -c 'DISPLAY=:0 xfce4-terminal'\" " otra versión que iniciará Xming si no se está ejecutando:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -Command "iex '& \"C:\Program Files (x86)\Xming\Xming.exe\" -multiwindow'; iex \"bash.exe ~ -c 'DISPLAY=:0 xfce4-terminal'\" "
OhJeez
@OhJeez agradable, gracias por resolver las complejidades de ese comando.
Andrew Mao
Solución alternativa para pantallas de alta resolución. Si tiene una pantalla de 4k, tendrá fuentes borrosas en su terminal. Para solucionar esto, necesitará: 1. Use "VcXsrv Windows X Server" en lugar de Xing sourceforge.net/projects/vcxsrv 2. Ejecute el servidor x en modo de compatibilidad. Para hacer esto, necesitará: haga clic en el acceso directo VcXsrv con el botón derecho del mouse. Elija "Propiedades". En la pestaña "Compatibilidad", marque la casilla de verificación "Anular comportamiento de escalado de DPI alto ..." y seleccione "Aplicación" en el siguiente menú desplegable. 3. Ejecute xfce4-terminal y cambie la configuración de fuente. Cambia la fuente a una más grande.
koorchik
10

Creé (y uso) un terminal de código abierto para Windows Subsystem for Linux (WSL) llamado wsl-terminal , se basa en minttyy wslbridge.

captura de pantalla

Gore Liu
fuente
Tenga cuidado con la autopromoción: puede parecer spam. askubuntu.com/help/promotion
2
La autopromoción está bien si la reconoces
David LeBauer
Y no lo has reconocido.
muru
55
Y, por favor, agregue algunos detalles sobre por qué wsl-terminalproporcionará una mejor experiencia de terminal.
Cynplytholowazy
2
Gracias por compartir esto. Sus cosas ya funcionan mejor que el terminal incorporado, al menos puede tratar un poco mejor el ajuste de línea en la línea de comando. Sin embargo, un CTRL-A para ir rápidamente al comienzo del comando todavía falla. Estoy contento con la gente que promociona cosas como esta. La gente debería calmarse.
EdH
5

En una nueva instalación de Ubuntu, acabo de instalar XMing (en Windows) y luego (en Ubuntu) xfce4-terminal, y después de eso export DISPLAY=:0, funcionó.

Para deshacerse de la consola predeterminada de Windows, este script VBS hace el trabajo:

WScript.CreateObject("WScript.Shell").run "bash -l -c xfce4-terminal", 0, True

(Con $ DISPLAY configurado en su .profile.)

editar: y para que el script se pueda pintar, cree un acceso directo con target wscript "C:\path\to\thescript.vbs".

n.caillou
fuente
El VBS parece funcionar, sin embargo, la ventana del terminal está abierta y cerrada justo después. ¿Cómo puedo mantenerlo funcionando?
TCB13
3

En Windows:

  • Haga clic en la esquina superior izquierda de la ventana de bash.
  • En el menú que se abre, seleccione 'Propiedades'
  • Establezca las opciones que desee como fuente, etc. (¡incluso hay una fuente mono de Ubuntu!)
  • Después de establecer las propiedades, se aplicarán para la ventana actual. Para establecerlos como predeterminados, haga clic en la esquina superior izquierda de la ventana y haga clic en valores predeterminados.
  • Puede presionar Alt + Intro para alternar el modo de pantalla completa.

Espero que esto ayude.

mohi
fuente
Me gustaría señalar que tiene la misma apariencia / uso que el terminal de Ubuntu (Gnome), excepto que agrega compatibilidad con el mouse. es decir, puede hacer clic en los encabezados de las columnas enhtop
WinEunuuchs2Unix
2

Extraterm es más que un simple emulador de terminal. Proporciona una caja de herramientas para trabajar con su terminal y aplicaciones de línea de comando.

  • Caracteristicas
  • Admite Linux y macOS, en Windows WSL, CMD, PowerShell y Cygwin
  • compatible con xterm
  • Múltiples pestañas y paneles, divididos y en mosaico como quieras
  • Mostrar imágenes en la terminal
  • Soporte Unicode
  • Emoji de color
  • Teclado amigable "Paleta de comandos"
  • Teclas configurables
  • Selecciones basadas en teclado
  • Integración de shell; puede aislar y 'enmarcar' la salida del comando. (bash, zsh y fish soportados)
  • Cargas y descargas sencillas con la integración de shell
  • La salida del comando es editable en su lugar. Edición con varios cursores
  • La salida de comando anterior se puede usar como entrada para nuevos comandos
  • Admite temas iTerm2 y TextMate
  • Zoom de texto
nelaaro
fuente
Ahora estoy usando este terminal, ya que tiene las características que realmente quiero. una manera fácil de cambiar entre cmd, powershell, bash, fish, etc.
nelaaro
1

Desde las últimas actualizaciones de Windows 10 (y WSL) todo parece estar funcionando usando la consola bash de Windows "nativa". (Y no estoy hablando de la (in) famosa actualización de Windows 1809). Esto funciona incluso en la versión Enterprise al menos para 1803 17134.345 build).

Ver el artículo en https://www.hanselman.com/blog/SettingUpAShinyDevelopmentEnvironmentWithinLinuxOnWindows10.aspx

Una pequeña advertencia: para usar realmente la consola bash en Windows uno debería lanzar tmux, y todo funcionará como lo demostró Scott en su blog.

Adrian
fuente
¡Esto es muy gracioso! "exec tmux" de hecho resuelve todos los problemas del terminal nativo de Windows "bash.exe" (líneas de corte extrañas después del cambio de tamaño).
Yves Dorfsman
1

Un terminal para una era más moderna https://eugeny.github.io/terminus/

Terminus es un terminal fuertemente inspirado en Hyper. Sin embargo, está diseñado para personas que necesitan hacer las cosas.

  • Se ejecuta en Windows, macOS y Linux
  • Tematización y esquemas de color.
  • Accesos directos totalmente configurables
  • Soporte completo de Unicode que incluye caracteres de doble ancho
  • No se ahoga en salidas de flujo rápido
  • Experiencia de shell adecuada en Windows, incluida la finalización de pestañas (a través de Clink)
  • Compatibilidad con PowerShell (+ Core), WSL (Bash en Windows), Git-Bash, Cygwin, Cmder y CMD
  • Recuerda tus pestañas
  • Cliente SSH integrado y administrador de conexión
nelaaro
fuente
1

https://hyper.is/

  • Está basado en electrones, lo que hace que sea fácil de desarrollar y extender usando JavaScript.
  • No utiliza la consola de Windows predeterminada de ninguna manera.
  • Le permite elegir su bash back-end shell, cmd, PowerShell.

    the shell to run when spawning a new session (i.e. /usr/local/bin/fish)
    if left empty, your system's login shell will be used by default
    
    Windows
    - Make sure to use a full path if the binary name doesn't work
    - Remove `--login` in shellArgs
    
    Bash on Windows
    - Example: `C:\\Windows\\System32\\bash.exe`
    
    PowerShell on Windows
    - Example: `C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`
    shell: 'C:\\Windows\\System32\\bash.exe',enter code here
    

Muy buenos temas y complementos

plugins: [
    //"hyper-dracula"
    //"hyper-solarized-dark"
    "hyper-material-theme"
],

Usando esta guía pude hacer que mi WLS funcionara muy bien.

nelaaro
fuente
Gracias. Parece un proyecto interesante, pero ¿podría decir más sobre el software y cómo configurarlo para WSL?
David LeBauer
1
@DavidLeBauer Espero que ayude.
nelaaro
Hyper es super lento.
Mithril
0

Ampliar las respuestas de aikeru y n.caillou como ninguna de sus soluciones VBScript / JScript me funcionó de inmediato.

Call WScript.CreateObject("WScript.Shell").Run("bash.exe -l -c 'DISPLAY=:0.0 xfce4-terminal --working-directory $HOME'", 0, True).

La secuencia de comandos debe anteponerse Callal usar paréntesis en el comando de ejecución, consulte aquí . También las garrapatas tenían que ser al revés. Además, un argumento adicional para xfce4-terminal iniciará el terminal en la carpeta de inicio del usuario. Lo siento si esto realmente funcionaba con el código JScript, no tengo idea de estos lenguajes de script.

Guardar esto como un archivo vbscript.vbs y ejecutarlo desde un indicador de cmd

wscript vbscript.vbs

luego abre una ventana xfce4-terminal (dado que XMing o similar se está ejecutando) después de 2 segundos de retraso. Convirtiendo esto en un atajo como lo sugieren los trabajos de n.caillou y haciendo clic en el atajo generará automáticamente una nueva ventana de terminal xfce con cierto retraso.

Frederik Heber
fuente