したがって、デスクトップに至るまでLinuxインストールを起動するとします。 gnome-terminal/konsole/whateverを起動して、コマンドを入力するttyを用意します。
次に、同じマシンにSSH接続するとします。コマンドを入力する別のttyにバインドします。
ここで、ttyを元のSSHから、以前に開始したgnome-terminalに「切り替え」たいとしましょう。
基本的に私は同じことをする方法があるかどうか尋ねていますscreen -x
しますが、画面はありませんか?
/ devファイルに何かをエコーするだけで、他のttyに出力を簡単に送信できることはわかっていますが、ttyの内容を「表示」する方法はわかりません。
何か案は?
多分これらのスキーマは状況を明らかにすることができます。これは通常の設定です:
Terminal (/dev/ttyX or /dev/pts/x) device | (screen)<--[<output]----x-------(stdout) Process1 Terminal (keyboard)---[input >]---o-\----->(stdin) \ \ (hardware console or \ `----(stdout) Process2 virtual console or terminal `---->(stdin) emulators like xterm, …)
そして、次のような新しいProcess3
をプラグインするno方法があります。
Terminal device | (screen)<---o---[<output]--x------(stdout) Process1 Terminal (keyboard)---/-x--[input >]-o-\---->(stdin) | / \ \ | | \ `---(stdout) Process2 | | `--->(stdin) | | \ `---------------------(stdout) Process3 `--------------------->(stdin)
画面(および他の画面)が実行するのは、(xtermが実行するように)疑似端末デバイスを割り当て、それを1つ以上の「実際の」端末(物理、仮想、またはエミュレート)にリダイレクトすることです。
Terminal pseudo devices ,--> Terminal (/dev/pts/x) | _______/ device Terminal <--[<output]--- | | | 1 ---[input >]--> |screen | <--[<output]---x-----(stdout) Process1 |Process| ---[input >]--o-\--->(stdin) Terminal <--[<output]--- | | \ \ 2 ---[input >]--> |_______| \ `--(stdout) Process2 `-->(stdin)
screen -x
を使用すると、xtermなどの端末をスクリーンセッションに接続できます(Terminal 3
など)。
そのため、違う端末に接続されているプロセスとstdin/stdoutを介して直接通信することはできません。それがたまたま疑似端末であり、かつこのプロセスがそうするように意図されている場合(画面がそうであるように)、この端末を制御しているプロセスを通じてのみそれを行うことができます。
他のターミナルのプロセスを現在のターミナルに再接続することは、ダーティトリックなしでは不可能です。プロセスに特定のシステムコールを実行するように強制することで可能です( ptrace
を使用)。これにより、一部のプログラムがクラッシュします。これを行うツールはいくつかあります。たとえば、neercs
、retty
、cryopid
、reptyr
、…;参照 どのようにして実行中のプロセスを否認し、それを新しい画面シェルに関連付けることができますか? およびリンクされた質問。
他の端末にすでに表示されている出力を取得することは、別の問題です。完全に一般的な解決策はありません。原則として、出力がレンダリングされると、端末はそれを画像としてのみ保存する可能性があります。実際には、すべてのX端末エミュレーターは出力バッファーをテキスト形式で保持するため、コピーして貼り付けることができます。その出力を取得する方法は、ターミナルエミュレータによって異なります。基本的な考え方は、スクロールバックバッファ全体の選択をシミュレートすることです。 /dev/tty1
などのLinuxコンソールの場合、スクロールバックバッファは/dev/vcs1
(および/dev/vcsa1
with text attributes)として簡単に利用できます。
簡単な答えは、別の場所から端末に再接続する場合は、screen
またはtmux
を使用することです。