tmux vs. screen


262

Sto per ricominciare a usare GNU Screen , ma ho sentito persone che ogni tanto menzionano tmux come alternativa migliore. Offre davvero un'alternativa a tutte le funzionalità offerte dallo schermo , come il monitoraggio delle attività in finestre diverse, ecc.? Quali sono i pro ed i contro di ognuno?



2
Nella schermata è possibile inviare comandi a una sessione collegata tramite screen -S automate_me -X stuff 'command'$(echo -ne '\015')non è possibile in tmux. Abbastanza utile se stai testando un ISO / immagine di virtualbox e devi eseguire alcuni comandi in remoto rapidamente. Ad esempio, ho un comando Vim per eseguire il debug rapido degli script in una schermata di Virtualbox. Nelle versioni precedenti di tmux ho scoperto che lo schermo gestiva rapidamente più testo mentre passava in crash. Inoltre lo schermo non richiede alcuna configurazione per gestire UTF-8 ecc.
dezza,

Non tmuxgestire historycorrettamente?
beroe

Risposte:


170

Alcuni dei motivi (principali) che preferisco tmuxrispetto a screen:

  • La barra di stato è molto più facile da usare. Puoi facilmente impostare diversi testi / stili per la finestra corrente, le finestre con attività, ecc. E puoi mettere le cose a sinistra e a destra della barra di stato, inclusi i comandi di shell che possono essere eseguiti a un intervallo specificato (15 secondi predefiniti).
  • Quasi tutti i comandi che è possibile eseguire all'interno tmuxpossono essere eseguiti da una shell con tmux command [args]. Questo lo rende molto facilmente gestibile tramite script, oltre a rendere semplice l'esecuzione di comandi complessi.
  • Rinomina automatica delle finestre molto più accurata. Mentre screenimposta il titolo in base alla prima parola del comando e richiede la configurazione della shell per farlo anche in una finestra della shell, tmuxtiene traccia di quali processi sono effettivamente in esecuzione in ciascuna finestra e aggiorna il titolo di conseguenza. In questo modo si ottiene una ridenominazione dinamica con qualsiasi shell e nessuna configurazione. Ad esempio: supponiamo che tu stia eseguendo Z Shell; il nome della finestra sarebbe "zsh". Ora supponiamo che tu voglia modificare alcuni file di configurazione, quindi digiti sudo emacs /etc/somefile. Mentre sudo richiede la tua password, il nome della finestra sarà "sudo", ma una volta che lo hai fatto e viene sudoavviato emacs, il titolo sarà "emacs". Quando hai finito e esciemacs, il titolo tornerà a "zsh". Questo è abbastanza utile per tenere traccia di Windows, e può anche essere particolarmente utile in situazioni specifiche, come se hai un processo di lunga durata in un'altra finestra che ti richiede occasionalmente l'input usando dialog; il nome della finestra cambierà in "finestra di dialogo" quando ciò accade, quindi sapresti che devi passare a quella finestra e fare qualcosa.
  • Migliore gestione delle sessioni (IMHO). Puoi fare molto di più con le sessioni al tmuxsuo interno . Puoi facilmente cambiare, rinominare, ecc. E puoi spostare e condividere finestre tra le sessioni. Ha anche un modello diverso, in cui ogni utente ha un server che controlla le sue sessioni e al quale il client si connette. L'aspetto negativo di questo è che se il server si arresta in modo anomalo, si perde tutto; Non ho mai avuto il crash del server su di me, però.
  • tmuxsembra essere sviluppato più attivamente. Ci sono aggiornamenti abbastanza frequentemente e puoi presentare una segnalazione di bug o una richiesta di funzionalità in base a queste FAQ e ottenere una risposta entro pochi giorni.

Queste sono solo le cose principali che mi vengono subito in mente. Ci sono anche altre piccole cose, e sono sicuro che sto dimenticando alcune cose. Ne vale la pena tmuxprovare, però.


151
lo sviluppo di tmux è più attivo perché è nuovo . Lo schermo GNU ha quasi 25 anni , quindi hanno corretto la maggior parte dei bug.
un secchione pagato

8
Il commento di un nerd pagato è una qualifica molto importante del tuo ultimo punto. E il secondo punto, come affermato, non è in realtà una differenza in quanto si applica anche allo schermo a meno che tu non possa essere più specifico.
jw013


