¿Cómo tener un terminal reflejado en una segunda pantalla en una configuración de dos monitores?

25

Enseño usando una configuración de dos monitores, por lo que lo que veo en mi escritorio es diferente de lo que mi audiencia puede ver. Esto funciona bien para presentaciones: mientras los estudiantes ven las diapositivas, yo puedo ver mis notas.

Pero quiero usar una terminal para ejecutar un shell. Sin embargo, el terminal tiene que estar en mi escritorio O en la pantalla externa.

¿Hay alguna manera de mostrar el contenido del terminal en ambas pantallas simultáneamente? No quiero reflejar las pantallas, pero me quedo con el modo de dos monitores.

¿Alguna pista?

Estoy usando Ubuntu con Gnome.

Jander
fuente
Bueno, puede duplicar su escritorio y mostrar el emulador de terminal, esa es una forma, si solo desea mostrar el terminal de cualquier manera, siempre que funcione. ¿Estás hablando de TTY específicamente? Entonces, las dos respuestas ya existentes para screen y tmux pueden funcionar. Realmente depende de tus necesidades
Sergiy Kolodyazhnyy
No es un duplicado, porque esta pregunta es específicamente sobre terminales, lo que significa que hay otras opciones (por ejemplo, pantalla, tmux) disponibles, pero esta pregunta está muy relacionada y la respuesta también debería funcionar para este problema.
psmears
@Sergiy Kolodyazhnyy: No quiero duplicar el escritorio porque se equivoca con la presentación. Cuando vuelvo a pantallas separadas, las diapositivas ya no se ajustan a la pantalla; a veces las diapositivas van a mi escritorio. tmux está funcionando bien para mí.
Jander

Respuestas:

15

La solución portátil

Uso script! Por ejemplo:

Terminal personal:

> script -f /tmp/lecture1.scrpt #use -F instead on MacOS
> ... #start doing things here!

Terminal de presentación:

> #after this, terminal will continuously print whatever's written to personal terminal
> tail -F /tmp/lecture1.scrpt

Cómo funciona

El scriptcomando copia todo lo escrito en la pantalla del terminal (¡incluido lo que escribe!) En un archivo que toma como parámetro. Por lo general, todo se escribe en el archivo después de finalizar el script (escribiendo exit). Sin embargo, la -fopción hace scriptque se vacíe su búfer después de cada escritura (en MacOS, esto será -Fo -t 0). Luego, en el terminal de presentación, puede usar tail -Fpara ver los contenidos continuamente a medida que se escriben.


Cosas a tener en cuenta

  • Dado que un terminal está escribiendo en un archivo y el otro está leyendo, ¡esto puede hacerse entre diferentes usuarios! Esto significa que puede hacer que alguien ingrese con muy pocos permisos y siempre y cuando coloque el archivo de secuencia de comandos en una ubicación que pueda leer, aún podrá presentarles. (es decir: si tiene un servidor al que sus alumnos tienen acceso, puede crear un archivo .scrpt que solo sea legible para ellos para que puedan seguirlo en sus propias pantallas)

  • Dada la naturaleza de este método, una terminal está conduciendo y la otra solo está mirando.

  • Este método también tiene la ventaja adicional de hacer que sea más fácil dejar de duplicar, hacer un trabajo secreto y comenzar a duplicar todo sin salir de su terminal personal. Esto se puede hacer con lo siguiente:

Terminal personal:

> exit #end script session; stop writing to /tmp/lecture1.scrpt
> ... #do secret things not safe for student eyes!
> script -f -a /tmp/lecture1.scrpt #begin writing again with -a to append

Más diversión con script!

El propósito de scriptes grabar su sesión de terminal para que pueda reproducirse más tarde (resulta que se trata de un caso especial de reproducción mientras se está grabando). Para ayudar con esto, scripttiene la -topción de registrar el tiempo junto con lo que está escrito en la pantalla. Para usarlo, comience su sesión de script con:

> script -f -t 2>/tmp/lecture1.timing /tmp/lecture1.scrpt

Y reprodúzcalo (¡con tiempo!) Con:

