getty를 사용하여 bash 프로세스를 _without_ tty에 연결하는 방법

getty를 사용하여 bash 프로세스를 _without_ tty에 연결하는 방법

두 개의 직렬 USB 장치를 서로 연결 /dev/ttyUSB1하고 한쪽 끝을 실행 /dev/ttyUSB2하여 /bin/bashpicocom을 사용하여 다른 쪽 끝에 연결하고 picocompicocom을 로컬 터미널 에뮬레이터로 사용할 수 있도록 연결하고 싶습니다.

나는 이런 것을 시도했다

setsid /bin/bash </dev/ttyUSB2 >/dev/ttyUSB2 2>&1

그러다가 피코콤으로 반대편에 접속했는데 화면에 횡설수설( :~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$)만 나오네요.. (전송속도가 일치하고 양쪽 단말 모두 양쪽 피코콤으로 통신이 가능합니다)

그러나 나는 내가 무엇을 하고 있는지 전혀 몰랐습니다. 누구든지 나에게 이 비밀을 말해 줄 수 있나요?


수정/업데이트:

다른 컴퓨터에서는 예전에 받았던 횡설수설을 더 이상 받지 않습니다. 위에서 설명한 대로 bash를 tty에 연결하고 picocom을 사용하여 다른 쪽 끝에 연결하면 이제 프롬프트가 표시되고 명령을 실행할 수 있지만 명령이 다시 나에게 에코되지 않습니다(결과만 볼 수 있음). "작업 제어"가 없습니다(Ctrl+C로 테스트했는데 절전 프로세스가 중지되지 않음).


배경:

나는 두 가지 다른 방법으로 picocom을 로컬 터미널 에뮬레이터로 성공적으로 사용했습니다.

  1. 게티와 함께:

    sudo systemctl start [email protected]
    

    picocom 에 성공적으로 연결할 수 있지만 /dev/ttyUSB1로그인해야 합니다. (이 답변에 감사드립니다.https://unix.stackexchange.com/a/772040/158192이전 질문으로 이동)

  2. 소카트와 함께

    $ socat -d -d PTY,raw,echo=0 EXEC:"/bin/bash",pty,stderr,setsid,sane
    2024/04/01 18:32:13 socat[40547] N PTY is /dev/pts/4
    ...
    

    이를 통해 picocom을 이와 같은 로컬 터미널로 사용할 수 있습니다.picocom /dev/pts/4


네, 제가 직접 USB tty에 /bin/bash를 연결할 수 있어야겠죠? 하지만 내 실험은 모두 틀렸어요.

답변1

첫 번째 예는 정확해 보입니다(그러나 하단의 내 의견도 참조하십시오).

내 책상 위에 컴퓨터가 있고 직렬 포트를 통해 연결되어 있습니다. 대상 시스템에서 직렬 포트는 입니다 /dev/ttyS0. 내 데스크탑에서 포트는 /dev/ttyUSB0.

다음과 같은 통신 도구를 사용하여 호스트에서 연결하는 경우 picocom:

$ picocom -b 115200 /dev/ttyUSB0

getty그런 다음 일반적으로 직렬 포트에서 실행되는 프로그램을 중지 하고 다음을 실행합니다.

# systemctl stop serial-getty@ttyS0
# setsid bash > /dev/ttyS0 < /dev/ttyS0 2>&1

모든 것이 예상대로 작동합니다. 에는 picocom다음이 표시됩니다.

root@radio0:/boot/firmware# tty
/dev/ttyS0

누구세요틀림없이두 경우 모두 전송 속도가 일치합니까? stty다음 명령을 사용하여 전송 속도를 명시적으로 설정할 수 있습니다 .

# stty 115200 < /dev/ttyS0

로그인이 필요하지 않은 bash 셸을 자동으로 시작하는 것이 목표라면 다음도 참조하세요.이 기사(면책조항: 본인 작성) 정확한 서비스를 제공하기 위해 getty 및 pam을 구성하는 방법을 설명합니다.

답변2

여기에는 두 가지 질문이 있습니다.

  • 허용된 답변에서 알 수 있듯이 mumbo jumbo는 질문의 내용과 아무 관련이 없으며 쉽게 복제할 수 없습니다.
  • 작업 제어 및 에코가 작동하지 않음 - 중요한 해결 방법은 bash 연결의 한쪽에서 "정상"을 사용하는 것입니다. (아마 bash에 연결하기 전)
stty sane -F /dev/ttyUSB2
setsid /bin/bash </dev/ttyUSB2 >/dev/ttyUSB2 2>&1

이것은 질문에 있는 socat 명령의 pts 버전에 내장되어 있습니다.

관련 정보