J'ai besoin de connecter la sortie du terminal en cours d'exécution (tty1) à partir du terminal virtuel et de la capturer (serveur X en cours d'exécution).
J'ai besoin de connecter la sortie du terminal en cours d'exécution (tty1) à partir du terminal virtuel et de la capturer (serveur X en cours d'exécution).
Réponses:
Je suis tombé sur cet outil appelé ttylog
. C'est un programme Perl disponible sur CPAN ici . Il y a quelques mises en garde, l'une d'entre elles étant que je ne pouvais comprendre que l'attachement à un terminal créé dans le cadre d'une personne ssh'ing dans ma boîte. L'autre étant que vous devez l'exécuter avec des privilèges élevés (c'est-à-dire root ou sudo).
Mais ça marche!
Premièrement SSH dans votre boîte en TERM # 1:
TERM#1% ssh saml@grinchy
Notez le terminal de ce nouveau terminal:
TERM#1% tty
/dev/pts/3
Maintenant, dans un autre terminal (TERM # 2), exécutez cette commande:
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]
Revenons maintenant à TERM n ° 1 et saisissez des éléments, ils apparaîtront dans TERM n ° 2.
Toutes les commandes que j'ai essayées, (top, ls, etc.) ont fonctionné sans incident ttylog
.
gdb
c’était la première option que j’ai trouvée, je l’avais moi-même utilisée par le passé, mais c’est un hacky, du moins pour moi. Heureux que cela vous a aidé!
En effet, ça l'est. Les périphériques / dev / vcs * et / dev / vcsa * correspondent aux périphériques / dev / tty * (les terminaux virtuels). F1 = tty1 = vcs1 / vcsa1 et ainsi de suite. Le vcs / vcsa est comme tty pour le terminal virtuel "actuel".
En tant que root, vous pouvez simplement chatter ces périphériques (par exemple, cat / dev / vcs2) et voir ce qui se trouve sur le VT correspondant (par exemple, / dev / tty2 le sur F2) comme si vous preniez un instantané. vcsa * diffère de vcs * en ce sens qu’il inclut des informations sur les dimensions du terminal (l’écran). Remarquez, il ne s'agit que d'un instantané brut des caractères tels qu'ils apparaissent à l'écran - recueillis à partir de la mémoire allouée au terminal - ne vous attendez donc pas à une sortie agréable, facile à analyser.
L'inconvénient est que, si les informations défilent trop rapidement, elles peuvent être difficiles à capturer. Peut-être que tail -f / dev / vcs1 fonctionnera, si vous devez suivre plusieurs écrans (je n'ai pas essayé moi-même)? Il peut être plus simple de le rediriger vers un fichier en premier. Il peut également être judicieux d’utiliser un VT (F1-F6), car les terminaux auront les mêmes dimensions. D'après mon expérience, il est préférable d'utiliser les périphériques vcs *, et non vcsa *.
Si cela ne fonctionne pas, peut-être qu'un des paquets "big brotherish" permettant à un administrateur de surveiller l'activité sur un terminal peut fonctionner.
PS: J'ai oublié de demander quel système d'exploitation vous utilisez. Ceci est pour Linux, bien que des périphériques similaires existent probablement sur d'autres systèmes d'exploitation. Essayez de rechercher "mémoire de console virtuelle" parmi les pages de manuel des périphériques.
wlan0
, j'ai une situation de piège qui tente de déboguer où ce script échoue. Supposons que je ne puisse pas utiliser de hub USB ... est-il possible pour moi de rediffuser des caractères dans / dev / tty1?
/dev/tty1
tant que root, mais tout ce que cela fait est d'afficher les caractères à l'écran, pas les entrer
Utilisez la tty
commande dans chaque terminal pour les identifier:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
En supposant que ces TTY, pour rediriger la sortie standard du premier vers le second, exécutez ceci dans le premier terminal:
exec 1>/dev/pts/1
Note: Maintenant, chaque sortie de commande sera affichée en pts / 1
Pour restaurer le comportement par défaut de la sortie standard de pts / 0:
exec 1>/dev/pts/0
Voir cette vidéo pour une démonstration.
Cela a fonctionné pour moi:
En utilisant un clavier sur l’ordinateur "A" (c’est-à-dire l’ordinateur physique à contrôler), exécutez: screen -q
Connectez-vous ssh
de l'ordinateur "B" à l'ordinateur "A".
Dans la session ssh, tapez: screen -ls
pour obtenir un identifiant de session auquel vous connecter (4 chiffres sur la ligne contenant tty ).
Connectez-vous à la session ci-dessus avec: screen -x <session id>
... en utilisant le numéro d’identifiant de session reçu de la screen -ls
commande ci-dessus.
Tout ce qui est tapé dans l'une ou l'autre des "sessions" se produira dans les deux "sessions", ainsi, par exemple, la frappe screen -d
tapera les DEUX sessions.
Une autre approche consiste à utiliser l' screen
utilitaire gnu sur votre ordinateur local. Invoquez-le avec l' -L
option ou démarrez sans cette option et utilisez la ^aH
séquence de commandes. Quelle que soit l'approche choisie, toutes les entrées et sorties sont consignées dans un fichier nommé screenlog.x
où x est le numéro d'écran.
C’est pratique car il n’ya rien d’extraordinaire à installer sur la machine distante.
Puisque je n'ai pas commencé tty1 avec screen, ce script m'a aidé:
J'ai utilisé la réponse de Baard Kopperud ci-dessus. "128" est 1 ligne de mon tty1. Le sommeil peut être réglé sur un nombre approprié.
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
Je l'ai utilisé dans Terminator et dimensionné la colonne de sorte que le défilement est une ligne de texte.
Ouvrez deux terminaux. Tapez tty
dans chacun et vous obtiendrez son id comme/dev/pts/nº
Ensuite, dans le premier, vous tapez script -f /dev/pts/nºofSecondTerminal
et dans le second, vous faites le contraire script -f /dev/pts/nºofFirstTerminal
pour qu'ils soient liés
Félicitations! Les deux terminaux émettent et reçoivent les mêmes choses. Besoin d'un tiers? Eh bien, avez-vous étudié les combinaisons? Vous aurez besoin de 6 script -f
commandes. Encore plus tty? Bientôt...
screen
outmux
avant de lancer une commande à laquelle vous voudrez peut-être accéder depuis un autre terminal. .