Supposons donc que vous démarriez votre installation Linux jusqu'au bureau. Vous démarrez un gnome-terminal / konsole / n'importe quoi donc vous avez un tty pour entrer des commandes.
Maintenant, disons que je SSH dans cette même machine. Il me liera à un autre terminal pour entrer des commandes.
Supposons maintenant que je veuille "commuter" mon tty de mon SSH d'origine à celui de gnome-terminal commencé plus tôt.
Fondamentalement, je demande s'il existe un moyen de faire la même chose screen -x
mais sans écran?
Je sais que vous pouvez facilement envoyer la sortie à l'autre tty simplement en faisant écho à quelque chose dans le fichier / dev, mais je ne connais pas un moyen de «voir» ce qui est dans le tty.
Des idées?
terminal
gnu-screen
terminal-multiplexer
user488244
la source
la source
Réponses:
Peut-être que ce schéma peut clarifier la situation. C'est le réglage habituel:
Et il n'y a aucun moyen d'en brancher de nouveaux
Process3
comme celui-ci:Ce que fait l'écran (et d'autres), c'est d'allouer un pseudo-terminal (comme le fait xterm) et de le rediriger vers un ou plusieurs terminaux "réels" (physiques, virtuels ou émulés):
En utilisant,
screen -x
vous pouvez attacher un terminal supplémentaire, xterm, quel que soit (par exempleTerminal 3
) à la session d'écran.Donc non, vous ne pouvez pas communiquer directement via stdin / stdout avec des processus attachés à un autre terminal. Vous ne pouvez le faire via le processus contrôlant ce terminal que s'il s'agit d'un pseudo-terminal, et si ce processus a été conçu pour le faire (comme l'écran l'est).
la source
ptrace
; grâce àptrace
, des programmes commeneercs
,retty
et ainsi de suite peuvent le faire parfois.stdin
,stdout
à droite du schéma) en détournant le processus. Mal absolu!Reconnecter les processus de l'autre terminal à votre terminal actuel n'est pas possible sans trucs sales. Cela est possible en forçant le processus à effectuer certains appels système (avec
ptrace
); cela provoque le blocage de certains programmes. Il existe plusieurs outils qui font cela, commeneercs
,retty
,cryopid
,reptyr
, ...; voir Comment puis-je supprimer un processus en cours et l'associer à un nouveau shell d'écran? et questions liées.L'obtention de la sortie déjà affichée sur l'autre terminal est un problème différent. Il n'y a pas de solution entièrement générale: en principe, une fois la sortie rendue, le terminal ne peut la stocker que sous forme d'image. En pratique, tous les émulateurs de terminaux X conservent leur tampon de sortie sous forme de texte afin que vous puissiez le copier-coller. La façon de récupérer cette sortie dépend de l'émulateur de terminal; l'idée de base est de simuler la sélection de la totalité du tampon de défilement. Pour une console Linux telle que
/dev/tty1
, le tampon de défilement est facilement disponible en tant que/dev/vcs1
(et/dev/vcsa1
avec des attributs de texte).La réponse simple est que si vous souhaitez vous reconnecter à un terminal depuis un autre endroit, utilisez
screen
outmux
.la source