다른 터미널에서 명령을 표시하는 방법은 무엇입니까?

다른 터미널에서 명령을 표시하는 방법은 무엇입니까?

화면이있는 라즈베리 파이가 있습니다. 로그인 프롬프트로 시작됩니다. 키보드와 마우스가 연결되어 있지 않으며 그대로 유지하고 싶습니다. 네트워크에서 ssh를 통해 계속 로그인하지만 ssh를 통해 입력한 명령과 해당 출력을 추가 화면에서 보고 싶습니다. 가능합니까?

답변1

입력과 출력을 리디렉션하는 것과 관련된 보다 "직접적인" 솔루션이 존재하는지 확실하지 않지만화면. 아이디어는 모든 작업을 하나의 세션에서 수행 screen하고 해당 세션에 두 번 연결하는 것입니다. 한 번은 작동 중인 SSH 터미널에서, 한 번은 연결된 디스플레이에서 연결합니다.

먼저, 연결된 모니터의 단말기 이름을 알아야 합니다. 테스트할 rPI는 없지만 직접 연결된 화면이 일반 Linux 비디오 콘솔에 매핑되어 있다고 가정하므로 아마도 /dev/tty1.

  1. screen설치되어 있는지 확인하세요
  2. SSH를 사용하여 로그인
  3. 새 화면 세션 만들기

    screen
    
  4. 다른 터미널에서 동일한 스크린 세션에 연결합니다.

    이것이 작동하는 방식은 로컬 키보드를 사용하여 로그인하고 입력하는 것입니다 screen -r -x( -r재개 세션 및 -x기존 세션에 대한 다중 연결의 경우). 그러나 이 경우 실제로 작업 중인 터미널에 로그인되지 않습니다. 이 세션에 연결하려고 합니다. 따라서 입력과 출력을 의도한 터미널로 리디렉션하여 이것이 우리가 연결하려는 터미널임을 화면에 "확신"시킵니다. 이것은 해키지만 나에게 효과적입니다.

    screen -r -x </dev/tty1 >/dev/tty1 2>&1 & disown
    

rPI 비디오 콘솔의 터미널 이름이 다른 경우 키보드를 한 번 연결하고 로컬로 로그인한 후 프롬프트에 입력하면 /dev/tty1그것이 무엇인지 알 수 있습니다 .tty

답변2

흥미롭게도 나 역시 Celada의 솔루션을 생각 screen -x하거나 tmux attach좋아했지만 init( /etc/inittab또는 /etc/init또는 /etc/systemd) 또는가정 교사시작 시 getty-on-screen 세션을 자동으로 시작합니다.

감독자의 직무 구성:

[program:screen]
command=bash -c 'chvt 9 && TERM=linux exec screen getty tty </dev/tty9 >/dev/tty9 2>&1'
autostart=true
autorestart=true

/dev/tty9로그인 프롬프트를 표시하기 위해 자동으로 getty를 실행하는 화면 으로 전환 하고 시작합니다. 다른 SSH 세션에서는 실행하여 sudo screen -x이 콘솔 세션에 연결한 다음 Ctrl+를 입력하여 AD세션에서 분리할 수 있습니다.

Screen 세션은 루트로 실행되므로 연결하려면 루트 권한이 필요합니다. screen의 다중 사용자 모드를 활성화하고 싶을 수도 있지만 setuid가 필요하므로 /usr/bin/screen일부 보안 문제가 발생합니다. 찾다화면 매뉴얼더 알아보기.

답변3

xterm설치된 경우 터미널 UTF-8 응용 프로그램이 pi포함되어 있어야 합니다 luit. 이는 UTF-8을 지원하지 않는 다른 유형의 터미널 응용 프로그램을 번역하는 데 자주 사용되는 작은 프로그램입니다. luit의사 터미널을 할당하여 작동합니다. 거의 같은 방식 screen이지만 오버헤드가 훨씬 적습니다.

luit쉽게 할 수 있는 한 가지는 입력을 복사하는 것입니다.(또는 출력 - 다를 수 있음)지정된 파일에 도달했을 때. luit하지만(터미널로주인) 입력하다모든 터미널 세션의 출력을 나타냅니다.(자체 stty echo출력을 포함할 수도 있음)그리고산출이는 터미널 세션의 모든 출력이 처리된 후 모든 것을 터미널 장치에 기록한다는 의미입니다. 복사하는 동안에도 이 작업이 수행됩니다.그것은표준 입력(터미널에서 나와야 합니다. 즉, 키보드를 의미합니다.)쉘과 같이 랩핑된 프로그램에 대한 입력입니다. 나도 알아요 - pty i/o는 약간 이상할 수도 있지만 요점은 터미널 세션의 출력을 실시간으로 여러 디스플레이 장치에 복사하는 편리한 방법을 제공할 수 있다는 것입니다.

예를 들어:

ssh me@machine -t 'luit -olog /dev/tty2 sh'

방금 달렸어(원래)Xvt2로 전환한 후 내 Android 태블릿 터미널에서 위 명령을 실행합니다.Ctrl+Alt+F2데스크탑 컴퓨터에 새로운 프롬프트가 나타납니다 login. Android 터미널에서 일반적인 방식으로 비밀번호를 묻는 메시지를 표시하고 태블릿의 셸로 이동합니다.그리고내 태블릿 터미널에 모든 것을 쓰세요(프롬프트, 내 입력 cat file등)내 데스크탑 화면에도 나타납니다. 내가 입력하는 모든 키(혹은 만지거나 뭐든지)태블릿의 콘텐츠가 데스크탑 vt2에 즉시 반영됩니다.

tty산란 프로세스가 작동하는 경우 이것이 작동하려면(보통 a getty또는 유사)귀하의 사용자 계정이 기본적으로 충족하지 못하는 특정 권한 수준을 가진 최종 장치를 생성하면 이를 변경해야 합니다. 다음과 같이 간단할 수 있습니다.

chown me /dev/tty[num]

……당신이 원한다면. 내 시스템에서 내 사용자 계정은 이 그룹의 구성원이므로 tty이는 문제가 되지 않습니다. 나는 대부분의 Linux 배포판에서 사용자 계정을 tty그룹에 넣는 것만으로도 충분하다고 생각합니다.

ls -l /dev/tty2
crw--w---- 1 root tty 4, 2 Jun 14 05:14 /dev/tty2 

...보시다시피 루트가 소유하지만 그룹에 할당된 장치 파일입니다 tty.

어쨌든 위의 luit명령을 실행하는 것이 필요할 수 있습니다. 더 복잡하고 아마도 이상적인 솔루션이 있을 수 있지만 screen원하는 tmux것이바라보다다른 장치에 출력이 있는 경우 일반적으로 해당 장치에 쓰기만 하면 됩니다.

관련 정보