Powiedzmy, że uruchamiasz instalację Linuksa aż do pulpitu. Uruchamiasz gnome-terminal / konsole / cokolwiek, więc masz tty do wprowadzania poleceń.
Powiedzmy teraz, że przesyłam SSH na tę samą maszynę. Powiąże mnie z innym tty, do którego mogę wprowadzać polecenia.
Powiedzmy teraz, że chcę „przełączyć” mój tty z mojego oryginalnego SSH na terminal gnome, który zaczął się wcześniej.
Zasadniczo pytam, czy jest jakiś sposób, aby zrobić to samo, screen -x
ale bez ekranu?
Wiem, że możesz łatwo wysyłać dane wyjściowe do drugiego tty, po prostu powtarzając coś w pliku / dev, ale nie znam sposobu na „wyświetlenie” tego, co jest w tty.
Jakieś pomysły?
terminal
gnu-screen
terminal-multiplexer
użytkownik488244
źródło
źródło
Odpowiedzi:
Być może ten schemat może wyjaśnić sytuację. To jest zwykłe ustawienie:
I nie ma sposobu, aby podłączyć takie nowe
Process3
:To, co robi ekran (i inne), to przydzielenie jakiegoś pseudo terminala (tak jak robi to Xterm) i przekierowanie go do jednego lub więcej „prawdziwych” terminali (fizycznych, wirtualnych lub emulowanych):
Za pomocą
screen -x
możesz dołączyć jeszcze jeden terminal, xterm, cokolwiek (powiedzmyTerminal 3
) do sesji ekranowej.Więc nie, nie możesz komunikować się bezpośrednio przez stdin / stdout z procesami podłączonymi do innego terminala. Możesz to zrobić tylko poprzez proces kontrolujący ten terminal, jeśli zdarzy się, że jest to pseudo-terminal, i jeśli ten proces został do tego stworzony (tak jak screen).
źródło
ptrace
; dziękiptrace
, programy podobaneercs
,retty
i tak dalej, może to zrobić czasem.stdin
,stdout
po prawej stronie schematu) bezpośrednio przez porwanie proces. Czyste zło!Ponowne podłączenie procesów z drugiego terminala do bieżącego terminala nie jest możliwe bez brudnych sztuczek. Jest to możliwe, zmuszając proces do wykonywania określonych wywołań systemowych (z
ptrace
); powoduje to awarię niektórych programów. Istnieje kilka narzędzi, które to zrobić, takie jakneercs
,retty
,cryopid
,reptyr
, ...; zobacz Jak mogę odrzucić działający proces i powiązać go z nową powłoką ekranu? i powiązane pytania.Innym problemem jest uzyskanie danych wyjściowych wyświetlanych już na drugim terminalu. Nie ma w pełni ogólnego rozwiązania: w zasadzie po renderowaniu danych wyjściowych terminal może przechowywać je tylko jako obraz. W praktyce wszystkie emulatory terminali X przechowują bufor wyjściowy w formie tekstowej, aby można go było skopiować i wkleić. Sposób pobrania tego wyjścia zależy od emulatora terminala; podstawową ideą jest symulacja wyboru całego bufora przewijania. W przypadku konsoli Linux, takiej jak
/dev/tty1
bufor przewijania, jest łatwo dostępny jako/dev/vcs1
(/dev/vcsa1
z atrybutami tekstowymi).Prosta odpowiedź brzmi: jeśli chcesz ponownie połączyć się z terminalem z innego miejsca, użyj
screen
lubtmux
.źródło