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

tmux vs. pantalla

Estoy a punto de volver a usar GNU Screen , pero he estado oyendo a la gente mencionar ocasionalmente tmux como una alternativa mejor. ¿Ofrece realmente una alternativa a todas las características que ofrece Screen , como la monitorización de la actividad en diferentes ventanas, etc.? ¿Cuáles son los pros y los contras de cada uno?

Respuestas (9)

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

Algunas de las razones (principales) por las que prefiero tmux sobre screen:

  • La barra de estado es mucho más fácil de usar. Puedes configurar fácilmente diferentes textos/estilos para la ventana actual, ventanas con actividad, etc. y puedes poner cosas a la izquierda y a la derecha de la barra de estado, incluyendo comandos del shell que pueden ser ejecutados en un intervalo especificado (por defecto 15s).
  • Casi cualquier comando que puedas ejecutar dentro de tmux puede ser ejecutado desde un shell con tmux command [args]. Esto hace que sea muy fácil hacer scripts, así como facilitar la ejecución de comandos complejos.
  • Renombramiento automático de ventanas mucho más preciso. Mientras que screen establece el título basándose en la primera palabra del comando, y requiere la configuración del shell para hacer incluso eso en una ventana del shell, tmux hace un seguimiento de qué procesos se están ejecutando realmente en cada ventana, y actualiza el título en consecuencia. De esta manera se obtiene un renombramiento dinámico con cualquier shell y cero configuración. Por ejemplo: Digamos que estás ejecutando Z Shell; el nombre de la ventana sería “zsh”. Ahora digamos que quieres editar algún archivo de configuración, así que escribes sudo emacs /etc/somefile. Mientras sudo te pide la contraseña, el nombre de la ventana será “sudo”, pero una vez que hayas hecho eso y sudo lance emacs, el título será “emacs”. Cuando hayas terminado y salgas de emacs, el título volverá a ser “zsh”. Esto es bastante útil para mantener un seguimiento de las ventanas, y también puede ser especialmente útil en situaciones específicas, como si tienes algún proceso de larga duración en otra ventana que ocasionalmente te pide entrada usando dialog; el nombre de la ventana cambiaría a “dialog” cuando eso ocurriera, para que supieras que tienes que cambiar a esa ventana y hacer algo.
  • Mejor manejo de la sesión (IMHO). Puedes hacer mucho más con las sesiones dentro de tmux. Puedes cambiar fácilmente, renombrar, etc. y puedes mover y compartir ventanas entre sesiones. También tiene un modelo diferente, donde cada usuario tiene un servidor que controla sus sesiones y al que se conecta el cliente. La desventaja de esto es que si el servidor se cae, pierdes todo; sin embargo, nunca se me ha caído el servidor.
  • tmux parece desarrollarse más activamente. Hay actualizaciones con bastante frecuencia, y puedes presentar un informe de errores o una solicitud de características según este FAQ y obtener una respuesta en pocos días.

Esas son sólo las cosas más importantes que me vienen a la mente. También hay otras pequeñas cosas, y estoy seguro de que me estoy olvidando de algunas cosas. Sin embargo, merece la pena probar tmux.

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

(Las sesiones son colecciones de ventanas que pueden separarse y volverse a unir posteriormente. Las ventanas pueden contener uno o más panes. Para ver ejemplos de configuraciones, eche un vistazo a aquí y aquí ).

