tmux vs. screen

262

Ich bin kurz davor, GNU Screen wieder zu verwenden , aber ich habe gelegentlich gehört, dass Leute tmux als bessere Alternative erwähnt haben. Bietet es wirklich eine Alternative zu allen Funktionen, die der Bildschirm bietet, wie z. B. Aktivitätsüberwachung in verschiedenen Fenstern usw.? Was sind die Vor- und Nachteile von jedem?

Alison R.
quelle
7
Auch diskutiert unter unix.stackexchange.com/questions/549/tmux-vs-gnu-screen
Lloyd Dewolf
2
Auf dem Bildschirm können Sie Befehle an eine angehängte Sitzung senden, die screen -S automate_me -X stuff 'command'$(echo -ne '\015')Sie in tmux nicht können. Ziemlich nützlich, wenn Sie ein Virtualbox-ISO / -Image testen und einige Befehle aus der Ferne schnell ausführen müssen. Zum Beispiel habe ich es in einem Vim-Befehl, um Skripte in einem Virtualbox-Bildschirm schnell zu debuggen. In früheren Versionen von tmux habe ich festgestellt, dass der Bildschirm mehr Text verarbeitet, während tmux abstürzte. Außerdem benötigt der Bildschirm keine Konfiguration, um UTF-8 usw. handhaben zu können.
Dezza
Hat tmuxGriff historyrichtig?
Beroe

Antworten:

170

Einige der (großen) Gründe , warum ich es vorziehen , tmuxüber screen:

  • Die Statusleiste ist viel einfacher zu bedienen. Sie können auf einfache Weise verschiedene Texte / Stile für das aktuelle Fenster, Fenster mit Aktivität usw. einrichten und Dinge links und rechts von der Statusleiste einfügen, einschließlich Shell-Befehlen, die in einem bestimmten Intervall ausgeführt werden können (Standard 15s).
  • Fast jeder Befehl, den Sie ausführen tmuxkönnen, kann von einer Shell mit ausgeführt werden tmux command [args]. Dies macht es sehr einfach, Skripte zu erstellen und komplexe Befehle auszuführen.
  • Viel genaueres automatisches Umbenennen von Fenstern. Während screender Titel auf der Grundlage des ersten Wortes des Befehls festgelegt wird und die Shell-Konfiguration dies auch in einem Shell-Fenster erfordert, wird tmuxverfolgt, welche Prozesse in den einzelnen Fenstern tatsächlich ausgeführt werden, und der Titel wird entsprechend aktualisiert. Auf diese Weise erhalten Sie eine dynamische Umbenennung mit jeder Shell- und Null-Konfiguration. Beispiel: Angenommen, Sie führen Z Shell aus. der Name des Fensters wäre "zsh". Nehmen wir nun an, Sie möchten eine Konfigurationsdatei bearbeiten und geben sie ein sudo emacs /etc/somefile. Während sudo nach Ihrem Passwort fragt, lautet der Name des Fensters "sudo". Sobald Sie dies getan und sudogestartet haben emacs, lautet der Titel "emacs". Wenn Sie alle fertig sind und Sie verlassenemacswird der Titel wieder in "zsh" geändert. Dies ist sehr nützlich, um die Übersicht über Fenster zu behalten. Es kann auch in bestimmten Situationen hilfreich sein, z. B. wenn in einem anderen Fenster ein langwieriger Prozess ausgeführt wird, der Sie gelegentlich zur Eingabe auffordert dialog. In diesem Fall ändert sich der Fenstername in "dialog", sodass Sie wissen, dass Sie zu diesem Fenster wechseln und etwas tun müssen.
  • Schöneres Session Handling (IMHO). Sie können mit Sitzungen in tmuxsich viel mehr tun . Sie können einfach wechseln, umbenennen usw. und Fenster zwischen Sitzungen verschieben und freigeben. Es gibt auch ein anderes Modell, bei dem jeder Benutzer einen Server hat, der seine Sitzungen steuert und mit dem der Client eine Verbindung herstellt. Der Nachteil dabei ist, dass Sie alles verlieren, wenn der Server abstürzt. Ich hatte jedoch noch nie einen Serverabsturz.
  • tmuxscheint aktiver entwickelt zu sein. Es gibt ziemlich häufig Updates, und Sie können einen Fehlerbericht oder eine Funktionsanforderung gemäß dieser FAQ einreichen und innerhalb weniger Tage eine Antwort erhalten.

