Ich muss die Ausgabe des aktuell laufenden Terminals (tty1) vom virtuellen Terminal aus einbinden und erfassen (laufender X-Server).
Ich muss die Ausgabe des aktuell laufenden Terminals (tty1) vom virtuellen Terminal aus einbinden und erfassen (laufender X-Server).
Antworten:
Ich bin auf dieses Tool namens gestoßen ttylog
. Es ist ein Perl-Programm, das auf CPAN hier verfügbar ist . Es hat ein paar Vorbehalte, einer davon ist, dass ich nur herausfinden konnte, wie ich an ein Terminal anschliessen soll, das als Teil von jemandem erstellt wurde, der sich in meine Box schiebt. Das andere ist, dass Sie es mit erhöhten Rechten ausführen müssen (zB root oder sudo).
Aber es funktioniert!
Erste ssh in Ihre Box in TERM # 1:
TERM#1% ssh saml@grinchy
Beachten Sie die tty dieses neuen Terminals:
TERM#1% tty
/dev/pts/3
Führen Sie nun in einem anderen Terminal (TERM # 2) diesen Befehl aus:
TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]
Kehren Sie nun zu TERM # 1 zurück und geben Sie Zeug ein. Es wird in TERM # 2 angezeigt.
Alle Befehle, die ich ausprobiert habe (top, ls usw.), funktionierten ohne Zwischenfälle ttylog
.
gdb
war die erste Option, auf die ich gestoßen bin. Ich habe sie in der Vergangenheit selbst verwendet, aber für mich ist sie zumindest verrückt. Ich bin froh, dass dir das geholfen hat!
Tatsächlich ist es. Die Geräte / dev / vcs * und / dev / vcsa * entsprechen den Geräten / dev / tty * (den virtuellen Terminals). F1 = tty1 = vcs1 / vcsa1 und so weiter. Das vcs / vcsa entspricht tty für das "aktuelle" virtuelle Terminal.
Als Root können Sie diese Geräte einfach katzen (z. B. cat / dev / vcs2) und sehen, was sich auf der entsprechenden VT befindet (z. B. / dev / tty2, das an auf F2), wie ein Schnappschuss. vcsa * unterscheidet sich von vcs * darin, dass sie Informationen zu den Abmessungen des Terminals (des Bildschirms) enthalten. Wohlgemerkt, es handelt sich nur um eine Momentaufnahme der Charaktere, die auf dem Bildschirm angezeigt werden. Diese stammen aus dem dem Terminal zugewiesenen Speicher. Erwarten Sie also keine netten, leicht zu verarbeitenden Ausgaben.
Der Nachteil ist, dass die Erfassung möglicherweise schwierig ist, wenn die Informationen zu schnell vergehen. Vielleicht funktioniert Tail -f / dev / vcs1, wenn Sie mehreren Screenfulls folgen müssen (haben mich nicht ausprobiert)? Es kann am einfachsten sein, es zuerst in eine Datei umzuleiten. Es kann auch sinnvoll sein, einen Spannungswandler (F1-F6) zu verwenden, da die Klemmen die gleichen Abmessungen haben. Nach meiner Erfahrung ist es am besten, die vcs * - und nicht die vcsa * - Geräte zu verwenden.
Wenn dies nicht funktioniert, funktioniert möglicherweise eines der "großen Brüderchen" -Pakete, mit denen ein Administrator die Aktivität auf einem Terminal im Auge behalten kann.
PS: Ich habe vergessen zu fragen, welches Betriebssystem Sie verwenden. Dies gilt für Linux, obwohl ähnliche Geräte wahrscheinlich auch auf anderen Betriebssystemen vorhanden sind. Versuchen Sie, in den Manpages für Geräte nach "Virtual Console Memory" zu suchen.
wlan0
, habe ich tatsächlich eine Catch-22-Situation, in der versucht wird, ein Debugging durchzuführen, bei dem dieses Skript fehlschlägt. Angenommen, ich kann keinen USB-Hub verwenden. Gibt es eine Möglichkeit, Zeichen in / dev / tty1 zu leiten?
/dev/tty1
als root weiterleiten, aber das alles ist, die Zeichen auf dem Bildschirm anzuzeigen, nicht sie einzugeben
Verwenden Sie den tty
Befehl in jedem Terminal, um sie zu identifizieren:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Unter der Annahme, dass diese TTYs die Standardausgabe der ersten auf die zweite umleiten, führen Sie diese im ersten Terminal aus:
exec 1>/dev/pts/1
Hinweis: Jetzt wird jede Befehlsausgabe auf pts / 1 angezeigt
So stellen Sie das Standardverhalten stdout von pts / 0 wieder her:
exec 1>/dev/pts/0
In diesem Video sehen Sie eine Demonstration.
Das hat bei mir funktioniert:
Führen Sie unter Verwendung einer Tastatur auf Computer "A" (dh dem physischen Computer, der gesteuert werden soll) Folgendes aus: screen -q
Stellen Sie eine Verbindung ssh
von Computer "B" zu Computer "A" her.
Geben Sie in der SSH-Sitzung Folgendes ein:, screen -ls
um eine Sitzungs-ID zu erhalten, mit der eine Verbindung hergestellt werden soll (4 Ziffern in der Zeile, die tty enthält ).
Stellen Sie eine Verbindung zur obigen Sitzung her, screen -x <session id>
indem Sie : ... die Sitzungs-ID verwenden, die Sie vom screen -ls
obigen Befehl erhalten haben.
Alles, was in einer "Sitzung" eingegeben wird, passiert in beiden "Sitzungen". screen -d
Wenn Sie also zum Beispiel tippen, werden BEIDE Sitzungen beendet.
Ein weiterer Ansatz ist die Verwendung des Gnu- screen
Dienstprogramms auf Ihrem lokalen Computer. Rufen Sie es mit der -L
Option auf oder starten Sie es ohne diese Option und verwenden Sie die ^aH
Befehlssequenz. Bei beiden Vorgehensweisen werden alle Ein- und Ausgaben in einer Datei mit dem Namen protokolliert, screenlog.x
wobei x die Bildschirmnummer ist.
Dies ist praktisch, da auf dem Remotecomputer nichts zusätzliches installiert werden muss.
Da ich tty1 nicht mit screen gestartet habe, hat dieses Skript geholfen:
Ich habe die Antwort von Baard Kopperud oben verwendet. "128" ist 1 Zeile meines tty1. Der Ruhezustand kann auf eine geeignete Anzahl eingestellt werden.
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
Ich habe dies im Terminator verwendet und die Spalte so bemessen, dass die Schriftrolle eine Textzeile enthält.
Öffnen Sie zwei Terminals. Geben Sie tty
jeweils ein und Sie erhalten die ID als/dev/pts/nº
Dann tippst du in der ersten script -f /dev/pts/nºofSecondTerminal
und in der zweiten das Gegenteil, script -f /dev/pts/nºofFirstTerminal
damit sie verbunden werden
Glückwunsch! Beide Terminals geben das gleiche Material aus und empfangen es. Benötigen Sie einen dritten? Hast du Kombinationen studiert? Sie benötigen 6 script -f
Befehle. Noch mehr? Bald...
screen
odertmux
vor dem Starten eines Befehls, auf den Sie möglicherweise von einem anderen Terminal aus zugreifen möchten .