Comment faire refléter un terminal sur un deuxième écran dans une configuration à deux moniteurs?

25

J'enseigne en utilisant une configuration à deux moniteurs, donc ce que je vois sur mon bureau est différent de ce que mon public peut voir. Cela fonctionne très bien pour les présentations: pendant que les élèves voient les diapositives, je peux voir mes notes.

Mais je veux utiliser un terminal pour exécuter un shell. Cependant, le terminal doit être sur mon bureau OU sur l'écran externe.

Existe-t-il un moyen d'afficher le contenu du terminal sur les deux écrans simultanément? Je ne veux pas refléter les écrans, mais m'en tenir au mode deux moniteurs.

Des indices?

J'utilise Ubuntu avec Gnome.

Jander
la source
Eh bien, vous pouvez mettre en miroir votre bureau et montrer l'émulateur de terminal, c'est une façon, si vous voulez simplement montrer le terminal de quelque manière que ce soit tant qu'il fonctionne. Parlez-vous spécifiquement des ATS? Ensuite, les deux réponses déjà existantes pour screen et tmux peuvent fonctionner. Dépend vraiment de vos besoins
Sergiy Kolodyazhnyy
Pas un doublon, car cette question concerne spécifiquement les terminaux, ce qui signifie qu'il existe d'autres options (par exemple, écran, tmux), mais cette question est très étroitement liée et la réponse devrait également fonctionner pour ce problème.
psmears
@Sergiy Kolodyazhnyy: Je ne veux pas refléter le bureau car il gâche la présentation. Lorsque je reviens à des écrans séparés, les diapositives ne correspondent plus à l'écran; parfois les diapositives vont sur mon bureau. tmux fonctionne bien pour moi.
Jander

Réponses:

15

La solution portable

Utilisez script! Par exemple:

Terminal personnel:

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

Terminal de présentation:

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

Comment ça marche

La scriptcommande copie tout ce qui est écrit sur l'écran du terminal (y compris ce que vous tapez!) Dans un fichier qu'elle prend comme paramètre. Normalement, tout est écrit dans le fichier après la fin du script (en tapant exit). Cependant, l' -foption fait scriptvider son tampon après chaque écriture (sur MacOS, ce sera -Fou -t 0). Ensuite, dans le terminal de présentation, vous pouvez utiliser tail -Fpour voir le contenu en continu pendant qu'il est écrit.


À noter

  • Puisqu'un terminal écrit dans un fichier et que l'autre lit, cela peut être fait entre différents utilisateurs! Cela signifie que vous pouvez avoir quelqu'un ssh avec très peu d'autorisations et tant que vous placez le fichier de script dans un emplacement qu'il peut lire, vous pourrez toujours le présenter. (c'est-à-dire: si vous avez un serveur auquel vos élèves ont accès, vous pouvez créer un fichier .scrpt qui ne serait lisible que pour eux afin qu'ils puissent suivre sur leurs propres écrans)

  • Compte tenu de la nature de cette méthode, un terminal conduit et l'autre ne fait que regarder.

  • Cette méthode a également l'avantage supplémentaire de vous permettre d'arrêter facilement la mise en miroir, de faire un travail secret et de recommencer la mise en miroir sans quitter votre terminal personnel. Cela peut être fait avec les éléments suivants:

Terminal personnel:

> 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

Plus de plaisir avec script!

Le but de scriptest d'enregistrer votre session de terminal afin qu'elle puisse être lue plus tard (il se trouve que c'est le cas particulier de la lecture pendant l'enregistrement). Pour vous aider, scripta la -tpossibilité d'enregistrer le chronométrage avec ce qui est écrit à l'écran. Pour l'utiliser, démarrez votre session de script avec:

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

Et rejouez (avec le timing!) Avec:

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

Vous avez un étudiant qui vous a envoyé un e-mail pour vous dire qu'il serait malade et ne pourrait pas faire de cours? Ou voulez-vous simplement donner à vos étudiants plus de matériel de cours? Si vous enregistrez votre voix pendant la conférence (et commencez le script à peu près en même temps que l'enregistrement), alors vos étudiants pourraient rejouer votre session terminale avec votre voix et obtenir l'expérience de conférence complète!

