Wie lässt sich ein Terminal in einem Zwei-Monitor-Setup auf einen zweiten Bildschirm spiegeln?

25

Ich unterrichte mit einem Zwei-Monitor-Setup, sodass sich das, was ich auf meinem Desktop sehe, von dem unterscheidet, was mein Publikum sehen kann. Dies funktioniert gut für Präsentationen: Während die Schüler die Folien sehen, kann ich meine Notizen sehen.

Aber ich möchte ein Terminal verwenden, um eine Shell auszuführen. Das Terminal muss sich jedoch auf meinem Desktop ODER auf dem externen Bildschirm befinden.

Gibt es eine Möglichkeit, den Terminalinhalt auf beiden Bildschirmen gleichzeitig anzuzeigen? Ich möchte die Bildschirme nicht spiegeln, sondern mich an den Zwei-Monitor-Modus halten.

Irgendwelche Hinweise?

Ich benutze Ubuntu mit Gnome.

Jander
quelle
Nun, Sie können Ihren Desktop spiegeln und den Terminal-Emulator anzeigen, das ist eine Möglichkeit, wenn Sie das Terminal nur auf irgendeine Weise anzeigen möchten, solange es funktioniert. Sprechen Sie speziell über TTY? Dann können die beiden schon vorhandenen Antworten für screen und tmux funktionieren.
Hängt
Kein Duplikat, da es sich bei dieser Frage speziell um Terminals handelt, was bedeutet, dass andere Optionen (z. B. screen, tmux) verfügbar sind. Diese Frage ist jedoch sehr eng miteinander verbunden, und die dortige Antwort sollte auch für dieses Problem funktionieren.
Psmears
@Sergiy Kolodyazhnyy: Ich möchte den Desktop nicht spiegeln, weil er die Präsentation durcheinander bringt. Wenn ich zurück zu separaten Bildschirmen wechsle, passen die Folien nicht mehr auf den Bildschirm. Manchmal gehen die Folien zu meinem Desktop. tmux funktioniert gut für mich.
Jander

Antworten:

15

Die tragbare Lösung

Verwenden script ! Beispielsweise:

Persönliches Terminal:

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

Präsentationsterminal:

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

Wie es funktioniert

Der scriptBefehl kopiert alle auf dem Terminalbildschirm geschriebenen Daten (einschließlich der von Ihnen eingegebenen Daten) in eine Datei, die als Parameter verwendet wird. Normalerweise wird alles in die Datei geschrieben, nachdem Sie das Skript beendet haben (durch Eingabe exit). Die -fOption bewirkt jedoch, dass scriptder Puffer nach jedem Schreibvorgang geleert wird (unter MacOS ist dies -Foder -t 0). Anschließend können Sie im Präsentationsterminal tail -Fden Inhalt fortlaufend anzeigen, während er geschrieben wird.


Dinge zu beachten

  • Da ein Terminal in eine Datei schreibt und das andere liest, kann dies zwischen verschiedenen Benutzern erfolgen! Dies bedeutet, dass Sie jemanden mit sehr wenigen Berechtigungen haben können. Solange Sie die Skriptdatei an einem Ort ablegen, an dem sie gelesen werden kann, können Sie sie weiterhin präsentieren. (dh wenn Sie einen Server haben, auf den Ihre Schüler Zugriff haben, können Sie eine .scrpt-Datei erstellen, die nur für sie lesbar ist, damit sie auf ihren eigenen Bildschirmen mitlesen können.)

  • In Anbetracht der Art dieser Methode fährt ein Terminal und das andere sieht nur zu.

  • Diese Methode hat auch den zusätzlichen Vorteil, dass Sie die Spiegelung ganz einfach beenden, geheime Arbeiten ausführen und wieder mit dem Spiegeln beginnen können, ohne Ihr persönliches Terminal zu verlassen. Dies kann folgendermaßen geschehen:

Persönliches Terminal:

> 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

Mehr Spaß mit script!

Der Zweck von scriptist es, Ihre Terminalsitzung aufzuzeichnen, damit sie später wiedergegeben werden kann (wir sind nur der Spezialfall der Wiedergabe während der Aufzeichnung). Um dies zu unterstützen, scriptbesteht die -tMöglichkeit, das Timing zusammen mit den auf dem Bildschirm angezeigten Informationen aufzuzeichnen. Um es zu benutzen, starte deine Skriptsitzung mit:

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

Und spielen Sie es ab (mit Timing!) Mit:

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

