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

25

Eu ensino usando uma configuração de dois monitores, então o que eu vejo na minha área de trabalho é diferente do que meu público pode ver. Isso funciona bem para apresentações: enquanto os alunos vêem os slides, posso ver minhas anotações.

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

Existe uma maneira de mostrar o conteúdo do terminal em ambas as telas simultaneamente? Eu não quero espelhar as telas, mas fico no modo de dois monitores.

Alguma dica?

Estou usando o Ubuntu com o Gnome.

    
por Jander 24.04.2018 / 16:56

4 respostas

16

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 comando script copia tudo escrito na tela do terminal (incluindo o que você digita!) em um arquivo que ele usa como parâmetro. Normalmente, tudo é gravado no arquivo depois que você termina o script (digitando exit ). No entanto, a opção -f faz com que script limpe seu buffer após cada gravação (no MacOS, isso será -F ou -t 0 ). Em seguida, no terminal de apresentação, você pode usar tail -F para ver o conteúdo continuamente conforme ele é escrito.

Coisas a serem observadas

  • 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 ssh com poucas permissões e, desde que coloque o arquivo de script em um local que ele possa ler, você ainda poderá apresentá-lo. (ex: se você tem um servidor que seus alunos têm acesso, você pode criar um arquivo .scrpt que só seria legível para eles, para que eles pudessem acompanhar em suas próprias telas)

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

  • Este método também tem a vantagem adicional de tornar mais fácil para você parar o espelhamento, fazer algum trabalho secreto e começar a mirrar tudo novamente 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 de script é gravar sua sessão de terminal para que ela possa ser reproduzida mais tarde (nós, por acaso, é o caso especial da reprodução enquanto ela está gravando). Para ajudar com isso, script tem a opção -t para registrar o tempo junto com o que está escrito 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

Peça a um aluno que lhe envie um e-mail dizendo que ele estaria doente e não poderá fazer uma palestra? Ou apenas quer dar aos seus alunos mais material de aula? Se você gravar sua voz durante a palestra (e começar o roteiro mais ou menos ao mesmo tempo que a gravação), seus alunos poderão reproduzir sua sessão de terminal com sua voz e obter a experiência completa de palestra!

Tem um aluno que gosta de reproduzir todos os seus vídeos a uma velocidade de 2x? scriptreplay recebe um "divisor" que multiplica a velocidade de reprodução por! Basta passar -d 2 para jogar com velocidade de 2x (note que este é um valor duplo, então você pode até fazer -d .5 pela metade da velocidade!).

    
por scohe001 25.04.2018 / 18:56
36

Uma maneira elegante é usar tmux para esta tarefa: %código%. Aqui está um exemplo:

  • Crie uma sessão chamada sudo apt install tmux (remova my_session para anexar durante a criação):

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

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

    tmux detach
    

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

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

    tmux send-keys -t my_session "echo Hello World!" ENTER  Enter
  • Observe que o comando -d , executado de dentro, fechará a sessão.

por pa4080 24.04.2018 / 17:20
29

Não consigo pensar em nenhuma maneira de diretamente atingir o que você deseja - talvez outras pessoas possam. Mas posso pensar em uma solução alternativa.

Instale screen com sudo apt install screen . Comece dois terminais. No primeiro, digite screen e pressione enter na tela de propaganda que você recebe. No segundo, digite screen -x .

Eles efetivamente mostrarão o mesmo conteúdo. Não é a mesma janela de terminal, mas será 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.

    
por vidarlo 24.04.2018 / 17:11
4

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

Experimente. Está disponível como pacote Ubuntu também. Embora possa ser usado como substituto do tmux, ele poderia fazer mais: eu posso replicar sua sessão de terminal usando um servidor público acessível via ssh ou http (somente leitura ou compartilhamento total). Assim, os alunos podem usar a projeção do seu beamer ou ter uma visualização somente de leitura da sua sessão de terminal diretamente no navegador em seu computador pessoal / tablet etc.

    
por pdr 26.04.2018 / 16:01