Forum Astuces.divers [Terminal] rediffuser un terminal en direct

Posté par  (site web personnel) .
Étiquettes : aucune
1
27
mai
2007
Il est quelques fois utile de montrer à quelqu'un via le réseau ce qu'on fait dans un terminal.

Une manière courante de procéder est d'utiliser screen(1). Cependant cela implique de donner un compte local à l'observateur et de configurer screen(1) correctement pour qu'il puisse se connecter à la session sans pour autant pouvoir interagir avec le terminal. Sans compter que screen(1) doit être installé.

Une autre méthode consiste simplement à utiliser script(1) (paquet essentiel bsdutils sous Debian) qui permet de copier tout ce qui se passe dans un terminal vers un fichier. Au lieu d'utiliser un fichier normal il suffit d'utiliser une file FIFO (un tube nommé) dont le contenu sera renvoyé à l'observateur.

En pratique :
pwait$ mkfifo plop
pwait$ nc -l -p 4242 < plop > /dev/null &
[1] 6216
pwait$ script -f plop
Script started, file is plop
pwait$

Et du côté de l'observateur :
coin$ nc pwait 4242
pwait$

À partir de ce moment, tout ce qui est tapé dans le terminal du serveur est aussi affiché sur le terminal du client. Alternativement, du côté client on peut remplacer netcat (nc(1)) par telnet(1) qui a sans doute plus de chance d'être installé.

Cette méthode est cependant limitée car elle ne permet qu'à un seul observateur à la fois de se connecter et lorsque ce dernier se déconnecte, script(1) se termine, interrompant ainsi l'action qui se déroulait sur le serveur. En attendant un patch pour netcat, voici toujours un petit programme qui accepte un nombre arbitraire de clients et leur renvoie son entrée standard.

pwait$ wget -q http://krunch.servebeer.com/~krunch/vrac/sw/tcpmux.c
pwait$ cc -DNDEBUG -Wall -W -pedantic -std=c99 -o tcpmux tcpmux.c
pwait$ ./tcpmux 4242 < plop &
[1] 6380
pwait$ script -f plop
Script started, file is plop
pwait$

Du côté client, on se connecte toujours de la même manière :
coin$ nc pwait 4242
pwait$

Sauf que cette fois, on peut connecter plusieurs clients (voire la macro MAX_CLIENTS de tcpmux.c) et la déconnexion des clients n'interrompt pas script(1).

Merci à dek\ de #gcu pour l'idée du script+mkfifo+nc et à phh de #linuxfr pour le tcp-multiplexer.py original.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.