Devo collegarmi all'output del terminale attualmente in esecuzione (tty1) dal terminale virtuale e catturarlo (eseguendo il server X).
Devo collegarmi all'output del terminale attualmente in esecuzione (tty1) dal terminale virtuale e catturarlo (eseguendo il server X).
Risposte:
Mi sono imbattuto in questo strumento chiamato ttylog
. È un programma Perl disponibile su CPAN qui . Ha un paio di avvertimenti, uno dei quali è che ho potuto solo capire come collegarmi a un terminale che è stato creato come parte di qualcuno che sta lanciando nella mia scatola. L'altro è che devi eseguirlo con privilegi elevati (cioè root o sudo).
Ma funziona!
Primo ssh nella tua scatola in TERM # 1:
TERM#1% ssh saml@grinchy
Nota questo nuovo terminale tty:
TERM#1% tty
/dev/pts/3
Ora in un altro terminale (TERM # 2) eseguire questo comando:
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]
Ora torna a TERM # 1 e digita roba, verrà visualizzata in TERM # 2.
Tutti i comandi che ho provato, (top, ls, ecc.) Hanno funzionato senza incidenti usando ttylog
.
gdb
stata la prima opzione che mi sono imbattuto, l'ho usato da solo in passato, ma è un po 'confuso, almeno per me. Sono contento che questo ti abbia aiutato!
Certo che lo è. I dispositivi / dev / vcs * e / dev / vcsa * corrispondono ai dispositivi / dev / tty * (i terminali virtuali). F1 = tty1 = vcs1 / vcsa1 e così via. Il vcs / vcsa è come tty per il terminale virtuale "corrente".
Come root, puoi semplicemente cat questi dispositivi (ad esempio cat / dev / vcs2) e vedere cosa c'è sul VT corrispondente (ad esempio / dev / tty2 on su F2) come scattare un'istantanea. vcsa * differisce da vcs * in quanto include informazioni sulle dimensioni del terminale (lo schermo). Intendiamoci, è solo un'istantanea grezza dei personaggi che vengono visualizzati sullo schermo - raccolti dalla memoria allocata al terminale - quindi non aspettatevi un output piacevole e facilmente analizzabile.
Lo svantaggio è che se le informazioni passano troppo velocemente, potrebbe essere difficile catturarle. Forse tail -f / dev / vcs1 funzionerà, se hai bisogno di seguire diversi screenfulls (non ho provato me stesso)? Potrebbe essere più semplice reindirizzarlo prima su un file. Potrebbe anche essere una buona idea usare un VT (F1-F6) per guardarlo, poiché i terminali avranno le stesse dimensioni. Nella mia esperienza, è meglio usare i dispositivi vcs * - non vcsa * -.
Se ciò non funziona, forse potrebbe funzionare uno dei pacchetti "big brotherish" che consente all'amministratore di tenere d'occhio l'attività su un terminale.
PS: ho dimenticato di chiedere quale sistema operativo usi. Questo è per Linux, sebbene dispositivi simili probabilmente esistano anche su altri sistemi operativi. Prova a cercare "memoria della console virtuale" tra le pagine man dei dispositivi.
wlan0
, in realtà ho una situazione catch-22 che prova a eseguire il debug in cui questo script non riesce. Supponiamo che non riesca a usare un hub USB ... c'è un modo per me inoltrare i caratteri in / dev / tty1 in qualche modo?
/dev/tty1
come root ma tutto ciò che fa è visualizzare i personaggi sullo schermo, non inserirli
Utilizzare il tty
comando in ciascun terminale per identificarli:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Supponendo che questi TTY, per reindirizzare il primo stdout al secondo, eseguirlo nel primo terminale:
exec 1>/dev/pts/1
Nota: ora ogni output di comando verrà mostrato su pts / 1
Per ripristinare il comportamento predefinito stdout di pts / 0:
exec 1>/dev/pts/0
Guarda questo video per una dimostrazione.
Questo ha funzionato per me:
Utilizzando una tastiera sul computer "A" (ovvero il computer fisico da controllare), eseguire: screen -q
Connettiti con ssh
dal computer "B" al computer "A".
Nella sessione ssh, digitare: screen -ls
per ottenere un ID sessione a cui connettersi (4 cifre sulla riga che contiene tty ).
Connettiti alla sessione precedente con: screen -x <session id>
... usando il numero ID della sessione ricevuto dal screen -ls
comando sopra.
Tutto ciò che viene digitato in entrambe le "sessioni" accadrà in entrambe le "sessioni", quindi ad esempio digitando screen -d
usciranno entrambe le sessioni.
Un altro approccio è quello di utilizzare l' screen
utilità gnu sul tuo computer locale. Richiamalo con l' -L
opzione o avvia senza quell'opzione e usa la ^aH
sequenza di comandi. Entrambi gli approcci fanno sì che tutti gli input e output vengano registrati in un file chiamato screenlog.x
dove x è il numero dello schermo.
Questo è utile perché non è necessario installare nulla in più sul computer remoto.
Da quando non ho iniziato tty1 con lo schermo questo script mi ha aiutato:
Ho usato la risposta di Baard Kopperud sopra. "128" è 1 riga del mio tty1. Il sonno può essere impostato su un numero appropriato.
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
Ho usato questo in terminatore e dimensionato la colonna in modo che lo scorrimento sia una riga di testo.
Apri due terminali. Digita tty
ciascuno e otterrai il suo ID come/dev/pts/nº
Quindi nel primo si digita script -f /dev/pts/nºofSecondTerminal
e nel secondo si fa il contrario in script -f /dev/pts/nºofFirstTerminal
modo che vengano collegati
Congratulazioni! Entrambi i terminali trasmettono e ricevono le stesse cose. Ti serve un terzo? Bene, hai studiato le combinazioni? Avrai bisogno di 6 script -f
comandi. Ancora più tty? Presto...
screen
otmux
prima di avviare un comando a cui potresti voler accedere da un altro terminale .