CUPS は、印刷ジョブを標準的な方法でプリンタに送信できるようにするメカニズムを提供します。 印刷データはスケジューラに送られ、スケジューラは、印刷ジョブをプリンタが理解できる形式に変換するフィルタシステムにジョブを送ります。 このフィルタシステムは、印刷データをデバイスやネットワーク接続に送信する特別なフィルタであるバックエンドにデータを渡します。 このシステムは、PostScript とデータのラスタライズを広範囲に使用して、データを宛先プリンターに適した形式に変換します。
CUPS は、プリントサーバーで多数のデータ形式を処理できる、標準化およびモジュール化した印刷システムを提供します。 CUPS 以前には、独自のプリンタ言語およびフォーマットを使用する、市場にある非常に多様なプリンタに対応する標準的なプリンタ管理システムを見つけることは困難でした。 例えば、System VとBerkeleyの印刷システムは互いにほとんど互換性がなく、プログラムのデータ形式を印刷可能な形式に変換するために複雑なスクリプトと回避策が必要だった。 また、プリンタに送られるファイル形式を検出できないことが多く、データストリームを自動で正しく変換することができなかった。 さらに、データ変換は中央サーバーではなく、個々のワークステーションで実行されていました。
CUPS により、プリンター メーカーとプリンター ドライバー開発者は、プリント サーバー上でネイティブに動作するドライバーをより簡単に作成することができます。 処理はサーバー上で行われるため、他の Unix 印刷システムよりも簡単にネットワークベースの印刷を行うことができます。 Samba がインストールされていれば、ユーザはリモート Windows コンピュータのプリンタをアドレス指定でき、一般的な PostScript ドライバをネットワーク越しの印刷に使用することができる。 ヘルパーアプリケーション(cups-lpd)はLPD(Line Printer Daemon protocol)の要求をIPPに変換します。
認証モジュールは、どのIPPおよびHTTPメッセージがシステムを通過することができるかを制御します。 IPP/HTTPパケットが承認されると、それらはクライアントモジュールに送信され、クライアントモジュールは着信接続をリッスンして処理します。 クライアントモジュールは、Webベースのプリンタ、クラス、およびジョブステータスの監視と管理をサポートするために、必要に応じて外部CGIプログラムを実行する役割も担っています。 このモジュールが要求を処理すると、IPPモジュールにそれを送り、HTTPサーバー上のアクセス制御や認証をクライアントが横取りしないように、URI(Uniform Resource Identifier)検証を実行させる。 URI は、ネットワーク上の抽象的または物理的なリソースを参照するために使用できる名前またはアドレスを示すテキスト文字列です。
スケジューラは、プリンタのクラスを許可します。 アプリケーションは、クラス内のプリンタのグループに要求を送ることができ、スケジューラは、そのクラスで最初に利用可能なプリンタにジョブを指示することができます。 ジョブモジュールは印刷ジョブを管理し、最終的な変換と印刷のためにフィルタとバックエンドプロセスに送り、これらのプロセスからのステータスメッセージを監視します。
CUPS スケジューラは設定モジュールを利用し、設定ファイルの解析、CUPS データ構造の初期化、CUPS プログラムの起動と停止を行います。
ロギングモジュールは、アクセス、エラー、およびページログファイルのためのスケジューライベントのロギングを処理する。 メインモジュールは、クライアント接続のタイムアウトとI/O要求のディスパッチ、シグナルの監視、子プロセスのエラーと終了の処理、および必要に応じてサーバ構成ファイルの再ロードを処理する。
スケジューラーによって使用される他のモジュールは以下の通りです。
- 印刷データを印刷デバイスに適した形式に変換するフィルタリング処理で使用される MIME (Multipurpose Internet Mail Extensions) タイプと変換データベースを扱う MIME モジュール、
- Postscript Printer Description (PPD) ファイルのリストを扱う PPD モジュール、
- システムで使用できるデバイスのリストを管理するデバイスモジュール、
- CUPS 内のプリンタと PPD を処理する Printers モジュールです。
Filter systemEdit
CUPS ではプリントサーバ上のさまざまなデータ形式の処理を行うことが可能です。 これは、一連のフィルターを介して、印刷ジョブデータをプリンターの最終的な言語/フォーマットに変換します。
MIMEデータベース編集
CUPSシステムがスケジューラーに印刷ジョブを割り当てた後、それはCUPSフィルターシステムに渡されます。 これは、データをプリンタに適した形式に変換する。 起動時に、CUPSデーモンは2つのMIMEデータベースをロードする。 mime.types
はCUPSがデータを受け入れることができる既知のファイルタイプを定義し、mime.convs
は各特定のMIMEタイプを処理するプログラムを定義するものである。
mime.types
ファイルは次の構文を持っています:
mimetype { | }
たとえば、HTML ファイルを検出するには、次のエントリが適用されます:
text/html html htm \
printable(0,1024) + (string(0,"<HTML>") string(0,"<!DOCTYPE"))
2 行目は、ファイル内のテキストの最初のキロバイトが印字可能文字を持ち、それらの文字に HTML マークアップが含まれていると判断して、ファイルの内容を特定の MIME タイプにマッチさせます。
mime.convs
ファイルは次の構文を持っています:
source destination cost program
source フィールドは mime.types
ファイルを検索して決定した MIME タイプを指定し、 destination フィールドは要求した出力のタイプをリストしてどのプログラムを使用すべきかを決定しています。 これもmime.types
から検索される。 コストフィールドは、ファイルを変換する際にフィルタのセットを選択するのに役立ちます。 最後のフィールドであるプログラムは、データ変換を実行するために使用するフィルタプログラムを決定する。
いくつかの例:
text/plain application/postscript 50 texttopsapplication/vnd.cups-postscript application/vnd.cups-raster 50 pstorasterimage/* application/vnd.cups-postscript 50 imagetopsimage/* application/vnd.cups-raster 50 imagetoraster
Filtering processEdit
フィルタリング処理は、6つの引数であらかじめフォーマットされた入力データを受け取ることによって動作します。
- 印刷ジョブのジョブID
- ユーザー名
- ジョブ名
- 印刷部数
- 印刷オプション
- ファイル名(ただし標準入力からリダイレクトされている場合は不要)。
次に、入力されるデータの種類と、MIME データベースを使用して使用するフィルタを決定します。たとえば、画像データは特定のフィルタによって検出および処理され、HTML データは別のフィルタによって検出および処理されます。 PostScript データに変換する場合、プリフィルタと呼ばれる追加のフィルタが適用されます。このフィルタは、PostScript データを別の PostScript 変換器を通して、印刷するページ範囲の選択、N アップ モード、その他のデバイス固有のものなど、プリンタ固有のオプションを追加できるようにするためのものです。 プレフィルタリングが終わると、データは、PostScriptプリンタを使用している場合はCUPSバックエンドに直接送られるか、linuxprinting.orgのFoomaticのような別のフィルタに渡されるかのいずれかです。 また、Ghostscriptに渡すこともできます。GhostscriptはPostScriptを中間的なCUPS-ラスターフォーマットに変換してくれます。 中間的なラスター形式は、ラスターデータをプリンタ固有の形式に変換する最終的なフィルタに渡される。 CUPS に含まれるデフォルトのフィルタは次のとおりです:
- raster to PCL
- raster to ESC/P or ESC/P2 (Epson printer language, now largely supersed by their new ESC/P-Raster format)
- raster to Dymo (another printer company).Dymo はプリンタで使われる言語です。
- raster to Zebra Programming Language or ZPL (Zebra Technologies 社のプリンタ言語)
2009 年現在、GDI や SPL (Samsung Printer Language) など他の独自言語は、raster to SPL トランスレータ Splix によってサポートされています。 HPLIP (以前は HP-IJS として知られていました) は HP プリンタ用の Linux+CUPS ドライバを提供し、Gutenprint (以前は Gimp-Print として知られていました) は (主に) インクジェットプリンタ用の高品質プリンタドライバの一群で、Linux 用 TurboPrint は広範囲のプリンタ用の高品質プリンタドライバの一群を提供しています。 CUPS では、パラレル、シリアル、および USB ポート、cups-pdf PDF Virtual Printing、そして IPP、JetDirect (AppSocket)、Line Printer Daemon (LPD)、SMB プロトコル経由で動作するネットワーク バックエンドが利用可能です。 CUPS 1.6 では、Avahi を使用した Bonjour プリンタの検出および共有もサポートされています。