Common Unix Printing System
出典: フリー百科事典『ウィキペディア(Wikipedia)』
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]
[編集] 概要
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 自体の説明資料のために web を用いたインターフェースを提供している。
スケジューラは、IPP と HTTP のどのメッセージがシステムに受け渡せるかを制御するための 承認モジュール を有している。 IPP/HTTP パケットは一旦承認されると、やって来る接続を監視しそれを処理している クライアント・モジュール に送られる。 クライアント・モジュールはまた、必要に応じて web 基盤のプリンタ、「クラス」、ジョブの実行状況のモニタと管理をサポートするための外部 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
であるか、ファイルのテキストの始めの 1 KiB が印刷可能な文字からなっていて、かつ <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 への標準的なインターフェースとなり、これらの印刷システムに依存する現存するアプリケーションとの最大限の互換性を保つ。
[編集] 注釈
- ^ Michael Sweet (June 9, 1999), "A Bright New Future for Printing on Linux", Linux Today & followup from 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.
[編集] 外部リンク
- Common UNIX Printing System
- Project: Gimp-Print - Top Quality Printer Drivers: Summary
- 2ch Linux Beginners 印刷関連FAQ集