Das sind nur die wichtigsten Dinge, die einem sofort in den Sinn kommen. Es gibt noch andere kleine Dinge, und ich bin sicher, ich vergesse einige Dinge. Es lohnt sich aber auf jeden Fall, es zu tmuxversuchen.

qmega
quelle
151
Die tmux-Entwicklung ist aktiver, weil sie neu ist . GNU Screen ist fast 25 Jahre alt , daher haben sie die meisten Fehler behoben.
ein bezahlter Nerd
8
Der Kommentar eines bezahlten Nerds ist eine sehr wichtige Qualifikation Ihres letzten Punktes. Und der zweite Punkt ist, wie gesagt, kein wirklicher Unterschied, da er auch für den Bildschirm gilt, es sei denn, Sie können genauer sein.
jw013
11
@apaidnerd das ist eine sehr reiche Aussage: savannah.gnu.org/bugs/...
Błażej Michalik
93

( Sessions sind Sammlungen von Fenstern , die später abgenommen und wieder angebracht werden können. Windows - eine oder mehr enthalten Scheiben . Zum Beispiel configs Besuche hier und hier .)

tmux

  • Vorteile
    • Kann Schlüssel an andere Bereiche senden, ähnlich einer IDE
    • Einfache Tastenkombinationen - mit der richtigen Konfiguration fühlen Sie sich von Vim oder Screen aus wie zu Hause
    • Vim-ish und Emacs-ish Bindungen eingebaut
    • Gutes Layout-Management, ähnlich einem Kachelfenster-Manager
    • Unicode scheint nur mit modernen Terminals zu funktionieren
    • Einige Terminalprobleme wurden mit behoben TERM=tmux
  • Nachteile
    • Langsam - unsicher warum, aber Tastatureingaben scheinen verzögert Keine Probleme mehr mit der Langsamkeit
    • Durch Multiplexing wird die gesamte Sitzungsbreite und -höhe an das kleinste angeschlossene Terminal übertragen
    • Ist unter Mac OS X mehrmals abgestürzt und hat die gesamte Sitzung verloren
    • Unter Linux ist nach dem Upgrade ein Fehler aufgetreten, da ich die Verbindung zu meiner alten Sitzung nicht wiederherstellen konnte
    • Fehlt gelegentlich bei den Befehlstasten - ^A ^[für den Kopiermodus sind einige Versuche erforderlich
    • Ein Fenster kann nicht von einem Fenster in ein anderes verschoben werden. Behoben mit dem join-paneBefehl
    • Kein Zeilenumbruch (oder "Reflow" oder "Rewrap") nach Änderung der Terminalbreite (Größenänderung des Fensters)

GNU-Bildschirm

  • Vorteile
    • Extrem stabil (v1.0 war 1987)
    • Einige Terminalprobleme wurden mit behoben TERM=screen
    • Emacs-ish Bindungen eingebaut
    • Einfache Bewegung und Steuerung horizontaler Scheiben
    • Beim Multiplexen kann jedes angeschlossene Terminal die Größe eines Fensters ändern
  • Nachteile
    • Keine vertikalen Teilungen ohne Patch (außer unter Ubuntu)
    • Beim Abnehmen gehen Scheibensplits verloren
    • Um Unicode zum Laufen zu bringen, ist ein wenig Fingerspitzengefühl und Entschlossenheit erforderlich
    • Verrückte Konfiguration der Statuszeile
ein bezahlter Nerd
quelle
Sind die verzögerten Tastenanschläge nur beim Drücken von Esc? tmux hat eine Verzögerung, bei der darauf gewartet wird, ob Sie eine xterm-Sequenz oder nur einen einzigen Esc eingeben. Stellen Sie die Escape-Zeit auf einen niedrigeren Wert wie 50 ein.
Eevee,
Es ist auch lustig, dass du sagst, ^A ^[dass es manchmal nicht funktioniert. Ich habe das gleiche Problem mit dem Bildschirm, aber nie tmux! Und ich glaube, Sie können mit Scheiben bewegen join-pane.
Eevee,
Ich finde, dass der Bildschirm viel mehr Speicherplatz belegt, was als Nachteil angesehen werden könnte.
Paradroid
6
Naja, tmuxverdammt vim, in einigen Fällen (in meinen Fällen) hat keine Lösung funktioniert, die jemals veröffentlicht wurde, und selbst Leute, die einige Zeit damit verbracht haben, das Problem von mir zu lösen, waren nicht in der Lage, dies zu tun. Es ist ärgerlich, wenn Sie nicht <C-Left>und <C-Right>in verwenden können vim.
yo
3
No vertical splits without patch (except on Ubuntu)Das halte ich nicht für richtig. Ich benutze den Bildschirm seit ein paar Jahren und hatte unter Debian und Fedora keine Probleme, die sich horizontal oder vertikal aufteilten. Sogar auf Android mit Termux funktioniert es wie ein Zauber.
Forivin
11

Ein Pro für den Bildschirm: Es ist praktisch sofort unter Linux und Solaris verfügbar. Wenn Sie zwischen Plattformen hin und her wechseln müssen, ist es schön, dass der mentale Kontext nicht wechselt.

Ich bin mir sicher, dass Sie tmux auf jeder Plattform kompilieren können, aber manchmal haben Sie gerade genug Zugriff, um den Bildschirm zu nutzen, aber die eigentlichen Systemadministratoren möchten eigentlich keine Software hinzufügen, die nicht unbedingt erforderlich ist.

Justin
quelle
10

Ich benutze tmux jetzt seit ungefähr 2 Tagen, daher wurde meine ungezügelte Begeisterung dafür noch nicht dadurch gemildert, dass ich ärgerliche Anwendungsfälle traf. Während ich die üblichen Schwierigkeiten beim Übergang von einem Programm zu einem anderen durchlebte, fielen mir mehrere positive Merkmale auf, aber das Merkmal, von dem ich glaube, dass ich nie wieder zum Bildschirm zurückkehren werde, ist die Nützlichkeit des Kopier- und Einfügemodus. Auf dem Bildschirm können Sie nicht in den Kopiermodus wechseln, im Puffer zurückblättern und dann zu einem anderen Fenster wechseln. In tmux können Sie mehrere Fenster gleichzeitig im Kopiermodus haben, wobei der Puffer an verschiedene Positionen zurückgescrollt wird. Es gibt auch mehrere Kopierpuffer. Und Sie müssen die Quelle nicht patchen, um die FFT-Cursorbewegung zu erhalten.

William Pursell
quelle
8

Die Dinge, die ich mit tmux nicht so einfach auf dem Bildschirm bekomme, sind:

  1. Vertikale Scheibenteilung
  2. Multiplexing, das wir für Remote- und Local-Pairing verwenden.
Jed Schneider
quelle
Wie in den vorherigen Beiträgen erwähnt, hat der Bildschirm vertikale Teilfenster (anscheinend ist ein Patch ohne Ubuntu erforderlich). Auch Multiplexing funktioniert einwandfrei und hat sich über viele Jahre bewährt.
EntangledLoops
Vertikale Splits sind screenseit 4.2 in der Hauptversion und wurden 2014 veröffentlicht. Viele Distributionen , insbesondere Apple, werden mit sehr alten Versionen ausgeliefert.
Neal Fultz
2
Beide Punkte sind falsch.
Forivin
2
Die Antwort ist in 2018 nicht korrekt
Alec Istomin
5

Ich habe ersetzt GNU - Bildschirm mit tmux in jedem Anwendungsfall mit einer Ausnahme-wenn ich ein brauche Hyper - Terminal entspricht serielle Ports zu verbinden. Wie Aaron Toponce in seinem Artikel " Herstellen einer Verbindung zu seriellen Nullmodems mit GNU-Bildschirm" feststellte, heißt es in der tmux-FAQ :

Bildschirm hat eingebaute serielle und Telnet-Unterstützung; dies ist aufgedunsen und es ist unwahrscheinlich, dass es zu tmux hinzugefügt wird.

Mein typischer Anwendungsfall für tmux ist das Erstellen von Entwicklungssitzungen mit mehreren Fenstern und mehreren Fenstern in Kombination mit tmuxinator . Wenn Sie tmux lernen möchten , empfehle ich, das Buch von Brian P. Hogan, tmux: Productive Mouse-Free Development , zu erwerben .

Matthew Rankin
quelle
Kennst du cu ein anderes System aufrufen? Einfachere Seriennummer als der Bildschirm , aber leicht und nützlich!
F. Hauri
2

Ich war lange Zeit ein starker Benutzer von Screen, verwende jedoch eine Version, die ich bereits 2002 geändert habe. Hauptsächlich, weil ich wollte, dass das Fenster "next / prev" (Nächste / Vorherige) mit der Reihenfolge übereinstimmt, in der es neu ist Fenster wurden erstellt, ähnlich wie bei einem Kachelfenster-Manager wie i3 oder Ion . Das Standardverhalten des Bildschirms ist, dass 'next' und 'prev' nach Fensternummer angezeigt werden, sodass sich normalerweise ein 'neues' Fenster (das die kleinste verfügbare Nummer aufnimmt) an einer anderen Stelle befindet als das 'next' Fenster - verwirrend, wenn Sie keine ' Ich erinnere mich nicht an die Zahlen. Mein bevorzugtes Verhalten wurde seitdem in Tmux als Flag für den Befehl new-window im Jahr 2010 und die Option renumber -windows im Jahr 2012 implementiert. Mein Screen-Patch, den ich so akzeptabel wie möglich zu gestalten versuchte, einschließlich der Hinzufügung von Dokumentation usw., löste im Juli 2002 keine Diskussion auf der Screen-Liste aus (dann "[email protected]") Archive suchen). Tatsächlich wurde es nicht einmal zur Kenntnis genommen, selbst als ich es ein Jahr später erneut sandte.

Seit 2002 habe ich meinen Patch ein paarmal "umbasiert", um ihn auf neuere Versionen von Screen anzuwenden. Als ich jedoch zu Version 4.3 (2015) kam, bemerkte ich eine undokumentierte Änderung, die einen meiner Verwendungszwecke des Bildschirms unterbrach - nämlich, dass "Zeug" jetzt Umgebungsvariablen interpoliert . Ich brauchte diese Funktion nicht und konnte nicht herausfinden, wie ich mich dem Argument „stopfen“ (damit ich Text mit Dollarzeichen senden konnte) leicht entziehen konnte. Deshalb verwendete ich weiterhin Version 4.0 (ab 2004).

Ich verwende Screen's 'stuff' ('send-keys' in Tmux) in einer Emacs-Funktion, die den Inhalt der aktuellen Emacs-Region an eine bestimmte Fensternummer sendet. Wenn ich Code in einer Skriptsprache schreibe, öffne ich einen Interpreter, gebe dem Interpreterfenster eine spezielle Nummer und kann dann mit dieser Emacs-Bindung Codezeilen aus meinem Editorfenster direkt an das Interpreterfenster senden. Es ist hackig, aber ich mag es besser als die reine Emacs-Lösung , da ich auch mit dem Interpreter in seinem Bildschirmfenster über Standardtasten interagieren kann. Es ist ein bisschen wie eine GUI-IDE, aber ich muss weder die Maus benutzen noch auf einen blinkenden Cursor starren.

Ein weiteres Feature, das ich in meinem Patch implementiert habe, ist die Möglichkeit, ein Fenster "zu markieren" und das markierte Fenster dann so zu positionieren, dass es nach dem aktuellen "als nächstes" angezeigt wird. Für mich ist dies eine viel natürlichere Art, Fenster neu zu ordnen, als sie neu zu nummerieren. Es ist wie das Kopieren / Einfügen-Paradigma oder "Drag-and-Drop". (Ich habe kürzlich herausgefunden, wie das auch in i3 geht .)

Dasselbe sollte in Tmux möglich sein, zum Beispiel gibt es ab 2015 eine Möglichkeit, eine Scheibe zu "markieren". Oder vielleicht könnte eine elementarere Lösung mit Stateful-Shell-Skripten erarbeitet werden. Ich habe ein kurzes Skript und Tastenkombinationen implementiert, um die Methode "markierter Bereich" auszuprobieren, und es hat ein paar Mal funktioniert, aber dann ist Tmux mit "[lost server]" abgestürzt. Dann fand ich, dass Tmux abstürzte, ohne dass ich etwas Kompliziertes tun musste. Anscheinend ist es für einige Benutzer seit mindestens ein paar Jahren abgestürzt . Manchmal stürzt der Server ab, manchmal nutzt er 100% der CPU und reagiert nicht mehr. Ich habe noch nie gesehen, dass Screen eines von beiden macht.

Theoretisch ist Tmux Screen in mehrfacher Hinsicht überlegen. Die Skriptfähigkeit ist viel besser, dh Sie können beispielsweise die Liste der Fenster in der aktuellen Sitzung über die Befehlszeile abfragen, was mit Screen nicht möglich ist. Beispielsweise hat Screen im Jahr 2015 den Befehl "Fenster nach Titel sortieren" hinzugefügt . Ich bin mir nicht sicher, wann solch ein spezialisierter Befehl nützlich sein würde, aber diese und praktischere Variationen (z. B. Sortieren von Fenstern nach CPU-Auslastung) können relativ einfach über ein Shell-Skript in Tmux ausgeführt werden. Mir scheint es schwierig, etwas so Kreatives in Screen zu machen, zumindest ohne den C-Code zu verändern.

Wie bereits erwähnt, hat Tmux ein Einzelservermodell, das ich als Hauptnachteil betrachte, insbesondere wenn der Server abstürzt. Sie können dies umgehen, indem Sie für jede "Sitzung" einen eigenen Socket angeben. Trotzdem bevorzuge ich die Standardeinstellung von Screen für einen Server pro Sitzung, die etwas eleganter zu sein scheint.

Die Arbeit mit dem Screen-Code im Jahr 2002 war lehrreich und hat mir Spaß gemacht. Seltsamerweise hat Tmux trotz all seiner zusätzlichen Funktionen etwa 25% weniger Codezeilen als Screen (30k vs. 40k). Mir ist aufgefallen, dass Tmux viele Baum- und Listendatenstrukturen verwendet, die für mich etwas schwierig zu verstehen waren. Screen schien Arrays zu bevorzugen.

Soweit ich weiß, muss der Screen- oder Tmux-Code aufgrund der Stabilität der Unix-Terminalschnittstelle nur wenig an Änderungen des zugrunde liegenden Betriebssystems angepasst werden. Diese Programme verfügen nicht wirklich über Sicherheitsupdates wie Webbrowser oder Webserver oder sogar die Shell. Ich habe keine Probleme beim Ausführen meiner benutzerdefinierten Version von Screen bemerkt, die zuletzt im Jahr 2004 aktualisiert wurde (außer, dass einige Konfigurationsdateien hinzugefügt werden müssen, um zu verhindern, dass Systemd den Socket löscht; Diese Dateien sind in der Regel ohnehin Bestandteil des Distributionspakets. Vielleicht könnte ich die Probleme, auf die ich in Tmux gestoßen bin, einfach umgehen, indem ich eine Tmux-Version ausführte, bevor sie abstürzte. Wenn genügend Benutzer dies tun, ist dies natürlich nicht sehr gut für neue Benutzer, da weniger Experten in den neuesten offiziellen Versionen dieser Programme nach Fehlern suchen. Es ist jedoch schwierig, mich zu motivieren, auf ein Produkt umzusteigen, das für mich instabil ist (aktuelles Tmux) oder dem bestimmte Funktionen fehlen (Standard-Bildschirm).

Ich weiß, dass dies keine einfache Antwort auf die Frage des OP ist, aber ich hoffe, dass meine Perspektive nützlich war.

Metamorph
quelle
2

Einer der Maintainer von tmux, Thomas Adam, wird auch aufgeführt als Betreuer für das screenProjekt , obwohl er tmux Code nur berührt. Dies ist ein großer Vorteil von tmux over screen.

Ninrod
quelle
1

Ich würde sagen, dass die Verfügbarkeit des Bildschirms von seiner Stärke , aber das Fenstersystem ist nicht so einfach zu handhaben wie das von . Ich muss sagen, dass ich derzeit die meiste Zeit benutze und daher viele Terminal-Registerkarten anstelle von Bildschirmfenstern habe.

@Jed Schneider: Sie können vertikale Scheibenteile mit Ctrl+ Aund dann |(vertikale Leiste) erhalten.

TafT
quelle