Uma melhor experiência de terminal para o Windows Subsystem for Linux (WSL)?

29

O terminal do Windows Subsystem para Linux (WSL) é bastante mínimo. Não usei muito o terminal no Windows - geralmente uso Ubuntu ou OSX - mas estou surpreso que o terminal padrão seja tão vazio.

É possível:

  1. Conecte um programa de terminal do Windows à WSL ou

  2. Lançar o programa de terminal Ubuntu a partir da WSL como uma janela X?

David LeBauer
fonte

Respostas:

26

Pessoalmente, faço o último: uso o VcXsrv como meu servidor X no modo de múltiplas janelas e, em seguida, inicio o xfce4-terminal (porque o gnome-terminal tinha problemas visuais que eu não queria tentar aprender a consertar) e, de repente, um terminal competente com suporte de fonte e cor.

Descobri que precisava adicioná-los ao meu bashrc ...

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

Faça a correção deste reddit para o dbus:

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

Também instalei o compiz e uso o projeto cbwin para executar programas do Windows a partir do meu shell xfce4-terminal.

Estou muito feliz com essa configuração e uso o NeoVim + muitos plugins nativos do Linux, embora minha máquina "for-work" deva ser o Windows. :)

Também é possível iniciar um servidor SSH no Bash-on-Linux-no-Windows e depois conectar-se a ele, digamos do MinTTY como do Cygwin.

PS: para tornar o lançamento do terminal xfce4 indolor e sem a janela extra do bash cmd, escrevi um programa que não faz nada além de iniciar o processo do bash com argumentos para iniciar o xfce4-terminal sem uma janela do console. Eu fiz isso em c # - basicamente, use os argumentos "UseShellExecute" false e "CreateNoWindow" true. Eu então fixei isso na minha barra de tarefas e é quase impossível.

EDIT: A resposta com VBScript é brilhante. Aqui está o mesmo script, mas uma versão JScript ...

WScript.CreateObject("WScript.Shell").run('bash.exe -l -c "DISPLAY=:0.0 xfce4-terminal"', 0, false);
aikeru
fonte
1
Resposta selecionada porque é abrangente e me ajudou a encontrar o stackoverflow.com/a/39188790 ; Percebi que atualizar o MobaXterm para> 9.0 me deu um terminal decente para a WSL.
David LeBauer 26/09/16
Se alguém estiver curioso, aqui está o link para o post do reddit do qual the "fix from reddit" for dbusfoi retirado.
tel
@tel obrigado! Eu realmente não sei de onde veio isso e ter adicionado o link ...
aikeru
Se o "problema visual que você não deseja corrigir" é que não consegue ver parte do prompt do diretório ou dos nomes de arquivos, o motivo é que eles são azul escuro. Eles não são visíveis no plano de fundo roxo do terminal gnomo. O truque é remapear a cor azul escuro para turquesa e depois funcionar bem.
WinEunuuchs2Unix 14/06
22

Demorou um pouco para descobrir todas as etapas implícitas nas outras respostas, então aqui está um resumo passo a passo:

  1. No Windows, instale o VcXsrv ou o XMing .
  2. Em Bash para Windows, instale o terminal: sudo apt-get install xfce4-terminal.
  3. Adicione export DISPLAY=:0ao seu .bashrc. (Adicionando .profileou .bash_profile não funcionou para mim ). Isso permitirá que você inicie xfce4-terminalcorretamente a partir do bash, mas é ortogonal ao comando abaixo.
  4. Execute o seguinte em um atalho ou no prompt Executar (como @OhJeez sugerido nos comentários):

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

Outras notas:

  • As ~partidas bashem seu diretório pessoal, você pode removê-lo para iniciar em qualquer diretório em que o .vbsarquivo esteja. Portanto, é conveniente colocá-lo C:\Users\foo, por exemplo.
  • Observe que o XMing precisa estar em execução para que o script funcione; para iniciá-lo automaticamente no Windows, você pode seguir as instruções deste artigo .
  • O Emacs 24 (incluído no Ubuntu 14.04) parece não funcionar com o XMing; Eu tive que instalar uma versão mais recente, conforme sugerido neste post .
