いくつかのシリアル プリンターがカップの 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
)、受信した印刷データのタイプを検出せず、先に進んでインターフェーススクリプトに送信するように指示します? あるいは、カップがそれを見ずに単純にインターフェース?