직렬 터미널에 텍스트를 붙여넣는 속도를 늦추는 방법은 무엇입니까?

직렬 터미널에 텍스트를 붙여넣는 속도를 늦추는 방법은 무엇입니까?

저는 Raspberry Pi에서 작업 중이며 일부 텍스트 파일을 명령줄 텍스트 편집기에 붙여넣으려고 합니다 nano. 하지만 원격 측에서 텍스트가 손상됩니다(일부/불완전한 텍스트). 내 PC(xubuntu 16.04) 붙여넣기 기능이 데이터를 너무 빠르게 푸시하고 있다고 추측할 수 있습니다(직렬 전송 속도는 115200입니다).

어떻게든 붙여넣기 기능을 느리게 할 수 있나요?

답변1

screen느린 붙여넣기 기능이 있다는 걸 발견했어요 !https://gist.github.com/jandahl/8436cd6a99d56efd9ff4

  1. 설치 화면

  2. .screenrc 파일이 없으면 파일을 만듭니다.


startup_message off

hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

defslowpaste 20 ## It is the value to the left that is the central one for your happiness
  • 이미 갖고 있다면 .screenrc마지막 줄을 추가하세요. defslowpaste 20

  1. 적절한 직렬 포트를 사용한 부팅 화면(Raspberry Pi, 1세대, 기본값은 115200보드): screen /dev/ttyUSB3 115200

  2. 재미있게 보내세요!

답변2

내 PC(xubuntu 16.04)의 붙여넣기 기능이 데이터를 너무 빠르게 푸시하고 있다고 추측할 수 있습니다(직렬 전송 속도는 115200입니다).

이 가정은 잘못되었습니다.터미널 드라이버는 항상 구성된 전송 속도를 사용하여 출력 큐에 데이터를 쓰고, write(2)출력 큐에 더 이상 공간이 없으면 터미널에 대한 짧은 카운트 또는 블록을 반환합니다(또는 차단 대신 -1을 반환하고 설정합니다). (터미널이 비차단 모드로 설정된 errno경우 EAGAIN) 직렬 드라이버는 푸시해야 하는 데이터 양에 따라 전송 속도를 "조정"하지 않습니다.

직렬 회선을 통해 연결할 수 있는 두 대의 컴퓨터가 있는지 쉽게 테스트할 수 있습니다(또는 동일한 컴퓨터를 자체에 연결할 수 있습니다(예: USB->직렬 어댑터 2개, 널 모뎀 케이블을 통해 연결된 직렬 포트 2개 등).).

예를 들어. 머신 A가 머신 B /dev/ttyUSB0에 연결된 경우 :/dev/ttyUSB1

머신 A에서:

# stty -F /dev/ttyUSB0 speed 50 raw; cat /dev/ttyUSB0

머신 B에서:

stty -F /dev/ttyUSB1 speed 50 raw opost onlcr; cat >/dev/ttyUSB1
<paste>

이제 컴퓨터의 명령줄에 큰 텍스트를 붙여넣고 B초당 약 5자 정도의 속도로 원활하게 컴퓨터 아래로 흘러가는 것을 지켜보세요 A.

실제 문제는 프로그램 작성자가 종료 상태를 무시 write(2)하거나 오류를 반환할 수는 있지만 필요한 개수보다 적은 수는 반환하지 않을 것이라고 가정한다는 것입니다. 해결책은 신뢰할 수 없고 효과적이지 않은 반창고를 사용하는 것보다 쓰레기 사용을 고치거나 중단하는 것입니다.

또한 케이블/연결이 불량하거나 소음이 심한 경우 전송 속도를 낮추어야 합니다. 그렇지 않으면 데이터가 바이너리 쓰레기가 되고 일부 직렬 어댑터는 하드 록되어 재설정해야 할 수 있습니다.

장치 중 하나가 공칭 전송 속도를 처리할 수 없고 어떤 종류의 하드웨어 또는 소프트웨어 흐름 제어(xon/xoff)도 지원하지 않는 경우 전송 속도도 줄여야 합니다.

관련 정보