Come avere un terminale specchiato su un secondo schermo in una configurazione a due monitor?


25

Insegno a utilizzare una configurazione a due monitor, quindi ciò che vedo sul desktop è diverso da ciò che il mio pubblico può vedere. Funziona bene per le presentazioni: mentre gli studenti vedono le diapositive, posso vedere i miei appunti.

Ma voglio usare un terminale per eseguire una shell. Tuttavia, il terminale deve essere sul mio desktop O sullo schermo esterno.

C'è un modo per mostrare contemporaneamente i contenuti del terminale in entrambe le schermate? Non voglio specchiare gli schermi, ma attenersi alla modalità a due monitor.

Qualche suggerimento?

Sto usando Ubuntu con Gnome.


Bene, puoi eseguire il mirroring del desktop e mostrare l'emulatore di terminale, questo è un modo, se vuoi solo mostrare il terminale in qualsiasi modo finché funziona. Stai parlando di TTY in particolare? Quindi le due risposte già esistenti per screen e tmux possono funzionare. Dipende davvero dalle tue esigenze
Sergiy Kolodyazhnyy,

Non un duplicato, perché questa domanda riguarda in particolare i terminali, il che significa che ci sono altre opzioni (ad esempio schermo, tmux) disponibili, ma questa domanda è strettamente correlata e la risposta dovrebbe funzionare anche per questo problema.
psmears,

@Sergiy Kolodyazhnyy: non voglio rispecchiare il desktop perché rovina la presentazione. Quando torno a schermi separati, le diapositive non si adattano più allo schermo; a volte le diapositive vanno sul mio desktop. tmux sta funzionando bene per me.
Jander

Risposte:


15

La soluzione portatile

Usa script! Per esempio:

Terminale personale:

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

Terminale di presentazione:

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

Come funziona

Il scriptcomando copia tutto ciò che è scritto sullo schermo del terminale (incluso quello che scrivi!) In un file che accetta come parametro. Di solito tutto viene scritto nel file dopo aver terminato lo script (digitando exit). Tuttavia, l' -fopzione provoca scriptlo svuotamento del buffer dopo ogni scrittura (su MacOS, sarà -Fo -t 0). Quindi, nel terminale di presentazione, è possibile utilizzare tail -Fper vedere continuamente i contenuti mentre vengono scritti.


Cose da notare

  • Poiché un terminale sta scrivendo su un file e l'altro sta leggendo, questo può essere fatto tra diversi utenti! Questo significa che puoi avere qualcuno in ssh con pochissime autorizzazioni e finché metti il ​​file di script in una posizione che possono leggere, sarai comunque in grado di presentarli. (vale a dire: se hai un server a cui i tuoi studenti hanno accesso, potresti creare un file .scrpt che sarebbe leggibile solo per loro in modo che potessero seguirli sui loro schermi)

  • Data la natura di questo metodo, un terminale sta guidando e l'altro sta solo guardando.

  • Questo metodo ha anche il vantaggio aggiuntivo di semplificare l'interruzione del mirroring, eseguire alcuni lavori segreti e ricominciare a mirare senza lasciare il terminale personale. Questo può essere fatto con il seguente:

Terminale personale:

> 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

Più divertimento con script!

Lo scopo scriptè quello di registrare la sessione del terminale in modo che possa essere riprodotta in un secondo momento (ci capita solo di essere il caso speciale della riproduzione durante la registrazione). Per aiutare in questo, scriptha la -tpossibilità di registrare i tempi insieme a ciò che è scritto sullo schermo. Per usarlo, avvia la tua sessione di script con:

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

E riproducilo (con i tempi!) Con:

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

Hai uno studente che ti ha mandato un'e-mail dicendo che sarebbe stato malato e non poteva tenere una conferenza? O vuoi semplicemente dare ai tuoi studenti più materiale didattico? Se registri la tua voce durante la lezione (e inizi lo script quasi contemporaneamente alla registrazione), i tuoi studenti potrebbero riprodurre la tua sessione terminale con la tua voce e ottenere la lezione completa!

Hai uno studente a cui piace riprodurre tutti i suoi video a velocità 2x? scriptreplayprende un "divisore" per cui moltiplica la velocità di riproduzione! Basta passare -d 2a giocare a velocità 2x (nota che questo è un doppio valore, quindi potresti farlo anche -d .5a metà velocità!).


Wow, interessante! La cosa sorprendente è che questo sembra gestire la navigazione nella cronologia, le eliminazioni, i colori ... perfettamente. Non avrei pensato che fosse possibile con tail. (Penso che tmuxsia ancora meglio in pratica, perché non ha alcun problema con ad esempio una sessione di editor.)
leftaroundabout

Approccio davvero interessante! Può gestire le modifiche alle dimensioni della finestra, mentre tmuxe screennon posso, per quanto ne so.
Jander,

@leftaroundabout la magia qui è in realtà solo quanto poco tailsta davvero facendo. Se guardi un file di script con qualcosa di simile vimo lesslo vedrai aggiungere brutte fughe poiché sta cercando di controllare lo scorrimento dello schermo e il posizionamento dei personaggi.
scohe001,

@leftaroundabout per "sessione editor" intendi qualcosa del genere vim? Per quanto posso dire, questo sembra funzionare bene (purché il terminale di presentazione sia più grande del terminale personale)
scohe001

35

Un modo elegante è quello di utilizzare tmuxper questo compito: sudo apt install tmux. Ecco un esempio:

  • Crea una sessione chiamata my_session(rimuovi -dper allegare durante la creazione):

    tmux new-session -d -s my_session
    
  • Aprire una o più nuove finestre del terminale e collegarsi alla stessa sessione:

    tmux attach -t my_session
    
  • Per staccare da un tipo di sessione:

    tmux detach
    

    Oppure premere Ctrl+b , quindi rilasciare Ctrle premere d.

  • Per inviare un comando alla sessione senza collegarlo:

    tmux send-keys -t my_session "echo Hello World!" ACCEDERE  Enter
  • Nota il exitcomando, eseguito dall'interno, chiuderà la sessione.


27

Non riesco a pensare ad alcun modo per ottenere direttamente ciò che vuoi - forse altri possono. Ma riesco a pensare a una soluzione alternativa.

Installa screencon sudo apt install screen. Avvia due terminali. Nel primo, digitare screene premere Invio nella schermata visualizzata. Nel secondo, digitare screen -x.

Mostreranno effettivamente lo stesso contenuto. Non è la stessa finestra del terminale, ma avrà lo stesso contenuto.

Lo schermo può anche fare più trucchi, come ad esempio più finestre tra cui è possibile passare. Questa è una breve esercitazione delle funzionalità disponibili.


Mi dispiace non posso scegliere due risposte come quella corretta ...
Jander

1
Va benissimo :) Ho votato da solo l'altra risposta :)
vidarlo

4

oltre alla risposta di pa4080 sopra per usare tmux, vorrei suggerire una versione estesa:

Prova Tmate. È disponibile anche come pacchetto Ubuntu. Sebbene possa essere usato come sostituto di tmux, potrebbe fare di più: posso replicare la sessione del terminale usando un server pubblico tmate accessibile tramite ssh o http (sola lettura o condivisione completa). Quindi i tuoi studenti possono usare la proiezione del tuo proiettore o avere una vista di sola lettura della sessione del terminale direttamente nel loro browser sul loro personal computer / tablet ecc.


tmatesembra interessante. Ecco una semplice demo: youtube.com/watch?v=is_VpIx3Z4M
pa4080
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.