tmux vs écran

263

Je suis sur le point de revenir à l’utilisation de GNU Screen , mais j’entends de temps à autre parler de tmux comme une meilleure alternative. Offre-t-il vraiment une alternative à toutes les fonctionnalités offertes par Screen , telles que la surveillance de l'activité dans différentes fenêtres, etc.? Quels sont les avantages et les inconvénients de chacun?

Alison R.
la source
2
Dans l'écran, vous pouvez envoyer des commandes à une session attachée via screen -S automate_me -X stuff 'command'$(echo -ne '\015')vous ne pouvez pas dans tmux. Très utile si vous testez une image ISO / virtualbox et que vous devez exécuter certaines commandes à distance rapidement. Par exemple, je l'ai dans une commande Vim pour déboguer rapidement des scripts dans un écran Virtualbox. Dans les versions précédentes de tmux, je trouvais que l'écran traitait plus de texte qui passait rapidement alors que tmux se bloquait. De plus, screen ne nécessite aucune configuration pour gérer UTF-8, etc., ce que fait tmux.
dezza
Est-ce que tmuxgérer historycorrectement?
beroe

Réponses:

170

Certaines des raisons (grandes) que je préfère tmuxsur screen:

  • La barre d'état est beaucoup plus facile à utiliser. Vous pouvez facilement configurer différents textes / styles pour la fenêtre actuelle, les fenêtres actives, etc., et vous pouvez placer des éléments à gauche et à droite de la barre d'état, y compris des commandes shell pouvant être exécutées à un intervalle spécifié (15s par défaut).
  • Presque toutes les commandes que vous pouvez exécuter tmuxpeuvent être exécutées à partir d'un shell tmux command [args]. Cela le rend très facilement scriptable, et facilite également l'exécution de commandes complexes.
  • Renommage de fenêtre automatique beaucoup plus précis. While screendéfinit le titre en fonction du premier mot de la commande et requiert une configuration de shell pour pouvoir le faire même dans une fenêtre de shell, tmuxconserve une trace des processus en cours d'exécution dans chaque fenêtre et met à jour le titre en conséquence. De cette façon, vous obtenez un renommage dynamique avec n'importe quel shell et aucune configuration. Par exemple: Disons que vous utilisez Z Shell; le nom de la fenêtre serait "zsh". Maintenant, supposons que vous vouliez éditer un fichier de configuration, donc vous tapez sudo emacs /etc/somefile. Alors que demande sudo votre mot de passe, sera « sudo », mais une fois que vous avez fait le nom de la fenêtre et le sudolancement emacs, le titre sera « emacs ». Lorsque vous avez terminé et que vous quittezemacs, le titre redeviendra "zsh". C'est très utile pour garder une trace des fenêtres, et cela peut aussi être particulièrement utile dans des situations spécifiques, comme si vous avez un processus de longue durée dans une autre fenêtre qui vous invite occasionnellement à entrer dialog; le nom de la fenêtre se changerait en "dialogue" lorsque cela se produirait, vous saurez ainsi que vous devez basculer vers cette fenêtre et faire quelque chose.
  • Meilleure gestion de session (IMHO). Vous pouvez faire beaucoup plus avec des sessions en tmuxlui-même. Vous pouvez facilement changer, renommer, etc. et vous pouvez déplacer et partager des fenêtres entre les sessions. Il a également un modèle différent, où chaque utilisateur a un serveur qui contrôle ses sessions et auquel le client se connecte. L'inconvénient est que si le serveur tombe en panne, vous perdez tout. Je n'ai jamais eu le crash du serveur sur moi, cependant.
  • tmuxsemble être plus activement développé. Il existe assez fréquemment des mises à jour, et vous pouvez déposer un rapport de bogue ou une demande de fonctionnalité conformément à cette FAQ et obtenir une réponse dans quelques jours.

Ce ne sont que les principales choses qui viennent immédiatement à l’esprit. Il y a aussi d'autres petites choses et je suis sûr d'oublier certaines choses. Cela vaut vraiment la peine d' tmuxessayer, cependant.

qmega
la source
151
Le développement de tmux est plus actif car il est nouveau . GNU Screen a presque 25 ans , ils ont donc corrigé la plupart des bugs.
Un nerd payé
8
Un commentaire de nerd payé est une qualification très importante de votre dernier point. Et le deuxième point, comme indiqué, n’est pas vraiment une différence car il s’applique également à l’écran, à moins que vous ne puissiez être plus précis.
jw013
11
@apaidnerd c'est une déclaration très riche: savannah.gnu.org/bugs/…
Błażej Michalik
93

