4

いくつかのシリアル プリンターがカップの raw キューとして設定されているサーバーがあります。これらのそれぞれに、単純な出力操作を実行し、サーバー上で実行され、プリンターに直接接続してプリンターに書き込むのが好きなアプリケーションで IPC を処理するためのインターフェイス スクリプトをインストールしました。彼は印刷装置のみを制御しています。そこにあるものはすべて機能しているようです。

(独自の印刷スプーラを介してスプールした後) カップを通過している間に、印刷するファイルにプリンタ固有のエスケープ コードを挿入しているように見える別のアプリケーションをサーバーに入力します。つまり、このアプリケーションによって作成される印刷物は、単なるプレーン テキスト文字列ではなく、プリンターが解釈するためのバイナリ制御コードを含んでいます。

私が直面している問題は、この 2 番目のアプリケーションからそのようなファイルを受信したときに、カップが私のインターフェイスをバイパスしているように見えることです。2 つのほぼ同一の印刷ファイルを設定して、これをテストしました。1 つ目は、「Hello, world!」というプレーン テキストを含んでいました。改行文字が続きます。2 つ目は、プリンターの 1 つのエスケープ コードが含まれており、その後に「Hello, world!」が続きます。そして改行。次に、プリンターのインターフェイスに「sleep 5」行を追加して、印刷時に顕著な遅延が発生するようにしました。

lp を使用して最初のファイルを印刷すると、5 秒間何も起こりませんでした。その後、プリンターが起動し、「Hello, world!」と出力されました。ただし、まったく同じlpコマンドを使用して 2 番目のファイルを印刷すると、すぐに「Hello, world!」と印刷されました。眠らずに。-o rawまた、「 」オプションを使用して、最初のファイルと同じ動作を強制できることにも注意しlpました (5 秒の遅延なしですぐに出力します)。

私の推測では、cups は印刷される実際のデータを見て、そのタイプを判別しようとしています。データ内にプリンターのエスケープ コードがあると、これが「生の」印刷であると判断し、インターフェイスをバイパスします。そもそもプリンターを「生の」キューとして設定し、これはカップがインターフェースを介して送信されたものをそのまま渡すことを意味すると想定したため、これは私が期待した動作ではありません。それにもかかわらず、これは私が見ている動作です。

私の質問は次のとおりです。カップにオプションを送信する方法はありますか(インターフェースもバイパスしているように見える 以外-o raw)、受信した印刷データのタイプを検出せず、先に進んでインターフェーススクリプトに送信するように指示します? あるいは、カップがそれを見ずに単純にインターフェース?

4

1 に答える 1

5

あなたが持っているプリントキューは「生」のものではありません!

まず、CUPS の用語でraw プリント キューが何であるかを認識していないようです: raw キューとは、関連付けられていないものです...

  • ...インターフェイス スクリプト( にあるキュー自体と同じ名前のスクリプト/etc/cups/interfaces/)、

  • ...また、PostScript Printer Description (PPD) ファイル (キュー自体と同じ名前で、拡張子*.ppdが追加された PPD ファイル、 にあります) もありません/etc/cups/ppd/

プリンター キュー用のインターフェイス スクリプトをインストールしたと言うので、定義上、これらは生のキューではありません。

-o raw未加工の CUPS キューにジョブを未加工 (つまり、フィルター処理されていないことを意味します) として送信するには、lpコマンドラインで使用する以外に方法はありません。オプション ... を (代わりに) 使用することもでき-o document-format=application/vnd.cups-rawますが、これはまったく同じ意味を持ちます: CUPS が同じジョブ処理を使用し、パンチするキーボード キーが 7 倍多くなります。

どちらの方法でも、CUPSは着信ジョブ ファイルを自動入力するステップをスキップし、フィルタなしでキューのバックエンドに渡します。

/var/log/cups/error_log自動入力ステップとその結果は、有効にするとキーワードを検索することでログ ファイルで確認できますAuto-typing:記載されcupsd.confLogLevel debugいる行は、Request file type is ...CUPS が着信ジョブを分類する MIME タイプを示します。)

CUPS に着信印刷データをテキストとして処理させる方法

コマンドライン-o document-format=text/plainでを使用します。lp

CUPS 'raw' キューの設定方法

(任意の) 既存の印刷キューを生の印刷キューに変更する場合は、関連する PPD ファイル ( /etc/cups/ppd/myprinter.ppd) または関連するインターフェイス スクリプト ( /etc/cups/interfaces/myprinter) を削除するだけです。

最初から raw として機能する印刷キューをインストールする場合は、プリンター名とバックエンド URI を使用するだけで、PPD やそれに関連付けるインターフェイス スクリプトを指定しないでください。

「raw」印刷キューをインストールするコマンドの例:

 sudo lpadmin -p my_raw_printer -E -v socket://192.168.177.188:9100

(-pはプリント キュー名を指定するためのもので、-Eは最初からプリント キューを有効にするためのものです。)

推測: 2 番目のアプリケーションがインターフェイス スクリプトをバイパスしている理由

完全なシステム設定を確認せずに、2 番目のアプリケーション (最初のアプリケーションとは印刷の動作が異なるようです) を確認するか、デバッグ レベルの CUPSerror_logファイルにアクセスしないと、次のように推測することしかできません。

  • 私の推測では、あなたの 2 番目のアプリケーションは、印刷コマンド オプションを暗黙的に使用するハードワイヤードの印刷コマンドを使用していると思い-o rawます。
于 2012-09-04T23:01:17.433 に答える