Un'esperienza terminale migliore per il sottosistema Windows per Linux (WSL)?


29

Il terminale per il sottosistema Windows per Linux (WSL) è abbastanza minimale. Non ho usato molto il terminale su Windows - generalmente utilizzo Ubuntu o OSX - ma sono sorpreso che il terminale predefinito sia così nudo.

È possibile:

  1. Collegare un programma terminale di Windows a WSL o

  2. Avviare il programma terminale Ubuntu da WSL come una finestra X?

Risposte:


26

Personalmente faccio quest'ultimo: uso VcXsrv come mio server X in modalità finestre multiple, quindi lancio xfce4-terminal (perché gnome-terminal ha avuto problemi visivi che non mi importava di provare a imparare a risolvere), e improvvisamente ho un terminale competente con supporto di caratteri e colori.

Ho scoperto che dovevo aggiungere questi al mio bashrc ...

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

Fai la correzione da questo reddit per dbus:

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

Ho anche installato compiz e utilizzo il progetto cbwin per eseguire programmi Windows dalla mia shell xfce4-terminal.

Sono molto contento di questa configurazione e uso NeoVim + molti plugin nativi di Linux anche se la mia macchina "per lavoro" deve essere Windows. :)

È anche possibile avviare un server SSH in Bash-on-Linux-on-Windows e quindi connettersi ad esso, diciamo da MinTTY come da Cygwin.

PS: per rendere il lancio di xfce4-terminal indolore e senza la finestra extra bash cmd, ho scritto un programma che non fa altro che avviare il processo bash con argomenti per avviare xfce4-terminal senza una finestra della console. L'ho fatto in C # - fondamentalmente uso gli argomenti "UseShellExecute" false e "CreateNoWindow" true. L'ho quindi aggiunto alla barra delle applicazioni ed è quasi apparente.

EDIT: la risposta con VBScript è brillante. Ecco lo stesso script, ma una versione di JScript ...

WScript.CreateObject("WScript.Shell").run('bash.exe -l -c "DISPLAY=:0.0 xfce4-terminal"', 0, false);

1
Risposta selezionata perché è completa e mi ha aiutato a trovare stackoverflow.com/a/39188790 ; Mi sono reso conto che l'aggiornamento di MobaXterm a> 9.0 mi ha dato un terminale decente per WSL.
David LeBauer,

Se qualcuno è curioso, ecco il link al reddit post da cui è the "fix from reddit" for dbusstato rimosso.
tel

@tel grazie! In realtà non sapevo da dove provenisse e ho aggiunto il link ...
aikeru,

Se il "problema visivo che non ti interessa risolvere" è che non puoi vedere parte del prompt della directory o dei nomi dei file, il motivo è che sono blu scuro. Non sono visibili sullo sfondo viola dello gnomo-terminale. Il trucco è rimappare il colore dal blu scuro al turchese e poi funziona benissimo.
WinEunuuchs2Unix

22

Ci è voluto un po 'di tempo per capire tutti i passaggi impliciti nelle altre risposte, quindi ecco un riassunto passo dopo passo:

  1. Su Windows, installa VcXsrv o XMing .
  2. In Bash per Windows, installare il terminale: sudo apt-get install xfce4-terminal.
  3. Aggiungi export DISPLAY=:0al tuo .bashrc. (Aggiungendolo .profileo .bash_profile non ha funzionato per me ). Ciò ti consentirà di iniziare xfce4-terminalcorrettamente da bash, ma è ortogonale al comando seguente.
  4. Eseguire quanto segue in un collegamento o nel prompt Esegui (come suggerito da @OhJeez nei commenti):

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

Altre note:

  • Si ~avvia bashnella home directory, è possibile rimuoverlo per iniziare in qualsiasi directory in cui si trova il .vbsfile, invece. Quindi è conveniente inserirlo C:\Users\foo, ad esempio.
  • Si noti che XMing deve essere in esecuzione affinché lo script funzioni; per avviarlo automaticamente con Windows puoi seguire le istruzioni in questo articolo .
  • Emacs 24 (incluso con Ubuntu 14.04) non sembra funzionare con XMing; Ho dovuto installare una versione più recente come suggerito in questo post .