(Les sessions sont des ensembles de fenêtres pouvant être détachées et rattachées ultérieurement. Windows peut contenir un ou plusieurs volets . Pour des exemples de configuration, consultez ici et ici .)

tmux

  • Avantages
    • Peut envoyer des clés à d'autres volets, un peu comme un IDE
    • Reliure facile - avec la bonne configuration, vous vous sentirez comme à la maison avec Vim ou Screen
    • Liaisons Vim-ish et Emacs-ish intégrées
    • Bonne gestion de la disposition, un peu comme un gestionnaire de fenêtres en mosaïque
    • Unicode semble juste travailler avec les terminaux modernes
    • Quelques problèmes de terminal résolus avec TERM=tmux
  • Les inconvénients
    • Lentement - vous ne savez pas pourquoi, mais les frappes semblent lentes Plus de problèmes de lenteur
    • Le multiplexage force toute la largeur et la hauteur de la session sur le plus petit terminal connecté
    • A planté plusieurs fois sur Mac OS X, perdant toute la session
    • A échoué sous Linux après la mise à niveau, je ne pouvais pas me reconnecter à mon ancienne session
    • Manque parfois des frappes au clavier - ^A ^[prend quelques tentatives pour le mode copie
    • Impossible de déplacer un volet d'une fenêtre à une autre Fixé avec la join-panecommande
    • Pas de déroulement de ligne (ou "refusion" ou "rewrap") après le changement de largeur du terminal (redimensionnement de la fenêtre)

Écran GNU

  • Avantages
    • Extrêmement stable (v1.0 était en 1987)
    • Quelques problèmes de terminal résolus avec TERM=screen
    • Liaisons Emacs-ish intégrées
    • Facile à déplacer et à contrôler les vitres horizontales
    • Lors du multiplexage, tout terminal connecté peut redimensionner un volet
  • Les inconvénients
    • Pas de division verticale sans patch (sauf sur Ubuntu)
    • Les divisions du volet sont perdues lors du détachement
    • Faire fonctionner Unicode prend un peu de finesse et de détermination
    • Configuration de ligne d'état folle
un nerd payé
la source
Les frappes au clavier sont-elles seulement lorsque vous appuyez sur Echap? tmux a un délai pendant lequel il attend de voir si vous entrez dans une séquence xterm ou juste un Esc isolé, et combiné avec vim, cela peut sembler plutôt lent. Définissez le temps d’échappement sur une valeur inférieure, par exemple 50.
Eevee
C'est aussi drôle que tu dis que ^A ^[ça ne marche pas parfois; J'ai le même problème avec screen, mais jamais tmux! Et je crois que vous pouvez déplacer les vitres avec join-pane.
Eevee
Je trouve que l'écran utilise beaucoup plus de mémoire, ce qui pourrait être un inconvénient.
Paradroid
6
Eh bien, tmuxça craint avec vim, dans certains cas (le mien notamment), aucune solution n’a jamais été postée où que ce soit, et même les personnes qui passent du temps à résoudre leur problème n’ont pas été en mesure de le faire. C'est agaçant quand vous ne pouvez pas utiliser <C-Left>et <C-Right>dans vim.
Yo '19
3
No vertical splits without patch (except on Ubuntu)Je ne pense pas que ce soit vrai. J'utilise screen depuis quelques années maintenant et je n'ai jamais eu de problèmes de scission horizontale ou verticale sur Debian et Fedora. Même sur Android avec Termux, cela fonctionne comme un charme.
Forivin
12

Un pro pour screen: il est disponible quasiment prêt à l'emploi sous Linux et Solaris. Lorsque vous devez basculer d'une plate-forme à l'autre, il est bon de ne pas changer de contexte mental.

Je suis sûr que vous pouvez obtenir tmux compilé sur n’importe quelle plate-forme, mais vous disposez parfois d’un accès suffisant pour utiliser screen, mais les administrateurs système ne souhaitent vraiment pas ajouter de logiciel qui n’est pas absolument nécessaire.

Justin
la source
10

J'utilise tmux depuis environ 2 jours maintenant, mon enthousiasme débridé pour celui-ci n'a pas encore été tempéré par des cas d'utilisation ennuyeux. Alors que je passais par les difficultés de croissance habituelles liées à la transition d’un programme à l’autre, j’ai été frappé par plusieurs caractéristiques positives, mais la caractéristique qui me fait croire que je ne reviendrai jamais à l’écran est l’utilité du mode copier-coller. À l'écran, vous ne pouvez pas entrer en mode copie, revenir en arrière dans la mémoire tampon, puis passer à une autre fenêtre. Dans tmux, vous pouvez avoir plusieurs fenêtres simultanément en mode copie avec la mémoire tampon défilée à différentes positions. En outre, il existe plusieurs tampons de copie. Et vous n'avez pas besoin de patcher la source pour obtenir le mouvement du curseur fFtT.

William Pursell
la source
8

Les choses que je tire de tmux ne me parviennent pas facilement à l'écran:

  1. faire des scissions verticales
  2. le multiplexage, que nous utilisons pour l'appariement local et à distance.
Jed Schneider
la source
7
Screen-xacladd
poolie
Comme mentionné dans l'article précédent, l'écran est divisé en volets verticaux (nécessite un patch sans Ubuntu, apparemment). En outre, le multiplexage fonctionne bien et dure depuis de nombreuses années.
EntangledLoops
les fractionnements verticaux sont dans la ligne principale screendepuis la version 4.2, publiée en 2014. De nombreuses distributions proposent des versions très anciennes, notamment Apple.
Neal Fultz
2
Les deux points sont incorrects.
Forivin le
2
La réponse est incorrecte en 2018
Alec Istomin
5

J'ai remplacé GNU Screen par tmux dans tous les cas d'utilisation, sauf un - lorsque j'ai besoin d'un équivalent HyperTerminal pour me connecter à des ports série. Comme Aaron Toponce l’a noté dans son article "Connexion à des modems nuls en série avec GNU Screen" , la FAQ de tmux indique:

screen possède un support série et telnet intégré; c'est énorme et il est peu probable qu'il soit ajouté à tmux.

Mon exemple typique d' utilisation de tmux est de créer des sessions de développement multi-volets et multi-fenêtres en combinaison avec tmuxinator . Si vous voulez apprendre tmux , je vous recommande de vous procurer le livre de Brian P. Hogan, tmux: développement productif sans souris .

Matthew Rankin
la source
Savez-vous cu appeler un autre système ? Un terminal plus simple que l’ écran , mais léger et utile!
F. Hauri
2

Cela fait longtemps que je suis un grand utilisateur de Screen, mais j’utilise une version que j’ai modifiée en 2002. Principalement parce que je voulais pouvoir faire en sorte que la fenêtre "suivant / précédent" trie les commandes de navigation dans l’ordre dans lequel les nouvelles Des fenêtres ont été créées, semblables à un gestionnaire de fenêtres en mosaïque comme i3 ou Ion . Le comportement standard de l'écran est que 'next' et 'prev' passent par le numéro de la fenêtre. Ainsi, une 'nouvelle' fenêtre (capturant le plus petit numéro disponible) sera située ailleurs que dans la 'fenêtre suivante' - ce qui déroutera si vous ne le faites pas. Ne me souviens pas des chiffres. Mon comportement préféré a depuis été implémenté dans Tmux en tant qu'indicateur de la commande new-window en 2010 et de l' option renumber-windows en 2012.. Le correctif My Screen, que j’essayais de rendre aussi acceptable que possible, y compris les ajouts de documentation, etc., n’a généré aucune discussion sur la liste Screen en juillet 2002 (alors "[email protected]", trouver des archives). En fait, cela n'a même pas été reconnu, même lorsque je l'ai renvoyé un an plus tard.

Depuis 2002, j'ai "rebasé" mon correctif à quelques reprises pour l'appliquer aux nouvelles versions de Screen. Cependant, quand je suis arrivé à la version 4.3 (2015), j'ai remarqué un changement non documenté qui a cassé l'une de mes utilisations d'écran - à savoir que le «matériel» interpole maintenant les variables d'environnement . Je n'avais pas besoin de cette fonctionnalité et je n'arrivais pas à comprendre comment échapper facilement à l'argument «trucs» (pour pouvoir envoyer du texte contenant des signes dollar). J'ai donc continué à utiliser la version 4.0 (à partir de 2004).

J'utilise le "matériel" de Screen ("send-keys" dans Tmux) dans une fonction Emacs qui envoie le contenu de la région Emacs actuelle à un numéro de fenêtre spécifique. Ainsi, lorsque j'écris du code dans un langage de script, j'ouvre un interpréteur, je donne un numéro spécial à la fenêtre interpréteur, puis je peux envoyer des lignes de code de ma fenêtre d'édition directement à la fenêtre interpréteur à l'aide de cette liaison Emacs. C'est hacky, mais je l'aime mieux que la solution pure-Emacs , car je peux aussi interagir avec l'interprète dans sa fenêtre Screen en utilisant des frappes au clavier standard. C'est un peu comme une interface graphique, mais je n'ai pas besoin d'utiliser la souris ni de regarder fixement un curseur clignotant.

Une autre fonctionnalité implémentée dans mon patch est la possibilité de "marquer" une fenêtre, puis de repositionner la fenêtre marquée pour qu'elle soit "suivante" après la fenêtre actuelle. Pour moi, il s'agit d'un moyen beaucoup plus naturel de réorganiser les fenêtres que de renuméroter; c'est comme le paradigme copier / coller, ou "glisser-déposer". (J'ai récemment compris comment faire cela dans i3 également.)

Il devrait être possible de faire la même chose dans Tmux. Par exemple, à partir de 2015, il est possible de "marquer" un volet. Ou peut-être qu'une solution plus élémentaire pourrait être élaborée avec des scripts shell à états. J'ai implémenté un court script et des raccourcis clavier pour essayer la méthode "volet marqué", et cela a fonctionné à quelques reprises, mais Tmux s'est écrasé avec "[serveur perdu]". Ensuite, j'ai trouvé Tmux en panne, même sans que j'essaye de faire quelque chose de compliqué. Apparemment , il a été plantait pour certains utilisateurs pour quelques années au moins . Parfois, le serveur tombe en panne, parfois, il commence à utiliser 100% de la CPU et ne répond plus. Je n'ai jamais vu Screen faire l'un ou l'autre.

En théorie, Tmux est supérieur à Screen à plusieurs égards. La scriptabilité est bien meilleure, ce qui signifie que vous pouvez faire des choses comme interroger la liste des fenêtres de la session en cours à partir de la ligne de commande, ce qui est impossible avec Screen. Par exemple, en 2015, Screen a ajouté une commande permettant de "trier les fenêtres par titre" . Je ne sais pas quand une commande aussi spécialisée serait utile, mais cette variante, plus pratique (par exemple, le tri des fenêtres en fonction de l'utilisation du processeur) pourrait être réalisée assez facilement à partir d'un script shell dans Tmux. Il me semble difficile de faire quelque chose d'aussi créatif dans Screen, du moins sans modifier le code C.

Comme d'autres affiches l'ont mentionné, Tmux a un modèle à serveur unique que je considère comme le principal inconvénient, en particulier lorsque le serveur tombe en panne. Il est possible de contourner ce problème en spécifiant un socket distinct pour chaque "session". Je préfère tout de même le paramètre par défaut d’un serveur par session de Screen, qui semble légèrement plus élégant.

Travailler avec le code Screen, en 2002, était pour moi une expérience éducative et agréable. Curieusement, pour toutes ses fonctionnalités supplémentaires, Tmux a environ 25% de lignes de code en moins que Screen (30k vs 40k). J'ai remarqué que Tmux utilise de nombreuses structures de données arborescentes et listées, difficiles à comprendre pour moi. L'écran semblait préférer les tableaux.

Si j'ai bien compris, l'interface de terminal Unix étant très stable, il est inutile que le code Screen ou Tmux s'adapte aux modifications du système d'exploitation sous-jacent. Ces programmes ne disposent pas vraiment de mises à jour de sécurité telles que les navigateurs Web, les serveurs Web ou même le shell. Je n'ai pas remarqué de problèmes pour exécuter ma version personnalisée de Screen, mise à jour pour la dernière fois en 2004 (excepté la nécessité d'ajouter des fichiers de configuration pour empêcher Systemd de supprimer le socket.); ces fichiers font généralement partie du paquet de distribution). Peut-être que je pourrais simplement contourner les problèmes que j'ai rencontrés dans Tmux en exécutant une version de Tmux antérieure à son crash. Bien sûr, si suffisamment d'utilisateurs le font, cela ne sera pas très utile pour les nouveaux utilisateurs, car cela signifie que moins d'experts rechercheront des bogues dans les dernières versions officielles de ces programmes. Cependant, il est difficile de me motiver pour passer à un produit qui est instable pour moi (dernier Tmux) ou qui manque de certaines fonctionnalités que je souhaite (écran standard).

Je sais que cela ne fournit pas une réponse facile à la question du PO, mais j'espère que mon point de vue a été utile.

Métamorphique
la source
2

L'un des responsables de tmux, Thomas Adam, est également répertorié en tant que responsable du screenprojet bien qu'il ne touche que le code tmux. C'est un énorme avantage de tmux sur écran.

Ninrod
la source
1

Je dirais que la disponibilité de cet écran est sa force, mais son système de fenêtrage n’est pas aussi facile à gérer que celui de . Je dois dire que j'utilise la plupart du temps et que, par conséquent, j'ai beaucoup d'onglets terminaux au lieu de fenêtres Screen.

@Jed Schneider: Vous pouvez obtenir des divisions de volet vertical avec Ctrl+ Aet ensuite |(barre verticale).

TafT
la source