저는 Raspberry Pi에서 작업 중이며 일부 텍스트 파일을 명령줄 텍스트 편집기에 붙여넣으려고 합니다 nano
. 하지만 원격 측에서 텍스트가 손상됩니다(일부/불완전한 텍스트). 내 PC(xubuntu 16.04) 붙여넣기 기능이 데이터를 너무 빠르게 푸시하고 있다고 추측할 수 있습니다(직렬 전송 속도는 115200입니다).
어떻게든 붙여넣기 기능을 느리게 할 수 있나요?
답변1
screen
느린 붙여넣기 기능이 있다는 걸 발견했어요 !https://gist.github.com/jandahl/8436cd6a99d56efd9ff4
설치 화면
.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
적절한 직렬 포트를 사용한 부팅 화면(Raspberry Pi, 1세대, 기본값은 115200보드):
screen /dev/ttyUSB3 115200
재미있게 보내세요!
답변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)도 지원하지 않는 경우 전송 속도도 줄여야 합니다.