다른 tty에서 프로세스 시작


31

한 시간 정도 인터넷 검색을 한 후에 아무도 전에이 질문을 한 사람이 아무도 없다고 믿을 수 없습니다 ...

그래서 TTY1에서 실행중인 스크립트가 있습니다. 해당 스크립트를 TTY2에서 임의의 프로그램으로 시작하려면 어떻게해야합니까?

  • 나는 tty현재 어떤 TTY를 사용하고 있는지 알려줍니다.
  • 나는 writevt한 줄의 텍스트를 다른 TTY에 씁니다.
  • 내가 발견 chvtTTY 현재 표시되는 변화하는.

TTY2 를 표시 하고 싶지 않습니다 . 주 스크립트가 정상적으로 계속 실행되기를 원하지만 수동으로 TTY2로 전환하면 두 번째 프로그램과 상호 작용할 수 있습니다.


TTY1에서 시도 했습니까 [command] > /dev/tty2(이미 tty2에 로그인해야 함)?
Pandya

1
이것은 XY 문제 일 수 있습니다 ... 무엇을 달성하려고합니까? 전반적인 목표는 무엇입니까?
Olivier Dulac

답변:


32
setsid sh -c 'exec command <> /dev/tty2 >&0 2>&1'

다른 TTY ( /dev/tty2이 예에서는)를 사용하는 것이 없으면 작동합니다. 여기에는 getty누군가 로그인을 기다리는 프로세스가 포함됩니다 . 터미날로부터 입력을 읽고 하나 개 이상의 프로세스를 갖는 것이다 예상치 못한 결과가 발생할.

setsid 새 세션에서 명령을 시작합니다.

참고 command 설정에 알아서해야합니다 stty예를 들어, 올바르게 설정 "요리 모드"를 켜고 onlcr그래서 줄 바꿈을 출력하는 캐리지 리턴 등을 추가 할 것


2
맞지 않습니다. 당신과 제어 터미널을 혼합 /dev/stdin, /dev/stdout/dev/stderr. 귀하의 경우에는 제어 터미널이 전혀 없음을 ps쉽게 보여줍니다 command.
Hauke ​​Laging

1
세션 리더 인 @HaukeLaging은 터미널을 열 자마자 제어 할 수 있습니다. 문제는 세션 리더가 터미널 장치를 열지 않았다는 것입니다. 지금 수정해야합니다.
Stéphane Chazelas

@ StéphaneChazelas로 테스트 sleep 1000했지만 여전히 작동하지 않습니다. 그래도 의사 tty를 사용했습니다 (차이를 만들 수는 없습니다).
Hauke ​​Laging

@HaukeLaging 정확히 어떻게 했습니까? 해당 터미널에 제어 세션이 없었습니까 ( 다른 TTY 부분을 사용하지 않는 한 )?
Stéphane Chazelas

1
@ StéphaneChazelas setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'터미널 에뮬레이터 창에서 실행 했습니다. /dev/pts/4다른 터미널 에뮬레이터 창입니다 ( bash실행중인 동일한 사용자 ).
Hauke ​​Laging

6

두 번째 tty에는 일반적으로 일부 로그인 프로그램이나 bash와 같은 쉘 중 하나가 실행되는 프로그램이 있습니다. 상호 작용을 원하면 로그인 프로그램을 사용자의 것으로 바꾸거나 프로그램이 명령 줄에서 시작된 것처럼 프로그램을 실행하도록 쉘에 지시해야합니다.

보다 간단한 솔루션 인 IMO tmux는 두 번째 화면에 로그인 한 후 세션 을 시작한 후 다음을 사용하는 것입니다.

tmux send yourcommand ENTER

tmux두 번째 터미널로 전환하면 표시 되는 세션 에서 프로그램을 시작합니다 .


2

방금 발견했습니다.

시작시 2 개의 tty에서 애플리케이션을 시작하려면 어떻게해야합니까?

의견 중 하나는이라는 것을 언급합니다 openvt. 이 명령은 내가 겪은 것과 똑같은 일을하는 것처럼 보입니다!

http://linux.about.com/library/cmd/blcmdl1_openvt.htm

아무도 다른 것을 알지 못한다면, 이것이 아마도 "올바른"방법 이라고 생각 합니다.

(방금 시도했지만 정상적으로 작동하는 것 같습니다. getty실행 중이지만 사용하지 않는 다음 터미널을 선택합니다. VT는 로그인하려고 시도 할 때까지 VT가 열리지 않습니다.)


0

다음 명령으로 vt5에서 새 그래픽 세션을 시작합니다.

xinit "/usr/bin/<binary_executable>" -- :1 vt5

예를 들면 다음과 같습니다.

xinit "/usr/bin/playonlinux" -- :1 vt5

이미 활성화 된 그래픽 세션에서 그래픽 응용 프로그램을 시작하려면 다음을 수행하십시오.

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