화면을 사용하지 않고 tty를 어떻게 전환 할 수 있습니까?


17

Linux 설치를 데스크탑으로 부팅한다고 가정 해 봅시다. gnome-terminal / konsole / what을 시작하면 tty를 입력 할 수 있습니다.

이제 같은 컴퓨터에 SSH라고 가정 해 봅시다. 명령을 입력하기 위해 다른 tty에 바인딩합니다.

이제 tty를 원래의 SSH에서 이전에 시작한 gnome-terminal로 "전환"한다고 가정하겠습니다.

기본적으로 나는 screen -x화면없이 동일한 일을 할 수있는 방법이 있는지 묻고 있습니까?

나는 단순히 / dev 파일에 무언가를 에코하여 다른 tty로 출력을 쉽게 보낼 수 있다는 것을 알고 있지만 tty에 무엇이 있는지 '볼'수있는 방법을 모른다.

어떤 아이디어?



답변:


16

아마도 이러한 스키마는 상황을 명확히 할 수 있습니다. 이것은 일반적인 설정입니다.

                               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)

를 사용 screen -x하면 하나 이상의 터미널 xterm Terminal 3을 화면 세션에 연결할 수 있습니다 .

따라서 다른 터미널에 연결된 프로세스와 stdin / stdout을 통해 직접 통신 할 수 없습니다. 이 터미널이 의사 터미널 일 경우이 터미널을 제어하는 ​​프로세스를 통해서만 수행 할 수 있으며이 프로세스가 그렇게 결정된 경우 (화면과 같이) 수행 할 수 있습니다.


좋은 설명입니다! 나는 이것이 실제로 대답이 아니라고 생각하지만 이 질문에 잘 맞을 것입니다. 한 가지 관찰 :“길이 없다”는 것은 당신이 금지 한 경우에만 사실입니다 ptrace. 덕분에 ptrace, 프로그램이 좋아 neercs, retty그래서에 때때로 그것을 할 수 있습니다.
Gilles 'SO- 악마 그만해'

@Gilles는 : 잘 그들은 다른 뭔가를 할 : 그들은 (파일 디스크립터의 값을 변경 stdin, stdout직접 프로세스를 납치하여 스키마의 오른쪽). 순수 악!
Stéphane Gimenez

1
흠, 맞아, 그들은 다른 화살표를 바꾼다. 사악하지만 편리합니다!
Gilles 'SO- 악마 그만해'

8

더티 트릭없이 다른 터미널의 프로세스를 현재 터미널에 다시 연결할 수 없습니다. 프로세스가 특정 시스템 호출 ( ptrace) 을 수행하도록 강제 할 수 있습니다 . 이로 인해 일부 프로그램이 중단됩니다. 이 작업을 수행하는 여러 가지 도구가 있습니다 같은 neercs, retty, cryopid, reptyr, ...; 실행중인 프로세스를 제거하고 새 화면 셸에 연결하는 방법을 참조하십시오 . 관련 질문.

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.