Andrew Mao
fonte
1
Obrigado pela ajuda. Quando executo o script, nada parece acontecer (o servidor Xming está sendo executado). No entanto, se eu abrir o bash e executá- xfce4-terminallo, funcionará bem. Além disso, se eu correr bash -l -c xfce4-terminaldo windows cmd, recebo um aviso Gtk-WARNING **: cannot open display:e nada acontece. Estou bastante confuso, pois imaginei que esses comandos deveriam se comportar de forma idêntica, algum palpite?
rperryng
@perryng yeah - Eu também estou tentando conseguir um liner para abrir o xfce sem o feio prompt de comando do bash, mas sem sorte ainda.
Andrew Mao
1
Melhor solução para iniciar o xfce4-terminal usando o atalho. Há um lampejo, mas nenhuma janela fica para trás: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -Command "iex \"bash.exe ~ -c 'DISPLAY=:0 xfce4-terminal'\" " Uma outra versão que começará Xming se ele não está funcionando: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 legal, obrigado por trabalhar os meandros desse comando.
Andrew Mao
Solução alternativa para monitores de alta resolução. Se você tiver uma tela de 4k, terá fontes borradas no seu terminal. Para corrigir isso, você precisará: 1. Use "VcXsrv Windows X Server" em vez de Xing sourceforge.net/projects/vcxsrv 2. Execute o xserver no modo de compatibilidade. Para fazer isso, você precisará: clique no atalho do VcXsrv com o botão direito do mouse. Escolha "Propriedades". Na guia "Compatibilidade", defina a caixa de seleção em "Substituir comportamento de escala de alto DPI ..." e escolha "Aplicativo" no próximo menu suspenso. 3. Execute o xfce4-terminal e altere a configuração da fonte. Mude a fonte para uma maior.
koorchik
10

Criei (e uso) um terminal de código aberto para o Windows Subsystem for Linux (WSL) chamado wsl-terminal , baseado em minttye wslbridge.

captura de tela

Gore Liu
fonte
Tenha cuidado com a autopromoção - pode parecer spam. askubuntu.com/help/promotion
2
Auto-promoção é ok se você reconhecê-lo
David LeBauer
E você não reconheceu.
Muni
5
E, por favor, adicione alguns detalhes sobre por wsl-terminalque fornecerá uma melhor experiência de terminal.
Cynplytholowazy
2
Obrigado por compartilhar isso. Suas coisas já funcionam melhor que o terminal embutido - pelo menos ele pode lidar com quebra de linha na linha de comando um pouco melhor. Um CTRL-A para ir rapidamente para o início do comando ainda falha. Estou feliz com as pessoas se autopromoverem coisas assim. As pessoas devem se acalmar.
EDH
5

Em uma nova instalação do Ubuntu, eu apenas instalei o XMing (no Windows) e depois (no Ubuntu) xfce4-terminal, e depois eu funcionei export DISPLAY=:0.

Para se livrar do console padrão do Windows, este script VBS faz o trabalho:

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

(Com $ DISPLAY definido no seu .profile.)

edit: E para tornar o script fixável, crie um atalho com target wscript "C:\path\to\thescript.vbs".

n.caillou
fonte
O VBS parece funcionar, no entanto, a janela do terminal é aberta e fechada logo depois. Como posso mantê-lo funcionando?
TCB13
3

No Windows:

  • Clique no canto superior esquerdo da janela do bash.
  • No menu que se abre, selecione 'Propriedades'
  • Defina as opções que você deseja, como fonte etc. (existe até uma fonte mono do Ubuntu!)
  • Após definir as propriedades, elas serão aplicadas à janela atual. Para defini-los como padrão, clique no canto superior esquerdo da janela e clique em padrões.
  • Você pode pressionar Alt + Enter para alternar para o modo de tela cheia.

Eu espero que isso ajude.

mohi
fonte
Eu gostaria de salientar que ele tem a mesma aparência / uso que o terminal do Ubuntu (Gnome), exceto que adiciona suporte ao mouse. Você pode clicar nos títulos das colunas emhtop
WinEunuuchs2Unix 7/17
3

ConEmu funciona muito bem! Basta instalá-lo e iniciar um novo console {bash} . Eu adicionei cd ~ao meu .bashrcpadrão para iniciar no meu diretório pessoal.

Boa explicação: https://conemu.github.io/en/BashOnWindows.html

Bill Hoag
fonte
2