Hat ein Student, der Ihnen eine E-Mail geschickt hat, gesagt, dass er krank ist und keinen Vortrag halten kann? Oder möchten Sie Ihren Schülern einfach mehr Vorlesungsmaterial geben? Wenn Sie Ihre Stimme während der Vorlesung aufzeichnen (und das Skript ungefähr zur gleichen Zeit wie die Aufzeichnung starten), können Ihre Schüler Ihre Terminalsitzung mit Ihrer Stimme wiedergeben und die gesamte Vorlesungserfahrung nutzen!

Haben Sie einen Schüler, der alle seine Videos mit 2x Geschwindigkeit abspielen möchte? scriptreplayNimmt man einen "Divisor", multipliziert dieser die Spielgeschwindigkeit mit! Übergeben Sie einfach -d 2, um mit doppelter Geschwindigkeit zu spielen (beachten Sie, dass dies ein doppelter Wert ist, sodass Sie sogar die -d .5halbe Geschwindigkeit erreichen können!).

scohe001
quelle
Wow interessant! Das Erstaunliche ist, dass dies das Surfen in der Vergangenheit, das Löschen und die Farben ... einwandfrei zu handhaben scheint. Hätte nicht gedacht, dass das möglich ist tail. (Ich denke, es tmuxist in der Praxis immer noch besser, weil es auch kein Problem mit z. B. einer Redaktionssitzung gibt.)
leftaroundabout
Wirklich interessanter Ansatz! Es kann Fenstergröße Änderungen handhaben , während tmuxund screenkann nicht, soweit ich das beurteilen kann.
Jander
@leftaroundabout die Magie hier ist eigentlich nur, wie wenig tailwirklich tut. Wenn man sich eine Skriptdatei mit so etwas wie vimoder lessSie werden sehen , es das Hinzufügen hässlich entkommt , da es versucht , Ihren Bildschirm scrollen und Charakter Platzierung zu steuern.
Scohe001
@leftaroundabout by "editor session" meinst du so etwas wie vim? Soweit ich das
beurteilen
35

Eine elegante Art und Weise zu verwenden ist tmuxfür diese Aufgabe: sudo apt install tmux. Hier ist ein Beispiel:

  • Erstellen Sie eine Sitzung mit dem Namen my_session(entfernen Sie sie -d, um sie während der Erstellung anzuhängen):

    tmux new-session -d -s my_session
    
  • Öffnen Sie ein oder mehrere neue Terminalfenster und stellen Sie eine Verbindung zu derselben Sitzung her:

    tmux attach -t my_session
    
  • So trennen Sie sich von einem Sitzungstyp:

    tmux detach
    

    Oder drücken Sie Ctrl+b , lassen Sie dann los Ctrlund drücken Sie d.

  • So senden Sie einen Befehl an die Sitzung, ohne ihn anzuhängen:

    tmux send-keys -t my_session "Hallo Welt!" EINGEBEN  Enter
  • Beachten Sie exit, dass der von innen ausgeführte Befehl die Sitzung beendet.

pa4080
quelle
27

Kann mir auf keinen Fall direkt vorstellen erreichen, was Sie wollen - vielleicht können es auch andere. Aber ich kann mir einen Workaround vorstellen.

Installieren Sie screenmit sudo apt install screen. Starten Sie zwei Terminals. screenGeben Sie in das erste Feld ein und drücken Sie die Eingabetaste. Im zweiten geben Sie ein screen -x.

Sie zeigen effektiv den gleichen Inhalt. Es ist nicht dasselbe Terminalfenster, aber es wird derselbe Inhalt sein.

Der Bildschirm kann auch weitere Tricks ausführen, z. B. mehrere Fenster, zwischen denen Sie wechseln können. Dies ist eine kurze Einführung in die verfügbaren Funktionen.

vidarlo
quelle
Entschuldigung, ich kann nicht zwei Antworten als die richtige auswählen ...
Jander
1
Das ist völlig in Ordnung :) Ich habe die andere Antwort selbst
abgestimmt
4

Neben der obigen Antwort von pa4080 auf die Verwendung von tmux möchte ich eine erweiterte Version vorschlagen:

Probieren Sie es aus. Es ist auch als Ubuntu-Paket erhältlich. Es kann zwar als tmux-Ersatz verwendet werden, kann aber noch mehr: Ich kann Ihre Terminalsitzung mithilfe eines öffentlichen tmate-Servers replizieren, auf den über ssh oder http (schreibgeschützt oder vollständige Freigabe) zugegriffen werden kann. So können Ihre Schüler entweder Ihre Beamer-Projektion verwenden oder eine schreibgeschützte Ansicht Ihrer Terminalsitzung direkt in ihrem Browser auf ihrem PC / Tablet usw. haben.

pdr
quelle
tmatesieht interessant aus. Hier ist eine einfache Demo: youtube.com/watch?v=is_VpIx3Z4M
pa4080