시리얼 장치에서 CR만 수신할 때 화면을 한 줄 아래로 내리고 처음부터 시작하게 하려면 어떻게 해야 합니까?

시리얼 장치에서 CR만 수신할 때 화면을 한 줄 아래로 내리고 처음부터 시작하게 하려면 어떻게 해야 합니까?

나는 screen: 을 사용하여 직렬 포트에 연결하고 있습니다 screen /dev/cu.usbserial-A703XAOG. 다른 쪽 끝에 있는 장치는 개별 라인에만 캐리지 리턴을 보냅니다. 스크린은 캐리지 리턴이 수신될 때 줄의 시작 부분에서만 시작하고 줄 아래로 내려가지 않으므로 출력의 마지막 줄을 다음 출력 줄로 덮어씁니다.

직렬 포트의 설정을 변경할 수 icrnl있으며 캐리지 리턴을 줄 바꿈으로 변환합니다. 이제 다음 출력 줄을 쓰기 전에 화면이 한 줄 아래로 이동하지만 줄 바꿈만 수신할 때는 처음부터 다시 시작하지 않습니다.

Ctrl-A, + 를 사용하여 Ctrl.termcap 파일을 덤프했습니다 .. 나는 termcap을 읽고 다음을 배웠습니다.

터미널에 다음 줄의 첫 번째 열로 이동하라는 명령이 있는 경우 해당 명령을 nw(newline)로 지정할 수 있습니다.

원천

이것은 내 현재 ~/.screenrc파일입니다.

termcap SC nw=^M

이는 SC덤프된 .termcap 파일의 이름과 일치합니다.

이것은 내가 기대했던 효과를 가져오지 못했습니다. 어쩌면 termcap명령이 올바른 방법이 아닌가?

시리얼 장치에서 CR만 수신할 때 화면을 한 줄 아래로 내리고 처음부터 시작하게 하려면 어떻게 해야 합니까?

편집하다:

sudo stty -f /dev/cu.usbserial-A703XAOG -a화면이 직렬 포트에 연결되었을 때의 출력은 다음과 같습니다.

speed 9600 baud; 0 rows; 0 columns;
lflags: -icanon -isig iexten -echo echoe echok echoke -echonl echoctl
        -echoprt -altwerase -noflsh -tostop -flusho -pendin -nokerninfo
        -extproc
iflags: -istrip -icrnl -inlcr -igncr -ixon -ixoff -ixany -imaxbel -iutf8
        -ignbrk brkint -inpck ignpar -parmrk
oflags: -opost -onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd -hupcl clocal -cstopb -crtscts -dsrflow
        -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
        erase = ^?; intr = ^C; kill = ^H; lnext = ^V; min = 100;
        quit = ^\; reprint = ^R; start = ^Q; status = ^T; stop = ^S;
        susp = ^Z; time = 2; werase = ^W;

편집하다:

이 문제를 해결할 수 있는 소프트웨어가 있다는 것을 알고 있습니다.퍼티"각 CR의 암시적 LF" 설정을 활성화하고 추가해야 합니다.연속물"독립 CR을 CRLF로 해석"을 활성화해야 합니다. 하지만 제 질문은 특히 screen이것이 제가 현재 직렬 포트에 연결하는 데 사용하는 소프트웨어이기 때문에 이것에 관한 것입니다.

편집하다:

Screen은 제어 시퀀스(원천). "단어 줄 바꿈 모드"(라고도 함)를 설정해야 합니다.새로운 라인 모델). 이는 매개변수 값이 20인 설정 모드 제어 순서를 사용하여 수행되어야 합니다 ESC [ 20 h.

이 제어 시퀀스를 화면에 어떻게 전달할 수 있나요?

답변1

나에게 효과가 있는 것으로 보이는 것은 찾은 개행 모드 이스케이프 시퀀스를 화면에 보내고 캐리지 리턴을 개행으로 변환하는 stty 명령을 제공하여 화면의 의사 tty를 조작하는 것입니다. pty를 찾으 려면 다음을 수행하십시오 ps a.

16947 pts/4    Ss+    0:00 screen -S myscreen /dev/ttyS0

그런 다음 명령을 내립니다.

pty=/dev/pts/4
stty -F $pty  ocrnl
echo -en '\e[20h' >$pty

관련 정보