tmux vs.pantalla


262

Estoy a punto de volver a usar GNU Screen , pero he escuchado que la gente ocasionalmente menciona tmux como una mejor alternativa. ¿Realmente ofrece una alternativa a todas las funciones que ofrece Screen , como el monitoreo de actividad en diferentes ventanas, etc.? ¿Cuáles son los pros y los contras de cada uno?



2
En la pantalla, puede enviar comandos a una sesión adjunta a través screen -S automate_me -X stuff 'command'$(echo -ne '\015')de tmux. Bastante útil si está probando una imagen / ISO de virtualbox y necesita hacer algunos comandos de forma remota rápidamente. Por ejemplo, lo tengo en un comando Vim para depurar scripts rápidamente en una pantalla de Virtualbox. En versiones anteriores de tmux, encontré que la pantalla manejaba más texto que pasaba rápidamente, mientras que tmux se bloqueaba. Además, la pantalla no requiere ninguna configuración para manejar UTF-8, etc.
dezza

¿Se tmuxmaneja historycorrectamente?
Beroe

Respuestas:


170

Algunas de las razones (principales) que prefiero tmuxsobre screen:

  • La barra de estado es mucho más fácil de usar. Puede configurar fácilmente diferentes textos / estilos para la ventana actual, ventanas con actividad, etc. y puede colocar elementos a la izquierda y a la derecha de la barra de estado, incluidos los comandos de shell que se pueden ejecutar en un intervalo específico (15 segundos predeterminado).
  • Casi cualquier comando que pueda ejecutar dentro tmuxpuede ejecutarse desde un shell con tmux command [args]. Esto hace que sea muy fácil de hacer scripts, además de facilitar la ejecución de comandos complejos.
  • Cambio de nombre automático de ventanas mucho más preciso. Si bien screenestablece el título en función de la primera palabra del comando, y requiere que la configuración del shell lo haga incluso en una ventana del shell, tmuxrealiza un seguimiento de los procesos que realmente se ejecutan en cada ventana y actualiza el título en consecuencia. De esta forma, obtienes un cambio dinámico de nombre con cualquier configuración de shell y cero. Por ejemplo: Digamos que estás ejecutando Z Shell; el nombre de la ventana sería "zsh". Ahora supongamos que desea editar algún archivo de configuración, por lo que escribe sudo emacs /etc/somefile. Mientras sudo solicita su contraseña, el nombre de la ventana será "sudo", pero una vez que lo haya hecho y se sudolance emacs, el título será "emacs". Cuando hayas terminado y salgasemacs, el título volverá a cambiar a "zsh". Esto es bastante útil para realizar un seguimiento de las ventanas, y también puede ser especialmente útil en situaciones específicas, como si tiene algún proceso de larga ejecución en otra ventana que ocasionalmente le solicita que use entradas dialog; el nombre de la ventana cambiaría a "diálogo" cuando eso sucediera, por lo que sabría que tenía que cambiar a esa ventana y hacer algo.
  • Mejor manejo de sesión (en mi humilde opinión). Puedes hacer mucho más con sesiones dentro de tmuxsí mismo. Puede cambiar, cambiar el nombre, etc., y 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 falla, lo pierde todo; Sin embargo, nunca me ha fallado el servidor.
  • tmuxParece estar más activamente desarrollado. Hay actualizaciones con bastante frecuencia, y puede presentar un informe de error o una solicitud de función de acuerdo con estas preguntas frecuentes y obtener una respuesta dentro de unos días.

Esas son solo las cosas más importantes que me vienen a la mente de inmediato. También hay otras cosas pequeñas, y estoy seguro de que estoy olvidando algunas cosas. Sin embargo, definitivamente vale la pena tmuxintentarlo.


151
El desarrollo de tmux es más activo porque es nuevo . GNU Screen tiene casi 25 años , por lo que han solucionado la mayoría de los errores.
un nerd pagado