tmux

  • Pros
  • Puede enviar teclas a otros paneles, algo así como un IDE
  • Enlaces de teclas fáciles – con la configuración correcta, se sentirá como en casa desde Vim o Screen
  • Enlaces incorporados tipo Vim y Emacs
  • Buena gestión de la distribución, muy parecido a un gestor de ventanas en mosaico
  • Unicode parece funcionar con los terminales modernos
  • Algunos problemas con los terminales se solucionan con TERM=tmux
  • Contras
  • Lentitud – no se sabe por qué, pero las pulsaciones de las teclas parecen lentas Ya no hay problemas de lentitud
  • La multiplexación fuerza todo el ancho y alto de la sesión al terminal más pequeño conectado
  • Se ha colgado varias veces en Mac OS X, perdiendo toda la sesión
  • Ha fallado en Linux después de la actualización donde no pude volver a conectarme a mi antigua sesión
  • Pierde pulsaciones de comandos ocasionalmente - ^A ^[ tarda unos cuantos intentos para el modo de copia
  • No se puede mover un panel de una ventana a otra Arreglado con el comando join-pane
  • No se desenvuelve la línea (o “reflow” o “rewrap”) después de cambiar el ancho del terminal (redimensionamiento de la ventana)

GNU Screen

  • Pros
  • Extremadamente estable (la v1.
  • Algunos problemas con el terminal se solucionaron con TERM=screen
  • Enlaces tipo Emacs incorporados
  • Fácil de mover y controlar los paneles horizontales
  • Cuando se multiplexa, cualquier terminal conectado puede redimensionar un panel
  • Contras
  • No hay divisiones verticales sin parche (excepto en Ubuntu)
  • Las divisiones de paneles se pierden al separarlas
  • Conseguir que Unicode funcione requiere un poco de sutileza y determinación
  • Configuración loca de la línea de estado
15
15
15
2015-04-10 18:05:27 +0000

Un punto a favor de la pantalla: está disponible prácticamente desde el principio en Linux y Solaris. Cuando tienes que cambiar de una plataforma a otra, es agradable no tener que cambiar mentalmente de contexto.

Estoy seguro de que se puede compilar tmux en cualquier plataforma, pero a veces se tiene el acceso suficiente para hacer uso de screen, pero los administradores del sistema no quieren añadir ningún software que no sea absolutamente necesario.

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

Llevo unos dos días utilizando tmux, por lo que mi entusiasmo desenfrenado por él aún no se ha visto atenuado por haber dado con casos de uso molestos.

Mientras pasaba por los habituales dolores de crecimiento de la transición de un programa a otro, me sorprendieron varias características positivas, pero la característica que me hace creer que nunca volveré a la pantalla es la utilidad del modo de copiar y pegar.

En screen, no se puede entrar en el modo de copia, retroceder en el buffer y luego ir a otra ventana.

En tmux, puede tener varias ventanas simultáneamente en modo de copia con el buffer desplazado hacia atrás a diferentes posiciones. Además, hay múltiples buffers de copia. Y no es necesario parchear la fuente para obtener el movimiento del cursor fFtT.

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

Las cosas que consigo con tmux que no consigo fácilmente en pantalla son

  1. hacer divisiones de paneles verticales
  2. multiplexación, que usamos para el emparejamiento remoto y local.
8
8
8
2016-01-17 16:10:36 +0000

He sustituido GNU Screen por tmux en todos los casos de uso excepto en uno: cuando necesito un equivalente de HyperTerminal para conectarme a puertos serie. Como Aaron Toponce señaló en su artículo “Connecting To Serial Null Modems With GNU Screen” , el tmux FAQ establece:

screen tiene soporte serial y telnet incorporado; esto es un bloat y es poco probable que se añada a tmux.

Mi caso típico de uso de tmux es crear sesiones de desarrollo multi-panel y multi-ventana en combinación con tmuxinator . Si quieres aprender tmux , te recomiendo que consigas el libro de Brian P. Hogan, tmux: Productive Mouse-Free Development .

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

Uno de los mantenedores de tmux, Thomas Adam, está también listado como mantenedor del proyecto screen aunque sólo toca el código de tmux. Esta es una gran ventaja de tmux sobre screen.

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

He sido un gran usuario de Screen durante mucho tiempo, pero utilizo una versión que modifiqué en 2002. Principalmente porque quería que el orden de navegación “siguiente/previo” de las ventanas coincidiera con el orden de creación de las nuevas ventanas, similar a un gestor de ventanas en mosaico como i3 o Ion . El comportamiento estándar de Screen es que “siguiente” y “prev” vayan por número de ventana, de modo que normalmente una ventana “nueva” (que toma el número más pequeño disponible) estará ubicada en otro lugar que la ventana “siguiente” - confuso si no recuerdas los números. Mi comportamiento preferido ha sido implementado desde entonces en Tmux como una bandera al comando new-window en 2010 , y la opción renumber-windows en 2012 . Mi parche de Screen, que traté de hacer lo más aceptable posible, incluyendo adiciones de documentación y demás, no generó ninguna discusión en la lista de Screen en julio de 2002 (entonces “screen@informatik.uni-erlangen.de”, no puedo encontrar los archivos). De hecho, ni siquiera se reconoció, incluso cuando lo envié de nuevo un año después.

Desde 2002, he “rebasado” mi parche un par de veces para aplicarlo a las nuevas versiones de Screen. Sin embargo, cuando llegué a la versión 4.3 (2015) me di cuenta de un cambio no documentado que rompió uno de mis usos de Screen - a saber, que ‘stuff’ ahora interpola las variables de entorno . No necesitaba esa característica, y no pude averiguar cómo escapar fácilmente el argumento de ‘stuff’ (para poder enviar texto que contenga signos de dólar), así que seguí usando la versión 4.0 (de 2004).

Utilizo ‘stuff’ de Screen (‘send-keys’ en Tmux) en una función de Emacs que envía el contenido de la región actual de Emacs a un número de ventana específico. De esta manera, cuando estoy escribiendo código en un lenguaje de scripting, abro un intérprete, le doy a la ventana del intérprete un número especial, y entonces puedo enviar líneas de código desde mi ventana del editor directamente a la ventana del intérprete usando este enlace de Emacs. Es un poco complicado, pero me gusta más que la solución pura de Emacs, ya que también puedo interactuar con el intérprete en su ventana de pantalla usando las teclas estándar. Es un poco como un GUI IDE, pero no tengo que usar el ratón o mirar un cursor parpadeante.

Otra característica que implementé en mi parche es la capacidad de “marcar” una ventana, y luego reposicionar la ventana marcada para que sea la “siguiente” después de la actual. Para mí esta es una forma mucho más natural de reordenar las ventanas que renumerarlas; es como el paradigma de copiar/pegar, o “arrastrar y soltar”. (Yo recientemente descubrí cómo hacer esto en i3 también.)

Debería ser posible hacer lo mismo en Tmux, por ejemplo desde 2015 hay una facilidad para “marcar” un panel. O tal vez una solución más elemental podría ser elaborada con scripts de shell con estado. Implementé un corto script y keybindings para probar el método de “panel marcado”, y funcionó algunas veces pero luego Tmux se estrelló con “[servidor perdido]”. Luego me encontré con que Tmux se estrellaba incluso sin que yo intentara hacer nada complicado. Aparentemente ha estado fallando para algunos usuarios durante algunos años al menos . A veces el servidor se bloquea, a veces empieza a usar el 100% de la CPU y deja de responder. Nunca he visto a Screen hacer ninguna de estas cosas.

En teoría, Tmux es superior a Screen en varios aspectos. Tiene una capacidad de scripting mucho mejor, lo que significa que puedes hacer cosas como consultar la lista de ventanas en la sesión actual desde la línea de comandos, lo que es imposible con Screen. Por ejemplo en 2015 Screen añadió un comando para “ordenar las ventanas por título” . No estoy seguro de cuándo sería útil un comando tan especializado, pero esto y otras variaciones más prácticas (por ejemplo, ordenar las ventanas por uso de la CPU) podrían hacerse con relativa facilidad desde un script de shell en Tmux. A mí me parece difícil hacer algo tan creativo en Screen, al menos sin modificar el código C.

Como ya han mencionado otros usuarios, Tmux tiene un modelo de un solo servidor, lo que considero el principal inconveniente, especialmente cuando el servidor se bloquea. Es posible solucionar esto especificando un socket separado para cada “sesión”. Aún así, prefiero el modelo de un servidor por sesión de Screen, que parece un poco más elegante.

Trabajar con el código de Screen, en 2002, fue educativo y agradable para mí. Curiosamente, para todas sus características adicionales, Tmux tiene alrededor de un 25% menos de líneas de código que Screen (30k vs 40k). Me di cuenta de que Tmux utiliza muchas estructuras de datos en forma de árbol y de lista, que me resultaron ligeramente difíciles de entender. Screen parecía preferir las matrices.

Según tengo entendido, debido a que la interfaz de terminal de Unix es tan estable, hay poca necesidad de que el código de Screen o Tmux se adapte a los cambios en el sistema operativo subyacente. Estos programas no tienen realmente actualizaciones de seguridad como los navegadores o servidores web o incluso el shell. No he notado ningún problema al ejecutar mi versión personalizada de Screen, actualizada por última vez en 2004 (excepto por la necesidad de añadir algunos archivos de configuración para evitar que Systemd borre el socket ; estos archivos suelen formar parte del paquete de distribución). Tal vez podría solucionar los problemas que encontré en Tmux ejecutando una versión de Tmux de antes de que empezara a fallar. Por supuesto, si un número suficiente de usuarios hace esto, no será muy bueno para los nuevos usuarios, ya que significa que menos expertos buscarán errores en las últimas versiones oficiales de estos programas. Sin embargo, es difícil motivarme para cambiar a un producto que es inestable para mí (el último Tmux) o que carece de ciertas características que quiero (Pantalla estándar).

Sé que esto no proporciona una respuesta fácil a la pregunta del OP, pero espero que mi perspectiva haya sido útil.

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

Yo diría que la disponibilidad de Screen es su punto fuerte, pero su sistema de ventanas no es tan fácil de manejar como el de tmux . Debo decir que actualmente uso gnu-screen la mayor parte del tiempo y como resultado tengo muchas pestañas de terminal en lugar de ventanas de Screen.

@Jed Schneider: Puedes obtener divisiones de paneles verticales conCtrl+A y luego | (barra vertical).