Common Unix Printing System
Common Unix Printing System(コモン・ユニックス・プリンティング・システム)はUnix系オペレーティングシステム (OS) 用のモジュール化された印刷システムである。普通CUPS(カップス)と略称される。CUPSは、Mac OSやWindowsの印刷機構に遅れをとっていたUnix系OSに強力な印刷機能をもたらすことになった。CUPSではUnix系OSでプリンタの形式・型ごとに独自に書き上げねばならなかったデバイスドライバの作成が極めて容易になり、過去にUnix系OSが対応していた特殊なラインプリンタとPostScriptプリンタのみならず、Macintosh/Windows向けに市販されているプリンタのほぼ全てがUnix系OS上から利用できるようになるとされている。
CUPSを運用しているコンピュータは、クライアントのコンピュータから印刷ジョブを受け取るサーバとなり、それらのジョブを処理して適切なプリンタへと送る。また、その際にはHTTPのBasic認証およびDigest認証、ローカル認証、128ビットTLS/SSL暗号化などを用いることもできる。
CUPSはUnixの印刷スプーラとスケジューラ、フィルタ・システム、およびバックエンド・システムからなる。このうち、フィルタ・システムは印刷データをプリンタが理解可能な形式へ変換することを受け持ち、バックエンド・システムはそのデータをプリンタへと送ることを受け持つ。CUPSは印刷ジョブとキューを取り扱う基盤としてIPP (Internet Printing Protocol) を用いている。またCUPSはUnixで伝統的なSystem V形式とBSD(バークレー)形式のコマンド・ラインのインターフェースもサポートしており、さらにSMBプロトコルも部分的にサポートしている。CUPSが提供するデバイス・ドライバは、アドビのPPD (PostScript Printer Description) 形式のテキスト・ファイルを用いて設定が可能である。CUPSを設定するためCUPS自身はウェブ (HTTP) を用いた組込みのインターフェースを有している。また多くのユーザ・インターフェースがさまざまなプラットフォームに対して用意されており、ESP Print Proといった商用パッケージだけでなく、KUPS、GtkLP、QtKUPS、XPPなどのオープンソースライセンスで開発されているGUIがいくつも存在する。CUPSはGNU General Public LicenseとGNU Lesser General Public License, Version 2の元で配布されている。
歴史
CUPSはまず、Easy Software Productsのマイケル・スイートによって1999年の秋に作成された[1]。最初のリリース・バージョンが公開されるまでのアルファとベータ・バージョンに2年間を要している。初期にはlpd (line printer daemon) を用いるよう開発努力が傾けられたが、ときとしてプリンタとの相性が悪いためにIPPも代替としてサポートされた。CUPSはすぐさま、Red Hat LinuxなどいくつかのLinuxディストリビューションで標準の印刷システムとして採用された。アップルコンピュータはMac OS Xのデフォルトの印刷システムとして2002年3月にCUPSを採用している[2]。2007年2月にアップル社は主たる開発者であるマイケル・スイートを雇用し、CUPSのソース・コードを取得している[3]。
概要
CUPSは、標準的な方法で印刷ジョブをプリンタに送ることを可能とする機構を与えるものである。印刷データはまずスケジューラへと送られ、スケジューラはジョブをプリンタが理解できる形式へと変換するためフィルタ・システムに送る。さらにフィルタ・システムはデータを、デバイスやネットワークへと送るための特殊なフィルタであるバックエンドへと受け渡す。CUPSのシステムはデータをプリンタが理解できる言葉へと変換するのにPostScriptとラスタ・グラフィックスをフルに活用している。
CUPSの最大の利点は、それが、印刷サーバ上で様々なデータ様式を処理できる標準的でモジュール化された印刷システムであることである。CUPS以前には、それぞれ独自の言語と形式を用いていた様々な市場のプリンタに対応している標準的なプリンタの処理システムは見当たらなかった。例えば、System Vとバークレイの印刷システムは互いの互換性がほとんどなく、しかもプログラムのデータ形式からプリンタが理解できる形式へと変換するための複雑なスクリプトと急場しのぎの手段とを用意する必要があった。さらにこれらはしばしばプリンタへと送られているファイル形式を検出する手段を持たないために、データ列を正しく自動的に変換することができなかった。また中心となるサーバ上でではなく各ワークステーション上でデータの変換を行っていた。
CUPSでは、プリンタのメーカーやドライバの開発者が印刷用サーバで専用に動くドライバを製作することが以前よりもはるかに容易なものとなっている。また、サーバ上で処理が成されることによって、他のUnixの印刷システムで行われていたことと較べネットワークを介する印刷も非常に容易なものとなる。ひとつの利点はSambaを用いるときで、プリンタはリモートのWindowsコンピュータで用いられ、しかも一般的なPostScriptドライバをネットワークを介する印刷に用いることができる。
スケジューラ
CUPSスケジューラはIPP (Internet Printing Protocol) もしくはlpd (line printer daemon) プロトコルのどちらかを用いることができる。スケジューラはHTTP/1.1のリクエストを解釈し印刷ジョブの管理、サーバの設定、およびCUPS自体の説明資料のためにウェブを用いたインターフェースを提供している。
スケジューラは、IPPとHTTPのどのメッセージがシステムに受け渡せるかを制御するための承認モジュールを有している。IPP/HTTPパケットは一旦承認されると、やって来る接続を監視しそれを処理しているクライアント・モジュールに送られる。クライアント・モジュールはまた、必要に応じてウェブ基盤のプリンタ、「クラス」、ジョブの実行状況のモニタと管理をサポートするための外部CGIプログラムの実行を受け持っている。クライアント・モジュールがリクエストを処理すると、次にデータはさらなる処理のためにIPPモジュールへと送られる。このモジュールは、クライアントがHTTPサーバ上のアクセス制限または認証を回避することを防ぐためにURI (Uniform Resource Identifier) の検証を行う。
スケジューラではプリンタがクラスを持つことを認めている。これは複数のプリンタをグループ化するひとつの方法であり、ジョブをあるクラスへと送るような用い方を可能としている。すなわち、スケジューラはクラス内で最初に利用できるプリンタを選び出してジョブをそのプリンタへと送る。ジョブ・モジュールは、最終的な変換と印刷のために印刷ジョブをフィルターやバックエンドの処理へと送ることで印刷ジョブを管理する。またそれらフィルターやバックエンドからのステータス・メッセージも監視している。
スケジューラのコンフィギュレーション・モジュールはCUPSのデータ構造を初期化するとともに設定ファイルを解析し、CUPSプログラムをスタートさせる。コンフィギュレーション・モジュールは設定ファイルを処理している間はCUPSサービスを停止させ、処理が完了するとサービスを再開させる。
ログ・モジュールはアクセス、エラー、ログ・ファイル操作のスケジューラの事象のログを取り扱い、一方メイン・モジュールはタイムアウトとクライアントからの接続に対するI/Oリクエストの送出を受け持ち、またシグナルを監視し、必要に応じサーバの設定ファイルの再読み込み、さらに子プロセスのエラーと終了を取り扱う。
スケジューラで用いられているその他のモジュールには、印刷デバイスが理解できる形式に印刷データを変換するときのフィルター処理に用いられるMIME (Multipurpose Internet Mail Extensions) 型と変換データベースを取り扱うMIMEモジュール、PPD (Postscript Printer Description) ファイルのリストを扱うPPDモジュール、システムで利用可能なデバイスのリストを扱うデバイス・モジュール、CUPS内のプリンタとPPDを扱うプリンタ・モジュールがある。
フィルタ・システム
CUPSの大きな利点のひとつは、様々なデータ形式を印刷サーバ上で処理できるということである。印刷ジョブは一連のフィルターを介してプリンタの最終的な言語・形式へと変換される。このデータ形式と変換方法はMIME型を利用して抽象化されている。CUPSはmime.types
とmime.convs
の2つのMIMEデータのファイルを使用する。mime.types
はCUPSがファイルのMIME型を決定するために用いられ、mime.convs
はあるMIME型を別のMIME型に処理するためのプログラムを定義している。
例えば、HTMLファイルを検出するためのmime.types
の行は、
text/html html htm \ printable(0,1024) + (string(0,"<HTML>") string(0,"<!DOCTYPE"))
となっている。これは、ファイルのサフィックス(拡張子)がhtml
もしくはhtm
であるか、ファイルのテキストの始めの1KiBが印刷可能な文字からなっていて、かつ<HTML>
か<!DOCTYPE
から始まっているなら、ファイルはMIME型text/htmlであるものと見なされることを意味している。一方、mime.convs
ファイルは以下のような行からなっている。
text/plain application/postscript 50 texttops
1番目のカラムと2番目のカラムはともにMIME型であり、それぞれ変換前のMIME型と変換後のMIME型とを表している。3番目のカラムはファイルを変換するために支払うべき「コスト」を表し、フィルタ・システムがファイルを変換するときに別々のフィルタの組合せの中からどれを選ぶかを決定するための評価基準とされる。最後のカラムはデータを変換するためのフィルタ・プログラムを表す。よって、text/plain
型のファイルはフィルタtexttops
によってコスト50でapplication/postscript
型に変換できることになる。
フィルタ・システムは、プリンタ・キューまたは印刷フィルタの名前、印刷ジョブのジョブ番号、ユーザ名、ジョブ名、印刷部数、その他印刷のオプション、ファイル名(標準入力からリダイレクトされた場合は不要)の引数とともに入力データを受け取る。その後、上述のようにMIMEデータベースを用いて入力データの型と使用されるフィルタを決定する。例えば、画像データが検出されればそれ用の特定のフィルタで処理され、HTMLのデータならまた別の特定のフィルタで処理される。これらのデータはその後PostScriptデータに変換されるか、直接ラスタ・データに変換しうる。PostScriptデータへ変換された場合には、プレフィルタと呼ばれるさらなるフィルタが適用され、これは印刷するページ範囲の指定や、複数のページを1ページに埋め込むN-Upモードの設定などプリンタに特定のオプションを加えることができるようにPostScriptデータにたいして別のPostScript変換プログラムを適用する。
プレフィルタによる処理が終わると、PostScriptプリンタを用いている場合にはそのままデータはCUPSのバックエンドに送られ、そうでない場合には(linuxprinting.orgのFoomaticのような)別のフィルタかGhostscriptで処理される。これはPostScriptをプリンタに依存しない中間形式のCUPS-rasterフォーマット (MIME 型 application/vnd.cups-raster
) へと変換する。最後にこの中間ラスタ形式はプリンタ個別の形式へと最終フィルタで処理される。
このラスタ形式からのフィルタとしてCUPSにデフォルトで含まれているものは、PCL (Printer Control Language)、ESC/PまたはESC/P2、およびDymoへのフィルタである。ただし、CUPSで用いることができるいくつかの代替フィルタもある。CUPSの開発元であるEasy Software Productsは独自のCUPSフィルタをリリースしている。Gimp-Printは幅広い範囲の(主として)インクジェット・プリンタに対する高精度なドライバであり、LinuxのTurbo-Printはやはり様々な種類のプリンタに対しての種々のドライバを有している。
バックエンド
バックエンドはデータをプリンタに送る手段である。CUPSで有効なバックエンドには、パラレル・ポート、シリアル・ポート、およびUSBポートのプリンタとともに、IPP (Internet Printing Protocol)、JetDirect (AppSocket)、lpd (line printer daemon)、SMB (Server Message Block) プロトコルを介して処理されるネットワーク・バックエンドがある。
互換性
伝統的な印刷コマンドがCUPSでも用いることができるようにCUPSはSystem V形式とBSD形式の両方の印刷コマンドを与えている。CUPSは伝統的なlpdポートであるポート515を監視し、それを「バックエンド」として取り扱う。CUPSをインストールすると、System Vの印刷システムに対応するlp
コマンドとBSDの印刷システムに対応するlpr
コマンドとが互換プログラムとしてインストールされる。これらはCUPSへの標準的なインターフェースとなり、これらの印刷システムに依存する現存するアプリケーションとの最大限の互換性を保つ。
注釈
外部リンク
- Common UNIX Printing System
- Project: Gimp-Print - Top Quality Printer Drivers: Summary
- 2ch Linux Beginners 印刷関連FAQ集
- ↑ Michael Sweet (June 9, 1999), "A Bright New Future for Printing on Linux", Linux Today, および続報記事 Michael Sweet (June 11, 1999), "The Future Brightens for Linux Printing", Linux Today
- ↑ Easy Software Products, CUPS Licensed for Use in Apple Operating Systems! (press release), March 1, 2002
- ↑ CUPS Purchased by Apple Inc. (press release), July 11, 2007