Unix 소켓에서 컵 프린터로 데이터 전달

Unix 소켓에서 컵 프린터로 데이터 전달

가상 머신(virt-manager를 통한 KVM/QEMU)에서 인쇄하고 싶습니다. 가상 머신에서 호스트 연결로의 경우 Unix 소켓에 연결되어야 하는 가상 머신에 에뮬레이트된 병렬 포트가 있습니다. socat을 사용하여 청취 소켓을 만든 다음 socat unix-listen:/tmp/kvmpr localhost:631/printers/pdf 작동하지 않는 입력을 통해 컵 프린터로 리디렉션해 보았습니다.

이제 고객이 자신의 컴퓨터를 다시 원하기 때문에 더 많은 수정을 할 시간이 없습니다. cup PDF 프린터로 인쇄하고 다른 cup 프린터(가상)를 사용하는 Unix 수신 대기 포트를 설정하여 동일한 것을 시뮬레이션하려고 했습니다. 포트로 인쇄 9100, 생성된 소켓으로 리디렉션됩니다. 이 작업을 수행하면 한편으로는 다음과 같은 오류가 발생합니다.

socat -d -d tcp4-listen:9100 /tmp/kvmpr
2021/01/20 17:01:43 socat[5523] N listening on AF=2 0.0.0.0:9100
2021/01/20 17:02:11 socat[5523] N accepting connection from AF=2 127.0.0.1:36160 on AF=2 127.0.0.1:9100
2021/01/20 17:02:11 socat[5523] N opening connection to AF=1 "/tmp/kvmpr"
2021/01/20 17:02:11 socat[5523] N successfully connected from local address AF=1 "\x7E\x@D\xB9U"
2021/01/20 17:02:11 socat[5523] N successfully connected via <anon>
2021/01/20 17:02:11 socat[5523] N starting data transfer loop with FDs [6,6] and [5,5]
2021/01/20 17:02:11 socat[5523] N socket 2 (fd 5) is at EOF
2021/01/20 17:02:11 socat[5523] N socket 2 (fd 5) is at EOF
2021/01/20 17:02:11 socat[5523] E write(5, 0x55c9ae7f46b0, 3763): Broken pipe
2021/01/20 17:02:11 socat[5523] N exit(1)

또 다른 하나는 이렇습니다.

socat unix-listen:/tmp/kvmpr TCP:127.0.0.1:631/printers/PDF
2021/01/20 17:02:11 socat[5513] E write(5, 0x55d5325f2930, 8192): Broken pipe

무엇을 해야할지 모르겠습니다. socat 등을 통해 컵에 데이터를 보내는 방법에 대한 정보를 찾을 수 없습니다.

내 쪽의 "빠르고 더러운" 솔루션은 병렬 포트를 파일로 인쇄한 다음 Ghostpdl을 활용하는 스크립트를 사용하여 pdf를 출력하는 것이었지만 이는 사용자가 구현하기에는 너무 복잡합니다.

누군가 내 문제를 해결하는 데 도움을 줄 수 있다면 매우 기쁠 것입니다. 답변해 주셔서 미리 감사드립니다!

답변1

CUPS에서도 거의 같은 문제가 발생했습니다.

2021/02/01 19:19:22 socat[645] E write(6, 0x557e0b9735a0, 8192): Broken pipe

내 해결책은 매번 socat의 청크 크기를 두 배로 늘리고 테스트하는 것이었습니다. 내 상황은 결국 socat -b 65536 ....

socat -b 16384 ...
...
socat -b 65536 ...

관련 정보