8
El comentario de un nerd pagado es una calificación muy importante de su último punto. Y el segundo punto como se indicó no es realmente una diferencia, ya que también se aplica a la pantalla a menos que pueda ser más específico.
jw013


11
@apaidnerd esa es una declaración muy rica: savannah.gnu.org/bugs/…
Błażej Michalik

93

(Las sesiones son colecciones de ventanas que se pueden separar y volver a conectar más tarde. Windows puede contener uno o más paneles . Por ejemplo, configuraciones, consulte aquí y aquí ).

tmux

  • Pros
    • Puede enviar claves a otros paneles, como un IDE
    • Fácil combinación de teclas: con la configuración correcta, se sentirá como en casa desde Vim o Screen
    • Vim-ish y Emacs-ish enlaces incorporados
    • Buena gestión del diseño, muy parecido a un administrador de ventanas de mosaico
    • Unicode parece simplemente funcionar con terminales modernas
    • Algunos problemas de terminal solucionados con TERM=tmux
  • Contras
    • Lento: no sé por qué, pero las pulsaciones de teclas parecen ser lentas. No más problemas con la lentitud.
    • La multiplexación fuerza el ancho y la altura de toda la sesión al terminal conectado más pequeño
    • Se ha bloqueado 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 sesión anterior
    • Omite pulsaciones de teclas de comandos ocasionalmente: ^A ^[toma algunos intentos para el modo de copia
    • No se puede mover un panel de una ventana a otra Solucionado con el join-panecomando
    • Sin desenvoltura de línea (o "reflujo" o "reenvío") después del cambio de ancho de terminal (cambio de tamaño de ventana)

Pantalla GNU

  • Pros
    • Extremadamente estable (v1.0 fue en 1987)
    • Algunos problemas de terminal solucionados con TERM=screen
    • Enlaces Emacs-ish incorporados
    • Fácil de mover y controlar paneles horizontales
    • Al multiplexar, cualquier terminal conectado puede cambiar el tamaño de un panel
  • Contras
    • No hay divisiones verticales sin parche (excepto en Ubuntu)
    • Las divisiones del panel se pierden al separar
    • Hacer que Unicode funcione requiere un poco de delicadeza y determinación
    • Configuración de línea de estado loco

¿Las pulsaciones de teclado diferidas son solo cuando se presiona Esc? tmux tiene un retraso donde espera para ver si está ingresando una secuencia xterm o solo un Esc solitario, y combinado con vim, puede parecer bastante lento. Establezca el tiempo de escape en un valor inferior como 50.
Eevee

También es divertido que digas ^A ^[que a veces no funciona; Tengo el mismo problema con la pantalla, ¡pero nunca con tmux! Y creo que puedes mover los paneles con ellos join-pane.
Eevee

Creo que la pantalla usa mucha más memoria, lo que podría incluirse como una desventaja.
Paradroid

66
Bueno, tmuxapesta vim, en algunos casos (a saber, el mío), ninguna solución publicada en algún lugar funciona, e incluso las personas que pasaron algún tiempo resolviendo el problema mío no pudieron. Es molesto cuando no puedes usarlo <C-Left>y <C-Right>entrar vim.
yo'

3
No vertical splits without patch (except on Ubuntu)No creo que sea verdad. He estado usando la pantalla durante algunos años y nunca tuve problemas para dividirme horizontal o verticalmente en Debian y Fedora. Incluso en Android con Termux funciona de maravilla.
Forivin

12

Un profesional para la pantalla: está disponible casi de fábrica en Linux y Solaris. Cuando tiene que alternar entre plataformas, es bueno no tener el cambio de contexto mental.

Estoy seguro de que puedes compilar tmux en cualquier plataforma, pero a veces tienes suficiente acceso para usar la pantalla, pero los administradores del sistema no quieren agregar ningún software que no sea absolutamente necesario.


10

He estado usando tmux durante aproximadamente 2 días, por lo que mi entusiasmo desenfrenado aún no se ha atenuado golpeando casos de uso molestos. Mientras atravesaba los dolores de crecimiento habituales 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 copiar y pegar. En la pantalla, no puede ingresar al modo de copia, desplazarse hacia atrás en el búfer y luego ir a otra ventana. En tmux, puede tener varias ventanas simultáneamente en modo copia con el búfer desplazado hacia atrás a diferentes posiciones. Además, hay múltiples buffers de copia. Y no necesita parchear la fuente para obtener el movimiento del cursor fFtT.


8

Las cosas que obtengo de tmux que no entiendo fácilmente en la pantalla son:

  1. hacer divisiones de panel vertical
  2. multiplexación, que utilizamos para emparejamiento remoto y local.


Como menciona la publicación anterior, la pantalla tiene divisiones de panel vertical (aparentemente requiere un parche sin Ubuntu). Además, la multiplexación funciona bien y lo ha sido durante muchos años.
EntangledLoops

las divisiones verticales han estado en la línea principal screendesde 4.2, lanzado en 2014. Muchas distribuciones incluyen versiones muy antiguas, especialmente Apple.
Neal Fultz

2
Ambos puntos son incorrectos.
Forivin

2
La respuesta no es correcta en 2018
Alec Istomin

5

He reemplazado GNU Screen con tmux en todos los casos de uso excepto uno, cuando necesito un HyperTerminal equivalente para conectarme a los puertos seriales. Como Aaron Toponce señaló en su artículo "Conexión a módems nulos seriales con pantalla GNU" , las preguntas frecuentes de tmux establecen:

la pantalla tiene soporte incorporado de serie y telnet; esto es inflado y es poco probable que se agregue a tmux.

Mi caso de uso típico de tmux es crear sesiones de desarrollo de paneles múltiples y ventanas múltiples en combinación con tmuxinator . Si desea aprender tmux , le recomiendo obtener el libro de Brian P. Hogan, tmux: Desarrollo productivo sin mouse .


¿Sabes cu Llamar a otro sistema ? ¡Una serie más simple que la pantalla , pero ligera y útil!
F. Hauri

2

He sido un gran usuario de Screen durante mucho tiempo, pero uso una versión que modifiqué en 2002. Principalmente porque quería que la ventana "siguiente / anterior" ordenara la navegación en el orden en que Se crearon ventanas, similares a un administrador de ventanas de mosaico como i3 o Ion . El comportamiento estándar de la pantalla es que 'siguiente' y 'anterior' vayan por número de ventana, por lo que generalmente una ventana 'nueva' (agarrando el número más pequeño disponible) se ubicará en otro lugar que la ventana 'siguiente', lo que es confuso si no lo hace ' No recuerdo los números. Desde entonces, mi comportamiento preferido se implementó en Tmux como un indicador del comando de nueva ventana en 2010 y la opción de renumerar ventanas en 2012. Mi parche de Screen, que traté de hacer lo más aceptable posible, incluidas las adiciones de documentación, etc., no generó ningún debate sobre la lista de Screen en julio de 2002 (luego "screen@informatik.uni-erlangen.de", no puede encontrar archivos). De hecho, ni siquiera fue reconocido, incluso cuando lo envié nuevamente un año después.

Desde 2002, "modifiqué" mi parche un par de veces para aplicarlo a las versiones más nuevas de Screen. Sin embargo, cuando llegué a la versión 4.3 (2015) noté un cambio indocumentado que rompió uno de mis usos de la pantalla, es decir, ese 'material' ahora interpola las variables de entorno . No necesitaba esa función, y no podía encontrar la manera de escapar fácilmente del argumento de 'cosas' (para poder enviar texto que contenga signos de dólar), así que seguí usando la versión 4.0 (de 2004).

Utilizo las 'cosas' de Screen ('teclas de envío' 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 esa manera, cuando escribo código en un lenguaje de script, abro un intérprete, le doy a la ventana del intérprete un número especial y luego puedo enviar líneas de código desde la ventana de mi editor directamente a la ventana del intérprete usando este enlace de Emacs. Es hacky, 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 IDE GUI, pero no tengo que usar el mouse 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 "siguiente" después de la actual. Para mí, esta es una forma mucho más natural de reordenar ventanas que renumerarlas; es como el paradigma de copiar / pegar, o "arrastrar y soltar". ( Recientemente descubrí cómo hacer esto también en i3 ).

Debería ser posible hacer lo mismo en Tmux, por ejemplo, a partir de 2015 existe la posibilidad de "marcar" un panel. O tal vez una solución más elemental podría elaborarse con scripts de shell con estado. Implementé un script corto y combinaciones de teclas para probar el método de "panel marcado", y funcionó varias veces, pero luego Tmux se bloqueó con "[servidor perdido]". Luego encontré que Tmux se bloqueaba incluso sin intentar hacer algo complicado. Al parecer, se ha fallando para algunos usuarios para unos pocos años por lo menos . A veces el servidor se bloquea, a veces comienza a usar el 100% de la CPU y deja de responder. Nunca he visto a Screen hacer ninguno de estos.

En teoría, Tmux es superior a Screen de varias maneras. Tiene una capacidad de escritura mucho mejor, lo que significa que puede hacer cosas como consultar la lista de ventanas en la sesión actual desde la línea de comandos, lo cual es imposible con Screen. Por ejemplo, en 2015 Screen agregó un comando para "ordenar ventanas por título" . No estoy seguro de cuándo sería útil un comando tan especializado, pero esta y otras variaciones más prácticas (por ejemplo, ordenar ventanas según el uso de la CPU) podrían hacerse con relativa facilidad desde un script de shell en Tmux. Para mí, parecería difícil hacer algo tan creativo en Screen, al menos sin modificar el código C.

Como otros carteles mencionaron, Tmux tiene un modelo de servidor único que veo como el principal inconveniente, particularmente cuando el servidor falla. Es posible solucionar esto especificando un socket separado para cada "sesión". Aún así, prefiero el valor predeterminado de un servidor por sesión de Screen, que parece un poco más elegante.

Trabajar con el código Screen, en 2002, fue educativo y agradable para mí. Por extraño que parezca, para todas sus características adicionales, Tmux tiene aproximadamente un 25% menos de líneas de código que Screen (30k frente a 40k). Me di cuenta de que Tmux utiliza muchas estructuras de datos de árbol y lista, que me resultaron un poco difíciles de entender. La pantalla parecía preferir las matrices.

Según tengo entendido, debido a que la interfaz de terminal Unix es tan estable, hay poca necesidad de que el código Screen o Tmux se adapte a los cambios en el sistema operativo subyacente. Estos programas realmente no tienen actualizaciones de seguridad como navegadores web 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 agregar algunos archivos de configuración para evitar que Systemd elimine el socket; estos archivos son típicamente parte del paquete de distribución de todos modos). Quizás podría solucionar los problemas que encontré en Tmux ejecutando una versión de Tmux antes de que comenzara a fallar. Por supuesto, si suficientes usuarios hacen esto, entonces 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í (ú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

Uno de los mantenedores de tmux, Thomas Adam, también figura como mantenedor del screenproyecto, aunque solo toca el código tmux. Este es un gran profesional de tmux sobre pantalla.


1

Diría que la disponibilidad de la pantalla es su fortaleza, pero su sistema de ventanas no es tan fácil de manejar como el de . Debo decir que uso mayor parte del tiempo actualmente y, como resultado, tengo muchas pestañas de terminal en lugar de ventanas de pantalla.

@Jed Schneider: Puede obtener divisiones de panel vertical con Ctrl+ Ay luego |(barra vertical).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.