제가 해결하려는 딜레마는 더 큰 텍스트 출력이 결국 뒤죽박죽된 텍스트로 분해된다는 것입니다.
배경으로 저는 TEL이라는 PX-8의 터미널 에뮬레이션 소프트웨어를 사용하여 RS232를 통해 Pi3에 연결된 오래된 시스템(EPSON PX-8)을 사용하고 있습니다.
전화 설정 - 전송 속도: 9600, 문자 비트: 8, 패리티: 없음, 정지 비트: 2, RTS: 켜짐, 흐름 제어: 켜짐
원래 저는 PX-8과 Pi3 사이에서 이 문제를 발견했습니다. XON/XOFF 신호로 흐름 제어를 활성화하여 이 문제를 해결할 수 있었습니다. 그러나 Pi3에서 다른 Linux 호스트로 telnet 또는 ssh를 시도하면 더 큰 텍스트 블록을 출력하려고 할 때 다시 깨진 텍스트가 나타납니다.
아래 텍스트 출력은 명령 기록을 인쇄하려고 할 때 어떤 일이 발생하는지에 대한 예입니다.
1 sudo rasp-config
2 sudo raspi-config
3 sudo nano /boot/cmdline.txt
4 tail /boot/cmdline.txt
5 sudo shutdown -r now
6 sudo vim ~/boot/cmdline.txt
7 cd /./boot
8 dir
9 sudo vim cmdline.txt
10 sudo vim config.txt
11 sudo shutdown -r now
12 dfgdf
13 vim
14 sudo vim cmdline.txt
15 cd /./boot
16 sudo vim cmdline.txt
17 sudo shutdown -r now
18 cd /./boot
19 sudo vim cmdline.txt
20 sudo shutdown -r now
21 ping 8.8.8.8
2 xprt TEM=Vvj9s9ds9j3oin so nat1 machine
x Rom =vos cngas-2goses9g3
-xtiet n n5
-s oiy
y
답변1
나는 당신이 파이에 직렬-USB 어댑터 같은 것을 가지고 있고 getty
PX-8에서 이 tty에 로그인할 수 있도록 하나를 설정했다고 가정합니다. 일단 로그인하면 stty ixon
쉘은 pi의 출력에 대해 xon/xoff 흐름 제어를 활성화합니다. 이제 ssh
쉘에서 원격으로 로그인한 경우 흐름 제어로는 원격에서 대량의 출력을 방지하는 데 충분하지 않습니다.
일어나고 있는 것으로 보이는 것은(실행 strace -v -f -o /tmp/trace ssh
및 찾기 ioctl(0,...)
) ssh
터미널이 의도적으로 ixon
설정을 끄는 것을 포함하여 원시 모드로 전환된다는 것입니다. 이것은 일반적으로 원하는 것입니다. 입력된 모든 문자가 흐름 제어 등을 처리하기 위한 자체 pty가 있는 원격 장치로 전송되기를 원합니다.
불행하게도 리모콘의 출력은 대형 버퍼로 전송되므로 PX-8의 xoff 문자는 거의 효과가 없습니다. 리모콘에 도달할 때쯤에는 pi가 수신한 모든 대형 버퍼가 계속해서 출력될 것이기 때문입니다. 오버플로 및 데이터 손실이 발생합니다.
stty ixon
시도할 수 있는 것은 SSH 연결을 설정한 후 파이에서 재발행하는 것입니다. 이를 자동화하는 한 가지 방법은 ~/.ssh/config
2개의 옵션 행 에 추가하는 것입니다.
PermitLocalCommand yes
LocalCommand sleep 10 && stty ixon -F /dev/tty &
PermitLocalCommand
보안상의 이유로 기본적으로 꺼져 있습니다 man ssh_config
.