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