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?
gnu-screen
tmux
Alison R.
fuente
fuente
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.tmux
manejahistory
correctamente?Respuestas:
Algunas de las razones (principales) que prefiero
tmux
sobrescreen
:tmux
puede ejecutarse desde un shell contmux command [args]
. Esto hace que sea muy fácil de hacer scripts, además de facilitar la ejecución de comandos complejos.screen
establece 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,tmux
realiza 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 escribesudo emacs /etc/somefile
. Mientras sudo solicita su contraseña, el nombre de la ventana será "sudo", pero una vez que lo haya hecho y sesudo
lanceemacs
, 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 entradasdialog
; 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.tmux
sí 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.tmux
Parece 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
tmux
intentarlo.fuente
(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
TERM=tmux
Lento: no sé por qué, pero las pulsaciones de teclas parecen ser lentas.No más problemas con la lentitud.No se puede mover un panel de una ventana a otraSolucionado con eljoin-pane
comandoPantalla GNU
TERM=screen
fuente
^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 ellosjoin-pane
.tmux
apestavim
, 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>
entrarvim
.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.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.
fuente
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.
fuente
Las cosas que obtengo de tmux que no entiendo fácilmente en la pantalla son:
fuente
-x
acladd
screen
desde 4.2, lanzado en 2014. Muchas distribuciones incluyen versiones muy antiguas, especialmente Apple.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:
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 .
fuente
cu
Llamar a otro sistema ? ¡Una serie más simple que la pantalla , pero ligera y útil!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 "[email protected]", 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.
fuente
Uno de los mantenedores de tmux, Thomas Adam, también figura como mantenedor del
screen
proyecto, aunque solo toca el código tmux. Este es un gran profesional de tmux sobre pantalla.fuente
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 tmux . Debo decir que uso gnu-screen la 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).
fuente