Linux Foundation プロジェクト

このページには、Google シーズンのドキュメントで受け入れられているテクニカル ライティング プロジェクトの詳細が記載されています。

プロジェクトの概要

オープンソースの組織:
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 システムにドロップするのではなく、IP 接続によって CUPS システムとプリンタ ドライバを結合することで、CUPS システムとプリンタ アプリケーションの両方を別々のサンドボックス パッケージに格納できます。

私の仕事は、この形式のパッケージング用のプリンタとスキャナのドライバを設計する方法と、Snap にパッケージ化する方法を説明することです。その目的は、プリンタやスキャナのドライバを作成するすべての人、特にハードウェア メーカーが、将来的に適切に記述できるように支援することです。

プリンタ申請のワークフローは、次のフローチャートで要約できます。

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

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

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

関数を宣言します。i)コールバックまたは init。ドライバ名やドライバデータなどを受け入れ、それに応じてドライバの属性を設定するブール値関数です。提供された詳細が正しい場合は、失敗時に 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)識別(指定されたアクションに基づいてプリンタを識別するのに役立ちます)、圧縮(グラフィックの行を圧縮)などのオプション関数。