2011-01-06 15:20:23 +0000 2011-01-06 15:20:23 +0000
284
284

tmux vs. schermo

Sto per tornare a usare GNU Screen , ma ho sentito persone menzionare occasionalmente tmux come un'alternativa migliore. Offre davvero un'alternativa a tutte le caratteristiche che offre Screen , come il monitoraggio delle attività in diverse finestre, ecc. Quali sono i pro e i contro di ciascuno?

Risposte (9)

177
177
177
2011-01-17 20:36:07 +0000

Alcune delle (principali) ragioni per cui preferisco tmux rispetto a screen:

  • La barra di stato è molto più facile da usare. Puoi facilmente impostare testi/stili diversi per la finestra corrente, le finestre con attività, ecc. e puoi mettere cose a sinistra e a destra della barra di stato, inclusi comandi di shell che possono essere eseguiti a un intervallo specificato (di default 15s).
  • Quasi ogni comando che puoi eseguire dentro tmux può essere eseguito da una shell con tmux command [args]. Questo lo rende molto facilmente scrivibile, così come rende facile eseguire comandi complessi.
  • Rinominazione automatica delle finestre molto più accurata. Mentre screen imposta il titolo in base alla prima parola del comando, e richiede una configurazione della shell per fare anche questo in una finestra di shell, tmux tiene traccia di quali processi sono effettivamente in esecuzione in ogni finestra, e aggiorna il titolo di conseguenza. In questo modo si ottiene una ridenominazione dinamica con qualsiasi shell e zero configurazione. Per esempio: Diciamo che stai usando la Z Shell; il nome della finestra sarebbe “zsh”. Ora diciamo che volete modificare qualche file di configurazione, quindi digitate sudo emacs /etc/somefile. Mentre sudo sta chiedendo la tua password, il nome della finestra sarà “sudo”, ma una volta che hai fatto questo e sudo lancia emacs, il titolo sarà “emacs”. Quando avete finito e uscite da emacs, il titolo tornerà ad essere “zsh”. Questo è piuttosto utile per tenere traccia delle finestre, e può anche essere particolarmente utile in situazioni specifiche, come se hai qualche processo in esecuzione da tempo in un'altra finestra che occasionalmente ti chiede un input usando dialog; il nome della finestra cambierebbe in “dialog” quando ciò accade, così sapresti di dover passare a quella finestra e fare qualcosa.
  • Gestione delle sessioni più bella (IMHO). Puoi fare molto di più con le sessioni all'interno di tmux stesso. Puoi facilmente cambiare, rinominare, ecc. e puoi spostare e condividere finestre tra le sessioni. Ha anche un modello diverso, dove ogni utente ha un server che controlla le sue sessioni e a cui il client si connette. Lo svantaggio di questo è che se il server si blocca, si perde tutto; non mi è mai capitato che il server si bloccasse, però.
  • tmux sembra essere sviluppato più attivamente. Ci sono aggiornamenti abbastanza frequentemente, e puoi presentare un rapporto di bug o una richiesta di funzionalità secondo questa FAQ e ottenere una risposta entro pochi giorni.

Queste sono solo le cose principali che mi vengono in mente immediatamente. Ci sono anche altre piccole cose, e sono sicuro che sto dimenticando alcune cose. Però vale sicuramente la pena di provare tmux.

100
100
100
2011-05-04 18:28:02 +0000

(Le Sessioni sono collezioni di finestre che possono essere staccate e riattaccate in seguito. Le finestre possono contenere uno o più panes. Per configurazioni di esempio, controlla qui e qui .)

