Como ter um terminal espelhado em uma segunda tela em uma configuração de dois monitores?

25

Como ensino usando uma configuração de dois monitores, o que vejo na minha área de trabalho é diferente do que minha audiência pode ver. Isso funciona bem para apresentações: enquanto os alunos veem os slides, posso ver minhas anotações.

Mas eu quero usar um terminal para executar um shell. No entanto, o terminal deve estar na minha área de trabalho OU na tela externa.

Existe uma maneira de mostrar o conteúdo do terminal nas duas telas simultaneamente? Não quero espelhar as telas, mas ative o modo de dois monitores.

Alguma dica?

Estou usando o Ubuntu com Gnome.

Jander
fonte
Bem, você pode espelhar sua área de trabalho e mostrar o emulador de terminal, é uma maneira, se você quiser mostrar o terminal de qualquer maneira, desde que funcione. Você está falando especificamente sobre o TTY? Em seguida, as duas respostas já existentes para screen e tmux podem funcionar. Realmente depende de suas necessidades
Sergiy Kolodyazhnyy
Não é uma duplicata, porque esta pergunta é especificamente sobre terminais, o que significa que existem outras opções disponíveis (por exemplo, tela, tmux) disponíveis, mas esta questão está intimamente relacionada e a resposta deve funcionar para esse problema também.
psmears
@Sergiy Kolodyazhnyy: Eu não quero espelhar a área de trabalho porque ela mexe com a apresentação. Quando volto para telas separadas, os slides não cabem mais na tela; às vezes os slides vão para a minha área de trabalho. O tmux está funcionando bem para mim.
Jander

Respostas:

15

A solução portátil

Use script! Por exemplo:

Terminal pessoal:

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

Terminal de apresentação:

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

Como funciona

O scriptcomando copia tudo o que foi gravado na tela do terminal (incluindo o que você digita!) Em um arquivo usado como parâmetro. Normalmente, tudo é gravado no arquivo após o término do script (digitando exit). No entanto, a -fopção faz scriptcom que o buffer seja liberado após cada gravação (no MacOS, será -Fou -t 0). Em seguida, no terminal de apresentação, você pode usar tail -Fpara ver o conteúdo continuamente conforme eles são gravados.


Coisas a Nota

  • Como um terminal está gravando em um arquivo e o outro está lendo, isso pode ser feito entre diferentes usuários! Isso significa que você pode ter alguém com permissão ssh com muito poucas permissões e, desde que você coloque o arquivo de script em um local que eles possam ler, você ainda poderá apresentar a eles. (ou seja: se você tem um servidor ao qual seus alunos têm acesso, você pode criar um arquivo .scrpt que seria legível apenas para eles, para que possam seguir em suas próprias telas)

  • Dada a natureza desse método, um terminal está dirigindo e o outro está apenas assistindo.

  • Esse método também tem o bônus adicional de facilitar a interrupção do espelhamento, fazer algum trabalho secreto e começar a mirar novamente tudo sem sair do seu terminal pessoal. Isso pode ser feito com o seguinte:

Terminal pessoal:

> 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

Mais diversão com script!

O objetivo scripté gravar sua sessão do terminal para que ela possa ser reproduzida mais tarde (é o caso especial de reproduzir durante a gravação). Para ajudar com isso, scripttem a -topção de gravar o tempo junto com o que está gravado na tela. Para usá-lo, inicie sua sessão de script com:

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

E reproduza-o (com tempo!) Com:

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

Tem um aluno que lhe enviou um e-mail dizendo que ele ficaria doente e não pode dar palestras? Ou apenas deseja dar aos alunos mais material para palestras? Se você gravar sua voz durante a palestra (e iniciar o script quase ao mesmo tempo que a gravação), seus alunos poderão reproduzir sua sessão terminal com sua voz e obter a experiência completa da palestra!

Tem um aluno que gosta de reproduzir todos os vídeos em velocidade 2x? scriptreplaypega um "divisor" que multiplica a velocidade de reprodução! Basta passar -d 2para jogar na velocidade 2x (observe que esse é um valor duplo, então você pode fazer até -d .5meia velocidade!).

scohe001
fonte
Nossa interessante! O surpreendente é que isso parece lidar com a navegação, exclusões, cores do histórico ... sem falhas. Não teria pensado que isso fosse possível tail. (Acho que tmuxainda melhor é, na prática, porque também não tem nenhum problema com, por exemplo, uma sessão de editor.)
leftaroundabout
Abordagem realmente interessante! Ele pode lidar com mudanças no tamanho da janela, enquanto tmuxe screennão pode, tanto quanto eu posso dizer.
Jander
@leftaroundabout sobre a mágica aqui é realmente o quão pouco tailestá realmente fazendo. Se você olhar para um arquivo de script com algo parecido vimou lesso ver adicionar fugas feias, já que está tentando controlar a rolagem da tela e o posicionamento dos caracteres.
precisa
@leftaroundabout por "sessão de editor", você quer dizer algo como vim? Tanto quanto eu posso dizer, isso parece funcionar bem (desde que o terminal de apresentação é maior do que o terminal de pessoal)
scohe001
35

Uma maneira elegante é usar tmuxpara esta tarefa: sudo apt install tmux. Aqui está um exemplo:

  • Crie uma sessão chamada my_session(remova -dpara anexar durante a criação):

    tmux new-session -d -s my_session
    
  • Abra uma ou mais novas janelas de terminal e conecte-se à mesma sessão:

    tmux attach -t my_session
    
  • Para desanexar de um tipo de sessão:

    tmux detach
    

    Ou pressione Ctrl+b , depois solte Ctrle pressione d.

  • Para enviar um comando para a sessão sem anexá-lo:

    tmux send-keys -t my_session "eco Olá, mundo!" ENTRAR  Enter
  • Observe que o exitcomando, executado de dentro, fechará a sessão.

pa4080
fonte
27

Não consegue pensar em nenhuma maneira de alcançar diretamente o que deseja - talvez outros possam. Mas consigo pensar em uma solução alternativa.

Instale screencom sudo apt install screen. Inicie dois terminais. No primeiro, digite screene pressione enter na tela do chat que você obtém. No segundo, digite screen -x.

Eles mostrarão efetivamente o mesmo conteúdo. Não é a mesma janela do terminal, mas terá o mesmo conteúdo.

A tela também pode fazer mais truques, como várias janelas nas quais você pode alternar. Este é um tutorial rápido dos recursos disponíveis.

vidarlo
fonte
Desculpe, não posso escolher duas respostas como a correta ...
Jander
1
Isso é perfeitamente bem :) Eu upvoted a outra resposta me :)
vidarlo
4

além da resposta do pa4080 acima para usar o tmux, gostaria de sugerir uma versão estendida:

Dê uma chance ao tmate. Também está disponível como pacote Ubuntu. Embora possa ser usado como substituto do tmux, ele pode fazer mais: eu posso replicar sua sessão do terminal usando um servidor público tmate acessível via ssh ou http (compartilhamento somente leitura ou compartilhamento total). Assim, seus alunos podem usar sua projeção beamer ou ter uma visão somente leitura da sua sessão do terminal diretamente no navegador deles no computador / tablet pessoal etc.

pdr
fonte
tmateparece interessante. Aqui está uma demonstração simples: youtube.com/watch?v=is_VpIx3Z4M
pa4080: