Jadi katakanlah Anda mem-boot instalasi Linux sampai ke desktop. Anda memulai gnome-terminal / konsole / apa pun sehingga Anda memiliki tty untuk memasukkan perintah.
Sekarang katakanlah saya SSH ke mesin yang sama. Ini akan mengikat saya ke tty lain untuk memasukkan perintah.
Sekarang katakanlah saya ingin "mengalihkan" tty saya dari SSH asli saya ke terminal gnome yang dimulai sebelumnya.
Pada dasarnya saya bertanya apakah ada cara untuk melakukan hal yang sama screen -x
tetapi tanpa layar?
Saya tahu Anda dapat dengan mudah mengirim output ke tty lain hanya dengan menggemakan sesuatu ke file / dev, tapi saya tidak tahu cara untuk 'melihat' apa yang ada di tty.
Ada ide?
terminal
gnu-screen
terminal-multiplexer
pengguna488244
sumber
sumber
Jawaban:
Mungkin skema ini dapat mengklarifikasi situasinya. Ini adalah pengaturan yang biasa:
Dan tidak ada cara untuk plug baru
Process3
seperti ini:Apa yang dilakukan layar (dan lainnya) adalah mengalokasikan beberapa perangkat terminal semu (seperti halnya xterm) dan mengarahkannya ke satu atau lebih terminal "nyata" (fisik, virtual, atau ditiru):
Menggunakan
screen -x
Anda dapat melampirkan satu terminal lagi, xterm, apa pun (katakanlahTerminal 3
) ke sesi layar.Jadi tidak, Anda tidak dapat berkomunikasi langsung melalui stdin / stdout dengan proses yang dilampirkan ke terminal yang berbeda. Anda hanya dapat melakukannya melalui proses yang mengendalikan terminal ini jika kebetulan itu adalah terminal semu, dan jika proses ini disetujui untuk melakukannya (seperti layar).
sumber
ptrace
; terima kasih kepadaptrace
, program sukaneercs
,retty
dan sebagainya bisa melakukannya kadang-kadang.stdin
,stdout
di sebelah kanan skema) secara langsung dengan membajak proses. Kejahatan murni!Menghubungkan kembali proses di terminal lain ke terminal Anda saat ini tidak dimungkinkan tanpa trik kotor. Dimungkinkan dengan memaksa proses untuk melakukan panggilan sistem tertentu (dengan
ptrace
); ini menyebabkan beberapa program macet. Ada beberapa alat yang melakukan hal ini, sepertineercs
,retty
,cryopid
,reptyr
, ...; lihat Bagaimana saya bisa menolaknya proses yang sedang berjalan dan menghubungkannya dengan shell layar baru? dan pertanyaan terkait.Memperoleh output yang sudah ditampilkan di terminal lain adalah masalah yang berbeda. Tidak ada solusi yang sepenuhnya umum: pada prinsipnya, setelah output telah diberikan, terminal mungkin menyimpannya hanya sebagai gambar. Dalam praktiknya, semua emulator terminal X menyimpan buffer output dalam bentuk teks sehingga Anda dapat menyalin-menempelnya. Cara untuk mengambil output tergantung pada emulator terminal; ide dasarnya adalah mensimulasikan pemilihan seluruh buffer scrollback. Untuk konsol Linux seperti
/dev/tty1
, buffer scrollback mudah tersedia sebagai/dev/vcs1
(dan/dev/vcsa1
dengan atribut teks).Jawaban sederhananya adalah jika Anda ingin menghubungkan kembali ke terminal dari tempat yang berbeda, gunakan
screen
atautmux
.sumber