Linux Foundation プロジェクト

このページでは、Google Season of Docs に承認された技術文書作成プロジェクトの詳細について説明します。

プロジェクトの概要

オープンソース組織:
Linux Foundation
テクニカル ライター:
PIYUSHgoyal16
プロジェクト名:
プリンタ アプリケーションのプリンタ/スキャナ ドライバのチュートリアルと設計ガイドライン
プロジェクトの長さ:
標準の期間(3 か月)

プロジェクトの説明

概要

プリンタ固有のフィルタと、ファイル システムの特定のディレクトリにドロップする必要がある PPD(Postscript Printer Description、プリンタの機能と呼び出すフィルタの説明)ファイルで構成される従来のプリンタ ドライバは、IPP ネットワーク プリンタのエミュレーションであるプリンタ アプリケーションに置き換えられます。

最新の汎用プリンタのほとんどは、ドライバレス印刷を可能にする IPP プリンタです。DNS-SD を介して自己アドバタイズを行い、クライアントは IPP リクエストを介して機能情報をポーリングできます。また、印刷ジョブに標準データ形式を使用します。この機能がないプリンタで、通常、従来のプリンタや特殊なプリンタにはプリンタ ドライバが必要です。

プリンタ アプリケーションは、サポートされているプリンタを検出し、それらのプリンタを IPP Everywhere プリンタとして localhost でアドバタイズするデーモンです。プリンタ アプリケーションには、受信ジョブをサポート対象のプリンタで印刷するソフトウェアが含まれています。このソフトウェアは、データをプリンタのネイティブ言語に変換します。また、リクエストに応じてプリンタの機能に関する情報をクライアントに提供します。プリンタ アプリケーションには、実際のネットワーク プリンタのようなウェブ管理インターフェースもあります。

ご存じのとおり、Linux はサンドボックス化されたパッケージ(Snap など)に移行しており、印刷もその方向に進んでいます。サンドボックス化されたパッケージでは、ビルド後にディレクトリの内容を変更することはできません。システムはモジュール式ではなくなっています。インストールするプリンタ ドライバ パッケージを選択することはできません。プリンタ アプリケーションは、このモジュラー性の問題に対処し、プリンタ ドライバの場合と同じ自由度を提供します。

Snap 内のプリンタ ドライバとスキャナ ドライバは、スナップされた CUPS とスナップされたアプリケーションの要件であるだけでなく、完全に従来のシステムでも動作します。ただし、従来のパックされたドライバとは異なり、OS ディストリビューションに依存しません。プリンタ ドライバの Snap を作成すると、snapd を実行するすべての OS ディストリビューションで動作します。各ディストリビューション(およびそのバージョン)のプリンタ ドライバを個別にパッケージ化して、依存関係の悪循環に陥る必要はありません。もう一つの利点は、PostScript プリンタに由来する PPD ファイルの従来の概念が廃止されたことです。さらに、CUPS システムにファイルをドロップする代わりに、CUPS システムとプリンタ ドライバを IP 接続で接続することで、CUPS システムとプリンタ アプリケーションの両方を別々のサンドボックス パッケージにすることができます。

ここでは、この形式のパッケージング用にプリンタとスキャナのドライバを設計し、Snap にパッケージ化する方法について説明します。プリンタ ドライバやスキャナ ドライバを記述するすべての人(特にハードウェア メーカー)が、今後正しい方法でドライバを記述できるようにすることが目的です。

プリンタ アプリケーションのワークフローは、次のフローチャートによって要約できます。

このようなプリンタ/スキャナ アプリケーションの作成の基盤となるのは PAPPL です。これは、このためのほとんどの機能を提供するライブラリですが、プリンタ アプリケーションに使用されるコードを含む cups-filters も提供します。このコンセプトは、主に今年の Google Summer of Code で開発中ですが、ドキュメント作成期間が始まる 9 月 14 日には GSoC のコーディング期間はすでに終了しており、OpenPrinting ではこの時点でチュートリアルが必要になります。

ジョブデータの構造を定義するプリンタ ドライバのテンプレート

メディアサイズの定数配列を宣言する

関数を宣言します。 i)コールバックまたは初期化 ドライバー名、ドライバーデータなどを受け取り、対応するドライバー属性を設定するブール値関数。指定された詳細が適切であれば、失敗時に true と false が返されます。

ii)ジョブを承諾するブール値関数、ジョブとデバイスのオプション。ファイルを出力し、成功した場合は true、失敗した場合は false を返します。

iii)ジョブを受け入れる rendjob ブール関数、ジョブとデバイスのオプション。ジョブが終了し、成功した場合は true、失敗した場合は false を返します。

iv)ジョブを受け入れる rendpage ブール値関数、ジョブのオプション、デバイス、ページ番号。ページが終了し、成功した場合は true、失敗した場合は false を返します。

v)ジョブ、ジョブのオプション、デバイスを受け入れるブール関数 rstartjob。ジョブを開始し、成功した場合は true、失敗した場合は false を返します。

vi)rstartpage ジョブ、ジョブのオプション、デバイス、ページ番号を受け入れるブール値関数。ページが開始され、成功した場合は true、失敗した場合は false を返します。

vii)rwrite ジョブを受け入れるブール値関数。ジョブのオプション、デバイス、行番号、文字配列。行を書き込み、成功した場合は true、失敗した場合は false を返します。 viii)identify(指定されたアクションに基づいてプリンタを識別する)、compress(グラフィックの行を圧縮する)などのオプション機能