tmux

  • Pro
  • Può inviare tasti ad altri pannelli, un po’ come un IDE
  • Keybindings facili – con la giusta configurazione, ti sentirai a casa da Vim o Screen
  • binding Vim-ish ed Emacs-ish incorporati
  • Buona gestione del layout, molto simile a un gestore di finestre a piastrelle
  • Unicode sembra funzionare solo con i terminali moderni
  • Alcuni problemi del terminale risolti con TERM=tmux
  • Contro
  • Lentezza – non so perché, ma la pressione dei tasti sembra laggosa Non ci sono più problemi di lentezza
  • Il multiplexing forza l'intera larghezza e altezza della sessione al più piccolo terminale collegato
  • Si è bloccato più volte su Mac OS X, perdendo l'intera sessione
  • Ha fallito su Linux dopo l'aggiornamento, dove non potevo riconnettermi alla mia vecchia sessione
  • Manca occasionalmente la digitazione dei comandi - ^A ^[ richiede alcuni tentativi per la modalità copia
  • Non si può spostare un pannello da una finestra all'altra Corretto con il comando join-pane
  • Nessun line unwrapping (o “reflow” o “rewrap”) dopo il cambiamento della larghezza del terminale (ridimensionamento della finestra)

GNU Screen

  • Pro
  • Estremamente stabile (v1. 0 era nel 1987)
  • Alcuni problemi del terminale risolti con TERM=screen
  • Collegamenti Emacs-ish incorporati
  • Facile da spostare e controllare i pannelli orizzontali
  • Quando si fa il multiplexing, ogni terminale collegato può ridimensionare un pannello
  • Contro
  • Nessuna suddivisione verticale senza patch (tranne che su Ubuntu)
  • Le suddivisioni dei pannelli vengono perse quando si stacca
  • Far funzionare Unicode richiede un po’ di finezza e determinazione
  • Configurazione folle della linea di stato
15
15
15
2015-04-10 18:05:27 +0000

Un pro per lo schermo: è disponibile praticamente out-of-the-box su Linux e Solaris. Quando si deve passare avanti e indietro tra le piattaforme, è bello non avere il cambio di contesto mentale.

Sono sicuro che puoi avere tmux compilato su qualsiasi piattaforma, ma a volte hai abbastanza accesso per fare uso di screen, ma gli attuali amministratori di sistema non vogliono davvero aggiungere alcun software che non sia assolutamente necessario.

13
13
13
2012-04-19 17:30:12 +0000

Sto usando tmux da circa 2 giorni, quindi il mio sfrenato entusiasmo per esso non è ancora stato temperato dal colpire casi d'uso fastidiosi.

Mentre passavo attraverso i soliti dolori di crescita del passaggio da un programma all'altro, sono stato colpito da diverse caratteristiche positive, ma la caratteristica che mi ha fatto credere che non tornerò mai più allo schermo è l'utilità della modalità copia-incolla.

In screen, non si può entrare in modalità copia, scorrere indietro nel buffer, e poi andare in un'altra finestra.

In tmux, si possono avere più finestre simultaneamente in modalità copia con il buffer scrollato indietro in posizioni diverse. Inoltre, ci sono più buffer di copia. E non c'è bisogno di patchare il sorgente per ottenere il movimento del cursore fFtT.

8
8
8
2011-01-06 15:38:55 +0000

Le cose che ottengo da tmux che non ottengo facilmente in schermo sono:

  1. fare spaccature verticali del pannello
  2. multiplexing, che usiamo per il pairing remoto e locale.
8
8
8
2016-01-17 16:10:36 +0000

Ho sostituito GNU Screen con tmux in ogni caso d'uso tranne uno - quando ho bisogno di un equivalente di HyperTerminal per connettermi a porte seriali. Come Aaron Toponce ha notato nel suo articolo “Connecting To Serial Null Modems With GNU Screen” , la tmux FAQ afferma:

screen ha un supporto seriale e telnet incorporato; questo è bloat ed è improbabile che venga aggiunto a tmux.

Il mio tipico caso d'uso di tmux è creare sessioni di sviluppo multi-pannello e multi-finestra in combinazione con tmuxinator . Se volete imparare tmux , vi consiglio di procurarvi il libro di Brian P. Hogan, tmux: Productive Mouse-Free Development .

4
4
4
2017-12-15 22:15:08 +0000

Uno dei manutentori di tmux, Thomas Adam, è anche elencato come manutentore del progetto screen anche se tocca solo il codice di tmux. Questo è un enorme pro di tmux rispetto a screen.

3
3
3
2019-01-16 06:25:48 +0000

Sono stato un pesante utente di Screen per molto tempo, ma uso una versione che ho modificato nel 2002. Principalmente perché volevo essere in grado di far sì che l'ordine di navigazione “next/prev” delle finestre corrispondesse all'ordine in cui le nuove finestre venivano create, in modo simile a un gestore di finestre a piastrelle come i3 o Ion . Il comportamento standard di Screen è che “next” e “prev” vadano per numero di finestra, così che di solito una “nuova” finestra (afferrando il più piccolo numero disponibile) sarà situata altrove rispetto alla finestra “next” - confondendo se non si ricordano i numeri. Il mio comportamento preferito è stato implementato in Tmux come un flag al comando new-window nel 2010 , e l'opzione renumber-windows nel 2012 . La mia patch Screen, che ho cercato di rendere il più accettabile possibile, includendo aggiunte alla documentazione e così via, non ha generato alcuna discussione sulla lista Screen nel luglio 2002 (poi “screen@informatik.uni-erlangen.de”, non riesco a trovare archivi). Infatti non fu nemmeno riconosciuto, anche quando lo inviai di nuovo un anno dopo.

Dal 2002, ho “ribasato” la mia patch un paio di volte per applicarla alle nuove versioni di Screen. Tuttavia, quando sono arrivato alla versione 4.3 (2015) ho notato un cambiamento non documentato che ha rotto uno dei miei usi di Screen - cioè che ‘roba’ ora interpola le variabili di ambiente . Non avevo bisogno di quella caratteristica, e non riuscivo a capire come fare facilmente l'escape dell'argomento a ‘stuff’ (in modo da poter inviare un testo contenente il segno del dollaro), così ho continuato a usare la versione 4.0 (dal 2004).

Uso ‘stuff’ di Screen (‘send-keys’ in Tmux) in una funzione Emacs che invia il contenuto della regione corrente di Emacs a uno specifico numero di finestra. In questo modo quando scrivo codice in un linguaggio di scripting, apro un interprete, do alla finestra dell'interprete un numero speciale, e poi posso inviare linee di codice dalla mia finestra dell'editor direttamente alla finestra dell'interprete usando questo binding Emacs. E’ un po’ macchinoso, ma mi piace di più della la soluzione Emacs pura , dato che posso anche interagire con l'interprete nella sua finestra dello schermo usando la normale pressione dei tasti. È un po’ come un IDE GUI, ma non devo usare il mouse o fissare un cursore lampeggiante.

Un'altra caratteristica che ho implementato nella mia patch è la possibilità di “marcare” una finestra, e poi di riposizionare la finestra marcata per essere “successiva” a quella corrente. Per me questo è un modo molto più naturale di riordinare le finestre rispetto alla rinumerazione; è come il paradigma del copia/incolla, o il “drag-and-drop”. (Ho recentemente scoperto come fare questo anche in i3 .)

Dovrebbe essere possibile fare la stessa cosa in Tmux, per esempio dal 2015 c'è una struttura per “marcare” un pannello. O forse una soluzione più elementare potrebbe essere elaborata con script di shell statici. Ho implementato un breve script e dei keybindings per provare il metodo “marked pane”, e ha funzionato alcune volte ma poi Tmux si è bloccato con “[lost server]”. Poi ho trovato Tmux che andava in crash anche senza il mio tentativo di fare qualcosa di complicato. A quanto pare va in crash per alcuni utenti da qualche anno almeno . A volte il server va in crash, a volte inizia a usare il 100% della CPU e diventa non reattivo. Non ho mai visto Screen fare nessuna delle due cose.

In teoria, Tmux è superiore a Screen 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, cosa impossibile con Screen. Per esempio nel 2015 Screen ha aggiunto un comando per “ordinare le finestre per titolo” . Non sono sicuro di quando un tale comando specializzato sarebbe utile, ma questo e variazioni più pratiche (ad esempio ordinare le finestre per uso della CPU) potrebbero essere fatte 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 altri poster hanno menzionato, Tmux ha un modello a server singolo che vedo come lo svantaggio principale, in particolare quando il server va in crash. È possibile aggirare questo problema specificando un socket separato per ogni “sessione”. Tuttavia preferisco il modello predefinito di Screen un server per sessione, che sembra leggermente più elegante.

Lavorare con il codice di Screen, nel 2002, è stato educativo e divertente per me. Stranamente, per tutte le sue caratteristiche aggiuntive, Tmux ha circa il 25% di linee di codice in meno rispetto a Screen (30k contro 40k). Ho notato che Tmux usa molte strutture dati ad albero e a lista, che erano leggermente difficili da capire per me. Screen sembrava preferire gli array.

Da quanto ho capito, poiché l'interfaccia terminale Unix è così stabile, c'è poco bisogno che il codice di Screen o Tmux si adatti ai cambiamenti del sistema operativo sottostante. Questi programmi non hanno davvero aggiornamenti di sicurezza come i browser web o i server web o anche la shell. Non ho notato alcun problema nell'eseguire la mia versione personalizzata di Screen, aggiornata l'ultima volta nel 2004 (eccetto la necessità di aggiungere alcuni file di configurazione per evitare che Systemd cancelli il socket ; questi file sono tipicamente parte del pacchetto di distribuzione comunque). Forse potrei semplicemente aggirare i problemi che ho incontrato in Tmux eseguendo una versione di Tmux da prima che iniziasse a bloccarsi. Naturalmente, se un numero sufficiente di utenti lo fa, non sarà un bene per i nuovi utenti, poiché significa che meno esperti cercheranno bug nelle ultime versioni ufficiali di questi programmi. Tuttavia, è difficile motivarmi a passare a un prodotto che è instabile per me (l'ultimo Tmux) o che manca di alcune caratteristiche che voglio (Standard Screen).

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

2
2
2
2012-06-21 15:27:36 +0000

Direi che la disponibilità di Screen è la sua forza, ma il suo sistema di finestre non è così facile da gestire come quello di tmux . Devo dire che attualmente uso gnu-screen per la maggior parte del tempo e come risultato ho un sacco di schede di terminale invece di finestre di Screen.

@Jed Schneider: Puoi ottenere la divisione verticale dei pannelli con Ctrl+A e poi | (barra verticale).