CUPSに送信された印刷ジョブのパラメータを表示するにはどうすればよいですか?

CUPSに送信された印刷ジョブのパラメータを表示するにはどうすればよいですか?

PDFファイルを印刷する必要があるプログラムを作成していますlp。 PDFビューアとGUIを使用してファイルを印刷できますが、lp使用に問題があります。コマンドで使用できるようにPDFビューアがCUPSに送信するオプションが何であるかを正確に知りたいのですが、lpCUPSインターフェイスではこれを行う方法はありません。可能ですか?

答え1

たとえば、コマンドラインでPDFビューアを実行する方法がわかっている場合は、次のxpdf my.pdfコマンドを代わりに使用してください。

strace -f -e execve xpdf my.pdf

これにより、次の行が出力されます。

execve("/usr/bin/lp", ["lp", "-abc", "my.pdf"], ...

これは、配列に示されているパラメータで実行されているコマンドを示しています[,,,]

コマンドラインでビューアを実行できない場合はプロセスID(使用ps faxまたは類似)を見つけ、2519の場合は次のようにしてstraceをリンクします。

strace -f -e execve -p 2519

同様の結果が出なければなりません。control-cstraceを終了するには入力してください。

これは実行を表示しない可能性がありますが、lp必要に応じてstraceに実行中の操作をさらに表示するように要求できます。

答え2

CUPSはジョブのすべてのオプション(およびメタデータ)をc- ファイル(制御ファイル)は実際のスプールデータとともに送信されます。d- ファイル入力/var/スプール/カップ/

制御ファイルの名前は次のとおりです。cNNNNNNここで、NNNNNNはCUPSジョブIDを示します。

私はいつもこれを知っていました。昨日、これらのファイルを詳しく調べる必要がありましたが、バイナリでエンコードされているため、strings単に実行しても十分な結果が得られませんでした。

私は最初にStackOverflowに関連する質問をしましたが、それからcファイルを解析するためのツールが見つかりました。 CUPSソースコードにはありますが、デフォルトではビルドされていないため、ほとんどのオタクCUPSユーザーにはほとんど見えません(そしてLinuxディストリビューションパッケージでもビルドされません)。

その名前はtestipp

これをビルドする方法とStackOverflowで使用する方法について説明しました。

答え3

CUPSerror_logファイル(通常は次の場所にあります)にアクセスできる場合/var/log/cups/)とCUPSがLogLevel debugその設定にある場合(/etc/cups/cupsd.confファイル)、文字列を含む行を見つけて、各ジョブがCUPSに渡すコマンドラインパラメータを確認できますargv[5]

argv[5]CUPSが各フィルタコマンドラインの5番目の引数に表示するこれらのパラメータはすべて含まれています。その前に、同じ行に対応するジョブIDが印刷されていることがわかります[Job NNNNNN]

関連情報