Extraterm é mais do que apenas um emulador de terminal. Ele fornece uma caixa de ferramentas para trabalhar com seus aplicativos de terminal e linha de comando.

  • Recursos
  • Suporta Linux e macOS, no Windows WSL, CMD, PowerShell e Cygwin
  • compatível com xterm
  • Várias guias e painéis, divididos e lado a lado da maneira que você quiser
  • Mostrar imagens no terminal
  • Suporte Unicode
  • Emoji colorido
  • Teclado amigável "Command Palette"
  • Ligações de teclas configuráveis
  • Seleções baseadas em teclado
  • Integração Shell; pode isolar e 'quadro' a saída do comando. (suporte para bash, zsh e fish)
  • Uploads e downloads fáceis usando a integração do shell
  • A saída do comando é editável no local. Edição multi-cursor
  • Saída de comando anterior pode ser usada como entrada para novos comandos
  • Suporta temas iTerm2 e TextMate
  • Zoom de texto
nelaaro
fonte
Agora estou usando este terminal, pois possui os recursos que realmente desejo. uma maneira fácil de alternar entre cmd, powershell, bash, fish etc.
nelaaro
1

Desde as atualizações mais recentes do Windows 10 (e WSL), tudo parece estar funcionando usando o console bash do Windows "nativo". (E eu não estou falando sobre a (in) famosa atualização do Windows 1809). Isso funciona mesmo na versão Enterprise pelo menos para a versão 1803 17134.345).

Consulte o artigo em https://www.hanselman.com/blog/SettingUpAShinyDevelopmentEnvironmentWithinLinuxOnWindows10.aspx

Um pequeno aviso - para realmente usar o console bash no Windows, é preciso lançar o tmux - e tudo funcionará como mostrado por Scott em seu blog.

Adrian
fonte
Isso é hilário! O "exec tmux" realmente resolve todos os problemas do terminal "bash.exe" nativo do Windows (linhas de corte estranhas após o redimensionamento).
Yves Dorfsman 23/10
1

Um terminal para uma idade mais moderno https://eugeny.github.io/terminus/

Terminus é um terminal fortemente inspirado pelo Hyper. É, no entanto, projetado para pessoas que precisam fazer as coisas.

  • Executa no Windows, macOS e Linux
  • Esquemas de temas e cores
  • Atalhos totalmente configuráveis
  • Suporte Unicode completo, incluindo caracteres de largura dupla
  • Não engasga com saídas de fluxo rápido
  • Experiência adequada do tipo shell no Windows, incluindo a conclusão de guias (via Clink)
  • Suporte para PowerShell (+ Core), WSL (Bash no Windows), Git-Bash, Cygwin, Cmder e CMD
  • Lembra suas guias
  • Cliente SSH integrado e gerenciador de conexões
nelaaro
fonte
1

https://hyper.is/

  • É baseado em elétrons, o que facilita o desenvolvimento e a extensão usando javascript.
  • Ele não usa o console padrão do Windows de forma alguma.
  • Ele permite que você escolha o bash do shell de back-end, 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
    

Temas e plugins muito bons

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

Usando este guia, pude obter meu WLS, bash funcionando muito bem.

nelaaro
fonte
Obrigado - parece um projeto interessante, mas você poderia dizer mais sobre o software e como configurá-lo para a WSL?
David LeBauer 25/01
1
@DavidLeBauer Espero que ajude.
nelaaro 25/01
Hyper é super lento.
Mithril
0

Estender as respostas de aikeru e n.caillou, pois nenhuma das soluções VBScript / JScript funcionou imediatamente para mim.

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

O script precisa ser anexado Callao usar parênteses no comando run, veja aqui . Também os carrapatos precisavam ser o contrário. Além disso, um argumento adicional para o xfce4-terminal iniciará o terminal na pasta inicial do usuário. Desculpe se isso realmente estava funcionando com código JScript, não tenho idéia sobre essas linguagens de script.

Salvando isso como um arquivo vbscript.vbs e executando a partir de um prompt do cmd ,

wscript vbscript.vbs

em seguida, abre uma janela do terminal xfce4 (dado que o XMing ou similar está em execução) após 2 segundos de atraso. Transformar isso em um atalho, como sugerido pelos trabalhos de n.caillou, e clicar no atalho gerará automaticamente uma nova janela do terminal do xfce com algum atraso.

Frederik Heber
fonte