Vous avez un étudiant qui aime lire toutes ses vidéos à une vitesse 2x? scriptreplayprend un "diviseur" qui multiplie la vitesse de jeu par! Il suffit de passer -d 2pour jouer à une vitesse 2x (notez que c'est une valeur double, donc vous pourriez même le faire -d .5pour la moitié de la vitesse!).

scohe001
la source
Wow intéressant! Ce qui est étonnant, c'est que cela semble gérer parfaitement la navigation dans l'historique, les suppressions, les couleurs ... sans faille. Je n'aurais pas pensé que c'était possible avec tail. (Je pense que tmuxc'est encore mieux dans la pratique, car cela n'a pas non plus de problème avec, par exemple, une session d'éditeur.)
leftaroundabout
Approche vraiment intéressante! Il peut gérer les changements de taille de fenêtre, tmuxet screenne le peut pas, pour autant que je sache.
Jander
@leftaroundabout la magie ici est en fait à quel point peu tailfait vraiment. Si vous regardez un fichier de script avec quelque chose comme vimou lessvous verrez qu'il ajoute des échappements moches car il essaie de contrôler le défilement de l'écran et le placement des caractères.
scohe001
@leftaroundabout par "session de l'éditeur" voulez-vous dire quelque chose comme vim? Pour autant que je sache, cela semble fonctionner correctement (tant que le terminal de présentation est plus grand que le terminal personnel)
scohe001
35

Une façon élégante est d'utiliser tmuxpour cette tâche: sudo apt install tmux. Voici un exemple:

  • Créez une session appelée my_session(supprimer -dpour attacher lors de la création):

    tmux new-session -d -s my_session
    
  • Ouvrez une ou plusieurs nouvelles fenêtres de terminal et attachez-vous à la même session:

    tmux attach -t my_session
    
  • Pour vous détacher d'un type de session:

    tmux detach
    

    Ou appuyez sur Ctrl+b , puis relâchez Ctrlet appuyez sur d.

  • Pour envoyer une commande à la session sans l'attacher:

    tmux send-keys -t my_session "echo Hello World!" ENTRER  Enter
  • Notez que la exitcommande, exécutée de l'intérieur, fermera la session.

pa4080
la source
27

Je ne peux imaginer aucun moyen d' atteindre directement ce que vous voulez - peut-être que d'autres le peuvent. Mais je peux penser à une solution de contournement.

Installez screenavec sudo apt install screen. Démarrez deux terminaux. Dans le premier, tapez screenet appuyez sur Entrée sur l'écran de rappel que vous obtenez. Dans le second, tapez screen -x.

Ils afficheront effectivement le même contenu. Ce n'est pas la même fenêtre de terminal, mais ce sera le même contenu.

L'écran peut également faire plus d'astuces, telles que plusieurs fenêtres entre lesquelles vous pouvez basculer. Ceci est un rapide tutoriel des fonctionnalités disponibles.

vidarlo
la source
Désolé, je ne peux pas choisir deux réponses comme la bonne ...
Jander
1
C'est parfaitement bien :) J'ai moi-même voté pour l'autre réponse :)
vidarlo
4

En outre pa4080 la réponse de l' utilisation ci - dessus pour tmux, je voudrais proposer une version étendue:

Essayez tmate. Il est également disponible sous forme de package Ubuntu. Bien qu'il puisse être utilisé comme remplacement de tmux, il pourrait faire plus: je peux répliquer votre session de terminal en utilisant un serveur public tmate accessible via ssh ou http (lecture seule ou partage complet). Ainsi, vos élèves pourraient utiliser soit votre projection beamer, soit avoir une vue en lecture seule de votre session de terminal directement dans leur navigateur sur leur ordinateur / tablette personnel, etc.

pdr
la source
tmatesemble intéressant. Voici une démo simple: youtube.com/watch?v=is_VpIx3Z4M
pa4080