CUPS

CUPS (Common UNIX Printing System) について



CUPS(カップス、以前の名称はCommon UNIX Printing System)は、[Unix系]]オペレーティングシステム] 用のモジュール化された印刷システムです。このシステムは、[[Unix系OSが抱えていた印刷機能の遅れを解消し、強力な印刷環境を提供することを目的として開発されました。

CUPSの主な特徴



多様なプリンター対応: CUPSは、Unix系OSで必要だったプリンターごとのデバイスドライバ作成を容易にし、従来のラインプリンターPostScriptプリンターだけでなく、Macintosh/Windows向けに市販されているほぼ全てのプリンターUnix系OS上で利用可能にしました。
クライアント/サーバーモデル: CUPSを導入したコンピュータは印刷サーバーとして機能し、クライアントからの印刷ジョブを受け付け、適切なプリンターへ送信します。この際、HTTPのBasic認証やDigest認証、ローカル認証、128ビットTLS/SSL暗号化などのセキュリティ機能を利用できます。
モジュール構造: CUPSは、Unixの印刷スプーラ、スケジューラ、フィルタシステム、バックエンドシステムから構成されています。フィルタシステムは印刷データをプリンターが解釈できる形式に変換し、バックエンドシステムは変換されたデータをプリンターに送信します。
標準プロトコルの利用: 印刷ジョブの基盤としてIPP (Internet Printing Protocol) を採用し、System V形式やBSD形式のコマンドラインインタフェースもサポートします。また、SMBプロトコルも部分的にサポートしており、Windows環境との連携も可能です。
PPDファイルによる設定: デバイスドライバの設定には、アドビのPPD (PostScript Printer Description) 形式のテキストファイルを使用します。
Webインターフェース: CUPS自身がWebベースの設定インターフェースを提供しており、多くのプラットフォーム向けに様々なユーザーインターフェースが開発されています。ESP Print Proのような商用パッケージから、KUPS、GtkLP、QtKUPS、XPPなどのオープンソースGUIツールまで、選択肢が豊富です。
ライセンス: macOS版はプロプライエタリライセンスですが、その他のOS向けにはApache Licenseで配布されています。

CUPSの歴史



CUPSは、1999年秋にEasy Software Productsのマイケル・スイートとアンドルー・ゼンフトによって開発が開始されました。初期の段階ではlpd (line printer daemon) を使用していましたが、プリンターとの相性問題からIPPもサポートされるようになりました。

CUPSは、Red Hat LinuxなどのLinuxディストリビューションで標準の印刷システムとして採用され、2002年3月にはApple ComputerがMac OS X v10.2のデフォルト印刷システムとして採用しました。2007年2月には、Appleが主要開発者であるマイケル・スイートを雇用し、CUPSのソースコードを取得しています。2019年12月20日、マイケル・スイートはAppleを退職しましたが、2020年にはOpenPrinting organizationでCUPSの開発を継続しています。

当初、CUPSは "Common UNIX Printing System" と呼ばれていましたが、UNIX商標に関する法的な懸念から、CUPS 1.4以降は "CUPS" と短縮されました。

CUPSの動作原理



CUPSは、印刷ジョブをプリンターへ送信するための標準的なメカニズムを提供します。印刷データはまずスケジューラに送られ、スケジューラはジョブをプリンターが理解できる形式に変換するため、フィルタシステムに送ります。その後、フィルタシステムは変換されたデータを、デバイスやネットワークに送信するバックエンドに渡します。

CUPSのシステムは、PostScriptとラスタグラフィックスを最大限に活用して、データをプリンターが理解できる形式に変換します。これにより、多様なプリンターに対応することが可能になっています。

CUPSの利点



CUPSの最大の利点は、標準化され、モジュール化された印刷システムであることです。以前は、市場に出回るプリンターごとに独自の言語や形式があり、標準的な印刷処理システムが存在しませんでした。System Vやバークレーの印刷システムは互換性がほとんどなく、複雑なスクリプトや一時的な手段でデータを変換する必要がありました。また、データ形式を自動的に検出する機能もなかったため、各ワークステーションでデータ変換を行う必要がありました。

CUPSでは、プリンターメーカーやドライバ開発者が専用ドライバを簡単に作成できるようになり、サーバ上で処理することでネットワーク印刷が容易になりました。Sambaを利用すれば、リモートのWindowsコンピュータからPostScriptドライバを使って印刷することも可能です。

CUPSの主要コンポーネント



スケジューラ

CUPSスケジューラは、IPPまたはlpdプロトコルを使用できます。HTTP/1.1リクエストを解釈し、印刷ジョブの管理、サーバー設定、CUPSドキュメントへのWebインターフェースを提供します。

スケジューラには、システムに受け渡されるメッセージを制御する承認モジュールがあります。承認されたパケットはクライアントモジュールに送られ、クライアントモジュールはWebベースのプリンタ、クラス、ジョブ状況のモニタリングと管理のための外部CGIプログラムの実行を処理します。クライアントモジュールがリクエストを処理すると、データはIPPモジュールに送られ、URIの検証を行い、HTTPサーバーのアクセス制限や認証を回避できないようにします。

スケジューラはプリンターをクラスにグループ化できます。ジョブはクラスに送られ、スケジューラはクラス内で最初に利用可能なプリンターを選択してジョブを送ります。ジョブモジュールは、印刷ジョブをフィルタとバックエンド処理に送り、ステータスメッセージを監視します。設定モジュールはCUPSのデータ構造を初期化し、設定ファイルを解析してCUPSプログラムを起動し、処理中はサービスを停止し、完了後に再開します。

ログモジュールは、アクセス、エラー、ログファイルの操作に関するスケジューラのイベントログを記録します。メインモジュールは、タイムアウトとクライアントからのI/Oリクエストを処理し、シグナルを監視し、サーバー設定ファイルの再読み込みや子プロセスのエラーと終了を処理します。

スケジューラで使われるその他のモジュールには、MIME型と変換データベースを扱うMIMEモジュール、PPDファイルを扱うPPDモジュール、デバイスリストを扱うデバイスモジュール、CUPS内のプリンターとPPDを扱うプリンターモジュールがあります。

フィルタシステム

CUPSの大きな利点の一つは、さまざまなデータ形式を印刷サーバーで処理できることです。印刷ジョブは、一連のフィルターを通ってプリンターの最終的な言語と形式に変換されます。この変換はMIME型によって抽象化され、CUPSはmime.typesとmime.convsの2つのMIMEデータファイルを使用します。mime.typesはファイルの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で始まる場合に、ファイルがtext/html MIME型であるとみなされることを意味します。

mime.convsファイルは、以下のような行で構成されます。


text/plain application/postscript 50 texttops


1番目と2番目のカラムは、それぞれ変換前のMIME型と変換後のMIME型を表します。3番目のカラムは、ファイルの変換コストを表し、フィルタシステムが変換時にどのフィルターの組み合わせを選択するかを決定する評価基準となります。最後のカラムは、データを変換するためのフィルタープログラムを表します。したがって、text/plain型のファイルは、texttopsフィルターによってコスト50でapplication/postscript型に変換されることになります。

フィルタシステムは、プリンターキューまたは印刷フィルター名、印刷ジョブのジョブ番号、ユーザー名、ジョブ名、部数、その他の印刷オプション、およびファイル名(標準入力からリダイレクトされた場合は不要)を引数として受け取ります。その後、MIMEデータベースを使用して入力データの型と使用されるフィルターを決定します。

画像データであれば特定のフィルターで処理され、HTMLデータであれば別のフィルターで処理されます。これらのデータは、PostScriptデータに変換されるか、直接ラスタデータに変換されます。PostScriptデータに変換された場合は、プレフィルターと呼ばれる追加のフィルターが適用され、印刷ページ範囲の指定やN-Upモード設定などのプリンター固有のオプションを追加するためのPostScript変換プログラムが適用されます。

プレフィルターによる処理後、PostScriptプリンターを使用する場合は、データはCUPSバックエンドに送られ、そうでない場合は別のフィルターやGhostscriptで処理されます。PostScriptは、プリンターに依存しない中間形式のCUPSラスタフォーマット(application/vnd.cups-raster)に変換されます。最後に、この中間ラスタ形式はプリンター固有の形式に変換されます。

このラスタ形式からフィルタリングするデフォルトのCUPSフィルターには、PCL(Printer Command Language)、ESC/PまたはESC/P2、およびDymoがあります。また、CUPSで使用可能な代替フィルターもあります。CUPSの開発元であるEasy Software Productsは、独自のCUPSフィルターをリリースしています。Gimp-Printは、主にインクジェットプリンター向けの高品質なドライバーであり、LinuxのTurbo-Printもさまざまなプリンタードライバーを提供しています。

バックエンド

バックエンドは、プリンターにデータを送信する役割を果たします。CUPSで使用できるバックエンドには、パラレルポートシリアルポート、USBポートに接続されたプリンターのほか、IPP、JetDirect (AppSocket)、lpd、SMBプロトコルを介したネットワークバックエンドがあります。

互換性


CUPSは、従来の印刷コマンドが使えるように、System VとBSDの両方の形式をサポートしています。CUPSは従来のlpdポートであるポート515を監視し、それをバックエンドとして扱います。CUPSをインストールすると、System Vの印刷システムに対応するlpコマンドとBSDの印刷システムに対応するlprコマンドが互換プログラムとしてインストールされ、既存のアプリケーションとの互換性を最大限に保ちます。

注釈



外部リンク


公式ウェブサイト
GitHub - apple/cups: Apple CUPS Sources
OpenPrinting CUPS
Project: Gimp-Print - Top Quality Printer Drivers: Summary
2ch Linux Beginners 印刷関連FAQ集

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。