화면을 사용하지 않고 tty 사이를 전환하는 방법은 무엇입니까?

화면을 사용하지 않고 tty 사이를 전환하는 방법은 무엇입니까?

Linux 설치를 데스크탑까지 부팅한다고 가정합니다. gnome-terminal/konsole/무엇이든 시작하면 명령을 입력할 tty가 있습니다.

이제 SSH를 통해 동일한 시스템에 연결한다고 가정해 보겠습니다. 명령을 입력하기 위해 나를 다른 tty에 바인딩합니다.

이제 내 tty를 원래 SSH 터미널에서 이전에 시작한 gnome 터미널 터미널로 "전환"하고 싶다고 가정해 보겠습니다.

screen -x기본적으로 화면 없이 동일한 작업을 수행할 수 있는 방법이 있는지 묻고 있습니다 .

/dev 파일에 무언가를 에코하면 출력을 다른 tty로 쉽게 보낼 수 있다는 것을 알고 있지만 tty에 무엇이 있는지 "보는" 방법은 모르겠습니다.

어떤 아이디어가 있나요?

답변1

어쩌면 이러한 패턴으로 상황이 명확해질 수도 있습니다. 일반적인 설정은 다음과 같습니다.

                               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다음과 같은 몇 가지 새로운 메소드를 삽입하십시오.

                             Terminal
                              device
                                 |
             (screen)<---o---[<output]--x------(stdout) Process1
  Terminal (keyboard)---/-x--[input >]-o-\---->(stdin)
                       | /              \ \
                       | |               \ `---(stdout) Process2
                       | |                `--->(stdin)
                       | |
                       \ `---------------------(stdout) Process3
                        `--------------------->(stdin)

화면(및 기타)이 수행하는 작업은 일부 의사 터미널 장치(xterm과 같은)를 할당하고 이를 하나 이상의 "실제" 터미널(물리적, 가상 또는 에뮬레이트된)로 리디렉션하는 것입니다.

             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)

xterm을 사용하면 스크린 세션에 screen -x다른 터미널을 연결할 수 있습니다 .Terminal 3

따라서 아니요, 다른 터미널에 연결된 프로세스를 사용하여 stdin/stdout을 통해 직접 통신할 수 없습니다. 해당 터미널이 의사 터미널이고 프로세스가 그렇게 하도록 설계된 경우(화면과 마찬가지로) 해당 터미널의 프로세스를 제어해야만 이 작업을 수행할 수 있습니다.

답변2

더티 트릭 없이는 다른 터미널의 프로세스를 현재 터미널에 다시 연결하는 것이 불가능합니다. 프로세스가 특정 시스템 호출을 수행하도록 강제할 수 있습니다(다음을 사용).ptrace) 이로 인해 일부 프로그램이 중단될 수 있습니다. 이를 수행하는 다양한 도구가 있습니다(예 neercs: retty, cryopid, reptyr, ... 참조).실행 중인 프로세스임을 거부하고 새 화면 셸에 연결하려면 어떻게 해야 합니까?그리고 관련된 문제.

다른 터미널에 이미 표시된 출력을 얻는 것은 다른 문제입니다. 완전히 보편적인 솔루션은 없습니다. 원칙적으로 출력이 렌더링되면 터미널은 이를 이미지로 저장할 수 있습니다. 거의 모든 X 터미널 에뮬레이터는 복사하여 붙여넣을 수 있도록 출력 버퍼를 텍스트 형식으로 유지합니다. 이 출력을 얻는 방법은 터미널 에뮬레이터에 따라 다릅니다. 기본 아이디어는 전체 스크롤백 버퍼 선택을 시뮬레이션하는 것입니다. 예를 들어 Linux 콘솔의 경우 /dev/tty1스크롤백 버퍼를 쉽게 사용할 수 있습니다 /dev/vcs1( /dev/vcsa1텍스트 속성도 있음).

간단한 대답은, 다른 장소에서 터미널에 다시 연결하려면 screen또는 를 사용하는 것입니다 tmux.

관련 정보