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?
gnu-screen
tmux
Alison R.
quelle
quelle
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.tmux
Griffhistory
richtig?Antworten:
Einige der (großen) Gründe , warum ich es vorziehen ,
tmux
überscreen
:tmux
können, kann von einer Shell mit ausgeführt werdentmux command [args]
. Dies macht es sehr einfach, Skripte zu erstellen und komplexe Befehle auszuführen.screen
der Titel auf der Grundlage des ersten Wortes des Befehls festgelegt wird und die Shell-Konfiguration dies auch in einem Shell-Fenster erfordert, wirdtmux
verfolgt, 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 einsudo emacs /etc/somefile
. Während sudo nach Ihrem Passwort fragt, lautet der Name des Fensters "sudo". Sobald Sie dies getan undsudo
gestartet habenemacs
, lautet der Titel "emacs". Wenn Sie alle fertig sind und Sie verlassenemacs
wird 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 auffordertdialog
. In diesem Fall ändert sich der Fenstername in "dialog", sodass Sie wissen, dass Sie zu diesem Fenster wechseln und etwas tun müssen.tmux
sich 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.tmux
scheint 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
tmux
versuchen.quelle
( 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
TERM=tmux
Langsam - unsicher warum, aber Tastatureingaben scheinen verzögertKeine Probleme mehr mit der LangsamkeitEin Fenster kann nicht von einem Fenster in ein anderes verschoben werden.Behoben mit demjoin-pane
BefehlGNU-Bildschirm
TERM=screen
quelle
^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 bewegenjoin-pane
.tmux
verdammtvim
, 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önnenvim
.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.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.
quelle
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.
quelle
Die Dinge, die ich mit tmux nicht so einfach auf dem Bildschirm bekomme, sind:
quelle
-x
Option undacladd
?screen
seit 4.2 in der Hauptversion und wurden 2014 veröffentlicht. Viele Distributionen , insbesondere Apple, werden mit sehr alten Versionen ausgeliefert.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 :
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 .
quelle
cu
ein anderes System aufrufen? Einfachere Seriennummer als der Bildschirm , aber leicht und nützlich!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.
quelle
Einer der Maintainer von tmux, Thomas Adam, wird auch aufgeführt als Betreuer für das
screen
Projekt , obwohl er tmux Code nur berührt. Dies ist ein großer Vorteil von tmux over screen.quelle
Ich würde sagen, dass die Verfügbarkeit des Bildschirms von seiner Stärke abhängt , aber das Fenstersystem ist nicht so einfach zu handhaben wie das von tmux . Ich muss sagen, dass ich derzeit die meiste Zeit Gnu-Bildschirm benutze und daher viele Terminal-Registerkarten anstelle von Bildschirmfenstern habe.
@Jed Schneider: Sie können vertikale Scheibenteile mit Ctrl+ Aund dann |(vertikale Leiste) erhalten.
quelle