> scriptreplay -t /tmp/lecture1.timing -s /tmp/lecture1.scrpt

¿Tiene un estudiante que le envió un correo electrónico diciéndole que estaría enfermo y no puede hacer una conferencia? ¿O simplemente quiere darles a sus alumnos más material de lectura? Si graba su voz durante la conferencia (y comienza el guión aproximadamente al mismo tiempo que la grabación), ¡entonces sus estudiantes podrían reproducir su sesión terminal con su voz y obtener la experiencia de la conferencia completa!

¿Tiene un estudiante al que le gusta reproducir todos sus videos a una velocidad 2x? scriptreplaytoma un "divisor" por el que multiplica la velocidad de juego. Simplemente pasa -d 2a jugar a una velocidad 2x (ten en cuenta que este es un valor doble, ¡por lo que incluso podrías hacerlo -d .5a media velocidad!).

scohe001
fuente
¡Wow interesante! Lo sorprendente es que esto parece manejar el historial de navegación, eliminaciones, colores ... sin problemas. No hubiera pensado que esto fuera posible con tail. (Creo que tmuxtodavía es mejor en la práctica, porque tampoco tiene ningún problema con, por ejemplo, una sesión de editor)
Leftaroundabout
Enfoque realmente interesante! Puede manejar los cambios de tamaño de la ventana, mientras que tmuxy screenno puedo, por lo que puedo decir.
Jander
@leftaroundabout la magia aquí es en realidad lo poco tailque realmente está haciendo. Si miras un archivo de script con algo parecido vimo lesslo verás agregando escapes feos ya que está tratando de controlar el desplazamiento de la pantalla y la ubicación de los personajes.
scohe001
@leftaroundabout por "sesión de editor" ¿quieres decir algo así vim? Hasta donde puedo decir, esto parece funcionar bien (siempre que el terminal de presentación sea más grande que el terminal personal)
scohe001
35

Una forma elegante es utilizar tmuxpara esta tarea: sudo apt install tmux. Aquí hay un ejemplo:

  • Cree una sesión llamada my_session(eliminar -dpara adjuntar durante la creación):

    tmux new-session -d -s my_session
    
  • Abra una o más ventanas de terminal nuevas y adjúntelas a la misma sesión:

    tmux attach -t my_session
    
  • Para desconectarse de un tipo de sesión:

    tmux detach
    

    O presione Ctrl+b , luego suelte Ctrly presione d.

  • Para enviar un comando a la sesión sin adjuntarlo:

    tmux send-keys -t my_session "echo Hello World!" ENTRAR  Enter
  • Tenga en cuenta que el exitcomando, ejecutado desde adentro, cerrará la sesión.

pa4080
fuente
27

No se me ocurre ninguna forma de lograr directamente lo que desea, tal vez otros puedan hacerlo . Pero puedo pensar en una solución alternativa.

Instalar screencon sudo apt install screen. Comience dos terminales. En el primero, escribe screeny presiona Intro en la pantalla que te molesta. En el segundo, escriba screen -x.

Mostrarán efectivamente el mismo contenido. No es la misma ventana de terminal, pero será el mismo contenido.

La pantalla también puede hacer más trucos, como varias ventanas entre las que puedes cambiar. Este es un tutorial rápido de las funciones disponibles.

vidarlo
fuente
Lo siento, no puedo elegir dos respuestas como la correcta ...
Jander
1
Eso está perfectamente bien :) He votado la otra respuesta yo mismo :)
vidarlo
4

Además de la respuesta anterior de pa4080 para usar tmux, me gustaría sugerir una versión extendida:

Prueba tmate. También está disponible como paquete de Ubuntu. Si bien puede usarse como reemplazo de tmux, podría hacer más: puedo replicar su sesión de terminal utilizando un servidor público tmate accesible a través de ssh o http (solo lectura o recurso compartido completo). Por lo tanto, sus estudiantes podrían usar su proyección de proyector o tener una vista de solo lectura de su sesión de terminal directamente en su navegador en su computadora / tableta personal, etc.

pdr
fuente
tmateparece interesante. Aquí hay una demostración simple: youtube.com/watch?v=is_VpIx3Z4M
pa4080