1
Grazie per l'aiuto. Quando eseguo lo script, sembra che non accada nulla (il server Xming è in esecuzione). Tuttavia, se apro bash ed eseguo xfce4-terminalfunziona perfettamente. Inoltre, se corro bash -l -c xfce4-terminalda Windows cmd, ricevo un avviso Gtk-WARNING **: cannot open display:e non succede nulla. Sono abbastanza confuso mentre immaginavo che questi comandi dovessero comportarsi in modo identico, qualche ipotesi?
rperryng,

@rperryng yeah - Sto anche cercando di ottenere un one-liner per aprire xfce senza il brutto prompt dei comandi bash in mezzo, ma ancora nessuna fortuna.
Andrew Mao,

1
La migliore soluzione per l'avvio di xfce4-terminal usando il collegamento. C'è uno sfarfallio, ma nessuna finestra rimane dietro: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -Command "iex \"bash.exe ~ -c 'DISPLAY=:0 xfce4-terminal'\" " un'altra versione che avvierà Xming se non è in esecuzione: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 bello, grazie per aver elaborato la complessità di quel comando.
Andrew Mao,

Soluzione alternativa per display ad alta risoluzione. Se hai un display 4K, avrai caratteri sfocati nel tuo terminale. Per risolvere questo problema dovrai: 1. Utilizzare "VcXsrv Windows X Server" invece di Xing sourceforge.net/projects/vcxsrv 2. Eseguire xserver in modalità compatibilità. Per fare ciò è necessario: fare clic sul collegamento VcXsrv con il tasto destro del mouse. Scegli "Proprietà". Nella scheda "Compatibilità" impostare la casella di controllo su "Sostituisci comportamento di ridimensionamento DPI elevato ..." e selezionare "Applicazione" nel menu a discesa successivo. 3. Eseguire xfce4-terminal e modificare l'impostazione del carattere. Cambia carattere in uno più grande.
koorchik,

10

Ho creato (e utilizzato) un terminale open source per il sottosistema Windows per Linux (WSL) chiamato wsl-terminal , basato su minttye wslbridge.

immagine dello schermo


Fai attenzione all'autopromozione: può sembrare spam. askubuntu.com/help/promotion

2
L'auto-promozione è ok se lo riconosci
David LeBauer,

E non l'hai riconosciuto.
Muru,

5
E per favore, aggiungi alcuni dettagli sul perché wsl-terminalfornirà una migliore esperienza terminale.
Cynplytholowazy,

2
Grazie per aver condiviso questo. Le tue cose funzionano già meglio del terminale integrato - almeno possono gestire un po 'meglio il wrapping di linea sulla riga di comando. Un CTRL-A per andare rapidamente all'inizio del comando comunque non riesce. Sono contento che le persone si auto-promuovano cose come questa. Le persone dovrebbero calmarsi.
EdH,

5

Su una nuova installazione di Ubuntu, ho appena installato XMing (in Windows) e poi (in Ubuntu) xfce4-terminal, e dopo che ho export DISPLAY=:0funzionato.

Per sbarazzarsi della console predefinita di Windows, questo script VBS fa il lavoro:

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

(Con $ DISPLAY impostato nel tuo .profile.)

modifica: E per rendere lo script pin'able, crea un collegamento con target wscript "C:\path\to\thescript.vbs".


Il VBS sembra funzionare, tuttavia la finestra del terminale è aperta e chiusa subito dopo. Come posso mantenerlo attivo?
TCB13,

3

