我想从虚拟机(通过 virt-manager 的 KVM/QEMU)中打印出来。对于虚拟机到主机的连接,虚拟机中有一个模拟并行端口,应连接到 Unix 套接字。我尝试使用 socat 创建一个侦听套接字,然后通过键入
socat unix-listen:/tmp/kvmpr localhost:631/printers/pdf
不起作用的内容将其重定向到 cups 打印机。
现在我没有时间进行更多修改,因为我的客户想要回他的机器,我尝试通过设置一个打印到cups PDF打印机的unix监听端口来模拟同样的事情,并让另一台cups打印机(虚拟)打印到端口 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 等将数据发送到 cups 相关的信息。
我这边的一个“快速而肮脏”的解决方案是让并行端口打印到一个文件中,然后使用利用 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 ...