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のチャンクサイズを2倍にしてテストすることでした。私の状況は最終的にsocat -b 65536 ...

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

おすすめ記事