Su Windows:

  • Fai clic sull'angolo in alto a sinistra della finestra di bash.
  • Nel menu che si apre selezionare 'Proprietà'
  • Imposta le opzioni che vuoi come font ecc. (C'è anche un font mono Ubuntu!)
  • Dopo aver impostato le proprietà verranno applicate per la finestra corrente. Per impostarli come predefiniti, fare clic nella parte superiore sinistra della finestra e fare clic sui valori predefiniti.
  • È possibile premere Alt + Invio per attivare la modalità a schermo intero.

Spero che aiuti.


Vorrei sottolineare che ha lo stesso aspetto / utilizzo del terminale Ubuntu (Gnome) tranne che aggiunge il supporto del mouse. cioè puoi fare clic sulle intestazioni di colonna inhtop
WinEunuuchs2Unix


2

Extraterm è molto più di un semplice emulatore di terminale. Fornisce una cassetta degli attrezzi per lavorare con il terminale e le applicazioni della riga di comando.

  • Caratteristiche
  • Supporta Linux e macOS, su Windows WSL, CMD, PowerShell e Cygwin
  • compatibile con xterm
  • Più schede e riquadri, divisi e affiancati come preferisci
  • Mostra le immagini nel terminale
  • Supporto Unicode
  • Emoji a colori
  • Tastiera comandi intuitiva
  • Associazioni chiave configurabili
  • Selezioni basate sulla tastiera
  • Integrazione Shell; può isolare e 'comandare' l'output del comando. (bash, zsh e fish supportati)
  • Upload e download facili tramite l'integrazione della shell
  • L'output del comando è modificabile sul posto. Modifica multi-cursore
  • L'output del comando precedente può essere utilizzato come input per i nuovi comandi
  • Supporta temi iTerm2 e TextMate
  • Zoom del testo

Ora sto usando questo terminale, in quanto ha le caratteristiche che desidero davvero. un modo semplice per passare da cmd, powershell, bash, fish etc.
nelaaro

1

Dagli ultimi aggiornamenti a Windows 10 (e WSL) tutto sembra funzionare utilizzando la console bash di Windows "nativa". (E non sto parlando del (in) famoso aggiornamento di Windows del 1809). Funziona anche con la versione Enterprise almeno per la build del 1803 17134.345).

Vedi l'articolo su https://www.hanselman.com/blog/SettingUpAShinyDevelopmentEnvironmentWithinLinuxOnWindows10.aspx

Un piccolo avvertimento - per usare davvero la console bash in Windows si dovrebbe avviare tmux - e tutto funzionerà come mostrato da Scott nel suo blog.


Questo è divertente! "exec tmux" risolve infatti tutti i problemi del terminale "bash.exe" nativo di Windows (strane linee di taglio dopo il ridimensionamento).
Yves Dorfsman,

1

Un terminale per un'età più moderna https://eugeny.github.io/terminus/

Terminus è un terminale fortemente ispirato a Hyper. È, tuttavia, progettato per le persone che hanno bisogno di fare le cose.

  • Funziona su Windows, macOS e Linux
  • Temi e combinazioni di colori
  • Scorciatoie completamente configurabili
  • Supporto Unicode completo inclusi caratteri a doppia larghezza
  • Non soffoca sulle uscite a flusso rapido
  • Esperienza corretta simile a una shell su Windows incluso il completamento delle schede (tramite Clink)
  • Supporto per PowerShell (+ Core), WSL (Bash su Windows), Git-Bash, Cygwin, Cmder e CMD
  • Ricorda le tue schede
  • Client SSH integrato e gestione connessione

1

https://hyper.is/

  • Si basa sull'elettrone che semplifica lo sviluppo e l'estensione tramite javascript.
  • Non utilizza la console di Windows predefinita in alcun modo.
  • Ti permette di scegliere il tuo backend shell bash, 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
    

Temi e plugin molto carini

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

Usando questa guida sono stato in grado di ottenere il mio WLS, bash funziona molto bene.


Grazie - sembra un progetto interessante ma potresti dire di più sul software e su come configurarlo per WSL?
David LeBauer, il

1
@DavidLeBauer Spero che ti aiuti.
nelaaro,

Hyper è super lento.
Mithril,


0

Estendere le risposte di aikeru e n.caillou in quanto nessuna delle loro soluzioni VBScript / JScript ha funzionato immediatamente per me.

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

Lo script deve essere anteposto Callquando si utilizza la parentesi nel comando di esecuzione, vedere qui . Anche le zecche dovevano essere al contrario. Inoltre, un ulteriore argomento su xfce4-terminal avvierà il terminale nella cartella principale dell'utente. Scusate se in realtà funzionava con il codice JScript, non ho idea di questi linguaggi di scripting.

Salvandolo come file vbscript.vbs ed eseguendolo da un prompt cmd di

wscript vbscript.vbs

quindi apre una finestra del terminale xfce4 (dato che XMing o simili è in esecuzione) dopo 2 secondi di ritardo. Trasformandolo in una scorciatoia come suggerito dalle opere di n.caillou e facendo clic sulla scorciatoia si genererà automaticamente una nuova finestra del terminale xfce con un certo ritardo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.