私はカーネルモジュールに精通しており、IPP、PPD、PS、PCL、PDLプリンタードライバーの概念について聞いたことがあります。 Mac/Windowsにプリインストールされている「generic」プリンタードライバーがあるので、カスタムドライバーをインストールする必要がなく、UXがシームレスになることを読みました。
その観点から、私はこれらの汎用ドライバーがどのように見えるかを探しています(カーネルモジュールであると想定しています)。このトピックに関する正確な例は見つかりませんでしたが、次のリポジトリが見つかりました。
これらに関連して、私はGutenprintで見つけました: src/main/print-lexmark.c および src/main/Canon-printers.h 、これらはcap_t
〜table〜プリンタの個々のモデル用にエンコードされた機能を持っているように見えるもの。それはやるべきことがたくさんあるようです。 Gutenprintでサポートされているプリンタの膨大なリストがあります ここ 。
私の質問はいくつかの部分にあります:
PCLとPostScript(PS)はドライバー仕様ではなくページ記述言語 (PDL):プリンターがこれらのいずれかをサポートしている場合、プリンタードライバーのジョブは、印刷ジョブをPCLまたはPSのいずれかに変換することです。
PCLとPSの両方で高品質の写真を撮ることができます。ただし、PCLは、特にコンピューターのメインプロセッサーがプリンターのプロセッサーよりもはるかに強力である場合(今日の通常の場合)、大きな高解像度のビットマップイメージで実際に効率的です。 PostScriptは、テキストとベクターグラフィックスで最高の状態です。スケーリング/レンダリングプロセスの多くを実際のプリンターにオフロードできます。これは、レーザープリンターだけで、他のプリンターと同じくらいのメモリと処理能力があった場合に役立ちました。コンピューター。ベクターグラフィックスの場合、PostScriptはグラフィックスを描画するために必要なコマンドを送信するだけで、プリンターは完全なネイティブ解像度を使用してグラフィックスを独自に複製します。
ドライバーは、プリンターの使用可能な機能を考慮する必要があります。たとえば、印刷ジョブの一部が用紙の端まで届くが、プリンターが印刷できない用紙の端に特定の最小マージンが必要な場合です。 、ページ全体を拡大縮小して収まるようにするか、ジョブの一部を別のページに移動するか、印刷できない端を切り取るかを決定する必要があります。また、グレーの色合いしか生成できないプリンタにカラーデータを送信するのは、時間の無駄です(ネットワークプリンタの場合はネットワーク帯域幅も)。 PPD(= PostScriptプリンター記述)ファイルは、このプリンターモデル固有の情報を提供します。
Unix/Linuxプリンタードライバーは通常notカーネルモジュールです:代わりに、送信された印刷ジョブを変換する通常のユーザースペースプログラム(またはスクリプト)です。標準出力の適切なページ記述言語への標準入力へ。 CUPSの用語では、これは filter として知られています。
ローカルに接続されたプリンタが非標準のUSBエンドポイント構造(「ホストベースの印刷」の場合もあります)またはその他の特別なプロトコルを使用する場合、ドライバには特別な通信プロトコルも処理するプログラムが含まれている可能性があります。 CUPSの用語では、これは「ポートモニター」として知られています。 CUPSには、いくつかの一般的なケースのポートモニターが含まれていますが、プリンタードライバーはカスタマイズされたものを提供できます。
印刷スプーラーデーモン(最近では、ほとんどがcups
)には、ユーザーから印刷ジョブを受信し、その形式を識別する役割があります。必要な変換を適用し(「ドライバー」とも呼ばれるフィルタープログラムによって)、最終的に結果をプリンターデバイスに出力します(オプションで、この特定のプリンターモデルに合わせたポートモニターを使用します)。
CUPSには、PPDファイル(PostScriptプリンター記述)を使用してプリンター固有の詳細を提供することにより、ほとんどのPostScriptプリンターを処理するための「汎用ドライバー」が組み込まれています。 CUPSも PPDファイル仕様を拡張します 非PostScriptプリンターもPPDファイルで記述できるようにします。この場合、PPD拡張機能は、印刷ジョブをCUPSがすでに認識している形式の1つから、プリンターが受け入れるデータ形式に変換するためにCUPSが実行する必要がある1つ以上の追加プログラムを指定します。
番号付きの質問の場合:
1.)PCLやPSなどの最も広く使用されているページ記述言語は、仕様書を公開しています。昔々、実際の紙のマニュアルがハードウェアに付属していたとき、仕様書はプリンターに含まれていた可能性もありました。
「ホストベースのプリンタ」で使用される多くの言語やプロトコルと同様に、他の言語やプロトコルはリバースエンジニアリングされています。はい、それは多大な努力でした。
2.) https://github.com/Apple/cups/tree/master/filter には、CUPS汎用PostScriptおよびラスター(=生のビットマップデータ)ドライバーがあります。 PPDファイルを読み取るためのコードもあります。
3.)上記の私の答えの紹介テキストを参照してください。
4。) openprinting.org には、プリンターモデルとそれらのためのオープンソースのプリントドライバーソリューションの巨大なデータベースがあります。特定のプリンター用のオープンソースドライバーソリューションが存在する場合、おそらくそこにそれ(またはそのリンク)が見つかると思います。