11
@apaidnerd è una dichiarazione molto ricca: savannah.gnu.org/bugs/…
Błażej Michalik

93

(Le sessioni sono raccolte di finestre che possono essere staccate e ricollegate in un secondo momento. Windows può contenere uno o più riquadri . Ad esempio le configurazioni, controlla qui e qui .)

tmux

  • Professionisti
    • Può inviare chiavi ad altri riquadri, un po 'come un IDE
    • Tasti semplici: con la giusta configurazione, ti sentirai a casa da Vim o Screen
    • Attacchi Vim-ish ed Emacs-ish integrati
    • Buona gestione del layout, molto simile a un gestore di finestre di piastrellatura
    • Unicode sembra funzionare solo con terminali moderni
    • Alcuni problemi terminali risolti con TERM=tmux
  • Contro
    • Lento - incerto sul perché, ma i tasti sembrano ritardati Niente più problemi con la lentezza
    • Il multiplexing forza l'intera larghezza e l'altezza della sessione sul più piccolo terminale collegato
    • Si è bloccato più volte su Mac OS X, perdendo l'intera sessione
    • Non è riuscito su Linux dopo l'aggiornamento, dove non sono riuscito a riconnettermi alla mia vecchia sessione
    • Mancano occasionalmente i tasti di comando: ^A ^[richiede alcuni tentativi per la modalità di copia
    • Impossibile spostare un riquadro da una finestra all'altra Risolto con il join-panecomando
    • Nessuna linea da scartare (o "reflow" o "rewrap") dopo la modifica della larghezza del terminale (ridimensionamento della finestra)

Schermo GNU

  • Professionisti
    • Estremamente stabile (v1.0 era nel 1987)
    • Alcuni problemi terminali risolti con TERM=screen
    • Attacchi Emacs-ish integrati
    • Pannelli orizzontali facili da spostare e controllare
    • Durante il multiplexing, qualsiasi terminale collegato può ridimensionare un riquadro
  • Contro
    • Nessuna divisione verticale senza patch (tranne su Ubuntu)
    • Le divisioni del riquadro vengono perse durante il distacco
    • Far funzionare Unicode richiede un po 'di finezza e determinazione
    • Configurazione della linea di stato pazza

I tasti ritardi sono solo quando si preme Esc? tmux ha un ritardo in cui attende di vedere se stai inserendo una sequenza xterm o solo una Esc solitaria e, combinato con Vim, può sembrare piuttosto lento. Imposta il tempo di fuga su un valore inferiore come 50.
Eevee,

È anche divertente che dici ^A ^[che a volte non funziona; Ho lo stesso problema con lo schermo, ma mai tmux! E credo che puoi spostare i riquadri con join-pane.
Eevee,

Trovo che lo schermo usi molta più memoria, che potrebbe essere inclusa come uno svantaggio.
paradroid

6
Bene, fa tmuxschifo vim, in alcuni casi (il mio in particolare), nessuna soluzione mai pubblicata ovunque funziona, e nemmeno le persone che passano un po 'di tempo a risolvere il mio problema non sono state in grado di farlo. È fastidioso quando non puoi usarlo <C-Left>e <C-Right>entrare vim.
yo'

3
No vertical splits without patch (except on Ubuntu)Non penso sia vero. Sto usando lo schermo da alcuni anni e non ho mai avuto problemi a dividere orizzontalmente o verticalmente su Debian e Fedora. Anche su Android con Termux funziona come un fascino.
Forivin,

12

Un professionista per lo schermo: è disponibile praticamente pronto all'uso su Linux e Solaris. Quando devi passare da una piattaforma all'altra, è bello non cambiare il contesto mentale.

Sono sicuro che puoi compilare tmux su qualsiasi piattaforma, ma a volte hai abbastanza accesso per utilizzare lo schermo, ma i veri amministratori di sistema non vogliono davvero aggiungere alcun software che non sia assolutamente necessario.


10

Uso tmux da circa 2 giorni, quindi il mio entusiasmo sfrenato non è ancora stato mitigato dal colpire fastidiosi casi d'uso. Mentre attraversavo i soliti crescenti problemi di transizione da un programma a un altro, sono stato colpito da diverse funzioni positive, ma la caratteristica che mi fa credere che non tornerò mai più allo schermo è l'utilità della modalità copia-incolla. Nella schermata, non è possibile accedere alla modalità di copia, scorrere indietro nel buffer e quindi passare a un'altra finestra. In tmux, puoi avere più finestre contemporaneamente in modalità copia con il buffer fatto scorrere indietro in posizioni diverse. Inoltre, ci sono più buffer di copia. E non è necessario patchare la sorgente per ottenere il movimento del cursore fFtT.


8

Le cose che ottengo da questi non sono facilmente visibili sullo schermo sono:

  1. fare divisioni del riquadro verticale
  2. multiplexing, che utilizziamo per l'accoppiamento remoto e locale.


Come menzionato nei post precedenti, lo schermo ha suddivisioni verticali del riquadro (a quanto pare richiede una patch senza Ubuntu). Inoltre, il multiplexing funziona bene e dura da molti anni.
Entangled

le divisioni verticali sono in linea di massima screendal 4.2, pubblicato nel 2014. Molte distribuzioni sono dotate di versioni molto vecchie, in particolare Apple.
Neal Fultz,

2
Entrambi i punti sono errati.
Forivin,

2
La risposta non è corretta nel 2018
Alec Istomin

5

Ho sostituito lo schermo GNU con tmux in ogni caso d'uso tranne uno, quando ho bisogno di un HyperTerminal equivalente per collegarmi alle porte seriali. Come notato da Aaron Toponce nel suo articolo "Collegamento a modem null seriali con schermo GNU" , la FAQ di tmux afferma:

lo schermo ha incorporato il supporto seriale e telnet; questo è gonfio ed è improbabile che venga aggiunto a tmux.

Il mio tipico caso d' uso di tmux è creare sessioni di sviluppo multi-riquadro e multi-finestra in combinazione con tmuxinator . Se vuoi imparare tmux , ti consiglio di prendere il libro di Brian P. Hogan, tmux: Sviluppo produttivo senza mouse .


Sai cu Richiamare un altro sistema ? Tty seriale più semplice dello schermo , ma leggero e utile!
F. Hauri,

2

Sono stato un grande utente di Screen per molto tempo, ma uso una versione che ho modificato nel 2002. Principalmente perché volevo essere in grado di far corrispondere l'ordine di navigazione "prossimo / precedente" della finestra all'ordine in cui nuovo sono state create windows, in modo simile a un window manager per la piastrellatura come i3 o Ion . Il comportamento standard dello schermo è per "successivo" e "precedente" in base al numero della finestra, quindi di solito una "nuova" finestra (che cattura il numero più piccolo disponibile) si troverà altrove rispetto alla finestra "successiva" - confondendo se non si " ricordo i numeri. Da allora il mio comportamento preferito è stato implementato in Tmux come flag per il comando new-window nel 2010 e l' opzione renumber-windows nel 2012. La mia patch per lo schermo, che ho cercato di rendere il più accettabile possibile, comprese le aggiunte alla documentazione e così via, non ha generato alcuna discussione sull'elenco dello schermo nel luglio 2002 (quindi "screen@informatik.uni-erlangen.de", non posso trova archivi). In realtà non è stato nemmeno riconosciuto, anche quando l'ho inviato di nuovo un anno dopo.

Dal 2002 ho "riordinato" la mia patch un paio di volte per applicarla alle versioni più recenti di Screen. Tuttavia, quando sono arrivato alla versione 4.3 (2015) ho notato una modifica non documentata che ha interrotto uno dei miei usi dello schermo - vale a dire che "roba" ora interpola le variabili di ambiente . Non avevo bisogno di quella funzione e non riuscivo a capire come sfuggire facilmente all'argomento "roba" (in modo da poter inviare testo contenente segni di dollaro), quindi ho continuato a utilizzare la versione 4.0 (dal 2004).

Uso le "cose" di Screen ("send-keys" in Tmux) in una funzione Emacs che invia il contenuto della regione corrente di Emacs a un numero di finestra specifico. In questo modo, quando scrivo codice in un linguaggio di scripting, apro un interprete, conferisco alla finestra dell'interprete un numero speciale e quindi posso inviare righe di codice dalla mia finestra dell'editor direttamente alla finestra dell'interprete usando questo binding Emacs. È confuso, ma mi piace meglio della soluzione pure-Emacs , poiché posso anche interagire con l'interprete nella sua finestra su schermo usando i tasti standard. È un po 'come un IDE della GUI, ma non devo usare il mouse o fissare un cursore lampeggiante.

Un'altra caratteristica che ho implementato nella mia patch è la possibilità di "contrassegnare" una finestra e quindi di riposizionare la finestra contrassegnata in modo che sia "successiva" dopo quella corrente. Per me questo è un modo molto più naturale di riordinare le finestre che rinumerare; è come il paradigma copia / incolla o "trascina selezione". (Di recente ho capito come fare anche in i3 .)

Dovrebbe essere possibile fare la stessa cosa in Tmux, ad esempio dal 2015 esiste una possibilità per "contrassegnare" un riquadro. O forse una soluzione più elementare potrebbe essere elaborata con script shell con stato. Ho implementato un breve script e combinazioni di tasti per provare il metodo "riquadro contrassegnato", e ha funzionato alcune volte ma poi Tmux si è bloccato con "[server perso]". Poi ho trovato Tmux in crash anche senza il mio tentativo di fare qualcosa di complicato. Apparentemente si è verificato un arresto anomalo per alcuni utenti da almeno alcuni anni . A volte il server si arresta in modo anomalo, a volte inizia a utilizzare il 100% della CPU e non risponde. Non ho mai visto Screen fare uno di questi.

In teoria, Tmux è superiore allo schermo in diversi modi. Ha una scriptabilità molto migliore, il che significa che puoi fare cose come interrogare l'elenco delle finestre nella sessione corrente dalla riga di comando, il che è impossibile con Screen. Ad esempio, nel 2015 Screen ha aggiunto un comando per "ordinare le finestre per titolo" . Non sono sicuro quando sarebbe utile un comando così specializzato, ma questa e altre varianti pratiche (ad esempio, ordinare le finestre in base all'utilizzo della CPU) potrebbero essere eseguite relativamente facilmente da uno script di shell in Tmux. A me sembrerebbe difficile fare qualcosa di così creativo in Screen, almeno senza modificare il codice C.

Come menzionato da altri poster, Tmux ha un modello a server singolo che vedo come il principale svantaggio, in particolare quando il server si arresta in modo anomalo. È possibile aggirare il problema specificando un socket separato per ogni "sessione". Preferisco ancora l'impostazione predefinita di un server per sessione di Screen, che sembra leggermente più elegante.

Lavorare con il codice dello schermo, nel 2002, è stato educativo e divertente per me. Stranamente, nonostante tutte le sue funzionalità aggiuntive, Tmux ha circa il 25% in meno di righe di codice rispetto a Screen (30k contro 40k). Ho notato che Tmux utilizza molte strutture di dati ad albero ed elenco, che sono state leggermente difficili da capire. Lo schermo sembrava preferire le matrici.

A quanto ho capito, poiché l'interfaccia del terminale Unix è così stabile, non è necessario che il codice Screen o Tmux si adatti alle modifiche del sistema operativo sottostante. Questi programmi in realtà non hanno aggiornamenti di sicurezza come browser Web o server Web o persino la shell. Non ho notato problemi nell'esecuzione della mia versione personalizzata di Screen, ultimo aggiornamento nel 2004 (tranne per la necessità di aggiungere alcuni file di configurazione per impedire a Systemd di eliminare il socket; questi file fanno generalmente parte del pacchetto di distribuzione). Forse potrei solo aggirare i problemi che ho riscontrato in Tmux eseguendo una versione di Tmux da prima che iniziasse a bloccarsi. Ovviamente, se un numero sufficiente di utenti lo fa, non sarà molto buono per i nuovi utenti, dal momento che significa che un minor numero di esperti cercherà bug nelle ultime versioni ufficiali di questi programmi. Tuttavia, è difficile motivarmi a passare a un prodotto che è instabile per me (ultimo Tmux) o che manca di alcune funzionalità che desidero (schermo standard).

So che questo non fornisce una risposta facile alla domanda del PO, ma spero che la mia prospettiva sia stata utile.


2

Uno dei manutentori di tmux, Thomas Adam, è anche elencato come manutentore del screenprogetto sebbene tocchi solo il codice tmux. Questo è un grande pro di tmux sullo schermo.


1

Direi che la disponibilità dello schermo è il suo punto di forza, ma il suo sistema di finestre non è facile da gestire come quello di . Devo dire che uso maggior parte del tempo al momento e di conseguenza ho molte schede terminali al posto delle finestre dello schermo.

@Jed Schneider: puoi dividere i riquadri verticali con Ctrl+ Ae poi |(barra verticale).

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.