このリポジトリには、PAPPL を使用して複数のオペレーティング システムからの IPP 印刷をサポートする PostScript プリンタ用のプリンタ アプリケーションが含まれています。さらに、cups-filters 2.x (libcupsfilters、libppd のフィルター関数) および pappl-retrofit (プリンター アプリケーションでのクラシック CUPS ドライバーのカプセル化) のリソースを使用します。この作業 (または現在の pappl-retrofit のコード) は hp-printer-app から派生しています。
あなたの貢献を歓迎します。問題やプルリクエストを投稿してください。
非ラスター プリンター アプリケーション: 宛先形式は PostScript、高レベル/ベクター形式です。 PostScript または PDF の入力データが受け入れられ、ラスター ステップを介さずに必要な変換が行われます。
Cups-filters 2.x の新しいフィルター機能を使用するプリンター アプリケーション。フィルター関数は CUPS フィルターから派生したライブラリ関数であり、2000 年の CUPS の導入から数十年にわたる開発と改良が含まれています。
クラシック CUPS ドライバー用のレトロフィット プリンター アプリケーション。この場合は、PostScript プリンター用の PPD ファイルのみの最も単純な形式です。 Snap に含まれるリポジトリから PPD ファイルをリストし、実際のプリンタに必要な PPD をロードし、PPD からオプションを抽出して Web インターフェイスに表示し、ジョブ設定を IPP 属性として受け入れ、PPD によって提供される PostScript コードを正しく挿入します。出力データストリームに追加されます。
raw (入力形式はプリンタのネイティブ形式) ジョブを通過しないプリンタ アプリケーション。 PPD ファイルの PostScript コードが常に出力ストリームに挿入されるようにするために、プリンターのネイティブ形式を「application/vnd.printer-specified」と呼びます。これは入力形式としては存在しないため、「application/postscript」入力が強制されます。 psstops() フィルター関数を使用します。
拡張可能なプリンタ アプリケーション: ユーザーは、管理 Web インターフェイスを介して PPD ファイルを追加して、追加のプリンタ モデルをサポートできます。
その他のプロパティは次のとおりです。
一連のフィルターにデータを渡すためにサブプロセスにフォークするためのコードを再作成する必要を避けるために、データをプリンターに送信するフィルター関数を作成し、実際に変換するフィルターのチェーンを形成します。関数 (pstops() と pdftops() のいずれか) と、filterChain() フィルター関数を使用したこのフィルター関数。
PWG/Apple ラスター入力の場合、処理がストリーミングされるようにラスター コールバックを使用し、大規模なジョブや無限に長いジョブも可能にします。 libppd 関数を使用して PPD オプションの PostScript コードを出力ストリームに挿入し、filterPOpen() 関数を使用して libppd 関数のファイル記述子を作成してデータをデバイスに送信します。
PostScript プリンタ アプリケーション スナップには、foomatic-db および HPLIP プロジェクトのすべての PostScript PPD ファイルが組み込まれているため、通常 Linux ディストリビューションに付属するほとんどの PostScript プリンタ PPD に組み込まれています。この膨大な数の PPD によってスナップのサイズが肥大化するのを避けるために、pyppd を使用して PPD を高度に圧縮します。一部の PPD は追加機能のために特定の CUPS フィルターを使用することに注意してください。これらのフィルターはスナップに含まれているため、追加機能 (ほとんどの場合、PIN で保護された印刷) がサポートされます。ユーザーは、スナップを再構築することなく、追加の PPD を追加できます (以下を参照)。
プリンターの IEEE-1284 デバイス ID を使用して、最初にそれが PostScript プリンターであることを識別し (CMD: フィールド経由)、それがサポートされているかどうかを確認し、次にメーカーとモデルを介して PPD で明示的にサポートしているかどうかを確認します。 PPD がない PostScript プリンタには、汎用 PPD が割り当てられます。 make/model ルックアップの前に CMD: フィールドをチェックすることで、PostScript がアドオン モジュールによって提供されている場合、そのモジュールが実際にインストールされていることを確認します。
標準ジョブの IPP 属性は、それらに最適な PPD オプション設定にマッピングされるため、ユーザーは、標準の IPP 属性のみをサポートし、PPD オプションを取得できないあらゆる種類のクライアント (電話や IoT デバイスなど) から印刷できます。トレイ、メディア サイズ、メディア タイプ、両面印刷は簡単にマッピングできますが、色と品質となると、関連するオプションが PPD ファイルで大きく異なるため、マッピングはさらに複雑になります。ここではprint-color-mode
( color
/ monochrome
)、 print-quality
( draft
/ normal
/ high
)、現在のプリンターの PPD でprint-content-optimize
( auto
/ photo
/ graphics
/ text
/ text-and-graphics
) を設定します。そのため、プリンター固有のオプション設定を操作することなく、プリンターの品質や速度を最大限に活用することができます (元のオプションには Web 管理インターフェイスから引き続きアクセスできます)。
特定のプリンター モデルのプリンター機能 (プリンター アプリケーションの「ドライバー」) は、プリンター アプリケーションで設定された印刷キューの存続期間中は静的ではありません。ユーザーは、Web 管理インターフェイスのページを介して、どのハードウェア アクセサリ (追加の用紙トレイ、両面印刷ユニット、フィニッシャーなど) をプリンタにインストールするかを設定でき、プリンタ アプリケーションはドライバのデータ構造を更新し、これによりプリンタの機能が更新されます。 get-printer-attributes IPP リクエストに対する応答は適切に更新されます。
PostScript は本格的なプログラミング言語であり、多くの PostScript プリンタでは、オプションの設定や、適切な PostScript コードを実行するインストール可能なハードウェア アクセサリの有無を照会できます。設定を照会できる場合、メーカーは必要な PostScript コードを照会可能なオプションとともに PPD ファイルに組み込みます。これらのクエリは、プリンター アプリケーションの Web インターフェイスによってサポートされています。
利用可能なプリンタ デバイスは、PAPPL 独自のバックエンドではなく、CUPS のバックエンドで検出 (および使用) されます。この方法では、互換性の問題がある USB プリンタに対する奇妙な回避策が使用され (編集可能であり)、PostScript 出力をソケット (通常はポート 9100) に加えて、IPP、IPPS (暗号化!)、および LPD 経由でプリンタに送信できます。 SNMP バックエンドを構成できます (コミュニティ、アドレス スコープ)。
異常なシステム構成またはパーソナル ファイアウォールを使用している場合、プリンターが検出されない可能性があります。この状況では、完全に手動で「ネットワーク プリンタ」エントリをホスト名/IP フィールドと組み合わせて使用すると便利です。
[PPD ファイルの追加] ページで、追加済みのユーザー PPD ファイルのリストに、ユーザーがこれらのファイルを削除しないように、プリンター アプリケーションで設定されたプリンターで実際に使用されるファイルをマークします。
ベンダー オプションの人間が読める文字列 (PAPPL によるサポートが必要: 問題 #58: ローカリゼーション サポート)
国際化/ローカリゼーション (PAPPL によるサポートが必要: 問題 #58: ローカリゼーションのサポート)
ps_status() 関数による SNMP インク レベル チェック (PAPPL によるサポートが必要: 問題 #83: CUPS はバックエンド経由で IPP および SNMP インク レベル ポーリングを実行します。PAPPL にはこのための機能が必要です)
カップフィルターのビルドオプション。libqpdf および/または libppd なしでビルドします。前者では、QPDF をダウンロードしてビルドしなくても、このプリンター アプリケーションのスナップを作成できます。
このプリンター アプリケーションを実行して使用するには、Snap ストアからインストールするだけです。
sudo snap install --edge ps-printer-app
次に、以下の手順に従ってセットアップします。
スナップを自分で構築するには、このリポジトリのメイン ディレクトリで次のコマンドを実行します。
snapcraft snap
これにより、必要なパッケージがすべてダウンロードされ、PostScript プリンター アプリケーションが構築されます。 PAPPL (近日公開予定の 1.0) と Cups-filters (予定日 2.0) は、まだ適切なリリースがないため、GIT リポジトリから直接プルされることに注意してください。これにより、このプリンター アプリケーションが突然ビルドされなくなる可能性もあります。
注: Ubuntu Groovy (20.10) には、スナップの構築を妨げるバグがあります。Snapcraft フォーラムのこのディスカッションを参照してください。この問題はすでに解決されていますが、まだ Groovy には反映されていません。
古い (20.04 など) または新しい (21.04 など) の Ubuntu バージョンは動作するはずです。
結果のスナップ実行をインストールするには
sudo snap install --dangerous ps-printer-app_1.0_amd64.snap
プリンター アプリケーションはサーバー デーモンとして自動的に起動されます。
Webインターフェイスに入る
http://localhost:8000/
Web インターフェイスを使用してプリンターを追加します。名前を入力し、検出されたプリンターを選択して、メーカーとモデルを選択します。また、インストールされているアクセサリ、ロードされているメディア、およびオプションのデフォルトを設定します。アクセサリの構成とオプションのデフォルトもプリンタからポーリングされる場合があります。
次に、PDF、PostScript、JPEG、Apple Raster、または PWG Raster ファイルを印刷します。
ps-printer-app FILE
または、CUPS で印刷します。CUPS (およびカップブラウズ) は、このプリンター アプリケーションでセットアップされたプリンターをドライバーレス IPP プリンター (IPP Everywhere および AirPrint) として検出して扱います。
Web インターフェイスの [PPD ファイルの追加] ボタンを使用するか、PPD ファイルを手動でコピーすることで、スナップを再構築せずに PPD ファイルを追加することもできます。
sudo cp PPDFILE /var/snap/ps-printer-app/common/ppd/
PPD ファイルを手動でコピー (または削除) した後は、サーバーを再起動するか、Web インターフェイスで [PPD ファイルの追加] ページの下部にある [更新] ボタンをクリックする必要があります。これにより、内部ドライバーのリストに変更が追加されます。
ドライバーを選択するためのドロップダウンの [プリンターの追加] ページでは、ユーザーが追加した PPD ファイルには [ユーザー追加] のマークが付けられます。自動ドライバー選択を使用してプリンターをセットアップする場合は、ユーザーが追加した PPD ファイルが優先されます。
上記のコマンドラインのPPDFILE
、単一の PPD ファイルだけでなく、任意の数の単一の PPD ファイル、PPD (任意のディレクトリ構造内) を含む.tar.gz
ファイル、および通常/usr/lib/cups/driver
に置かれる PPD 生成実行可能ファイルを指定することもできます。 /usr/lib/cups/driver
. /var/snap/ps-printer-app/current/ppd/
に、前述の種類のファイルを含む任意のサブディレクトリ構造を作成することもできます。 PPD ファイルのリストと生成以外のことを行う実行可能ファイルをそこに置かないように注意してください。
Web インターフェイスでは、 /var/snap/ps-printer-app/current/ppd/
自体で個別の PPD (非圧縮またはgzip
で圧縮) のみを管理できることに注意してください。アーカイブ、実行可能ファイル、またはサブディレクトリは表示されず、適切なアップロードは受け入れられません。これにより、特に root 権限のない実行可能ファイルの追加が防止されます。
追加される PPD ファイルはすべて PostScript プリンタ用である必要があります。非 PostScript PPD ファイルは CUPS ドライバ用であるため、動作するには追加のファイルが必要であり、そのようなファイルはこのプリンタ アプリケーションではサポートされていません。 [PPD ファイルの追加] ページには、そのようなファイルがアップロードされた場合に警告が表示されます。
見る
ps-printer-app --help
さらなるオプションについては。
ターミナル ウィンドウで詳細なログを記録するには、「-o log-level=debug」引数を使用します。
/var/snap/ps-printer-app/common/usb/
にファイルを追加して、USB quirk ルールを追加できます。既存のファイルは、(新しいルールを導入するため) スナップが更新されるたびに置き換えられるため、簡単なテストの場合にのみ編集してください。
/var/snap/ps-printer-app/common/cups/snmp.conf
ファイルを編集して、SNMP ネットワーク プリンター検出を構成できます。
また、スナップを行わず、PAPPL、cups-filters 2.x、および pappl-retrofit をシステムにインストールすることなく、「クイック アンド ダーティ」ビルドを実行することもできます。 PAPPL の最新の GIT スナップショット、cups-filters の最新の GIT スナップショット、pappl-retrofit の最新の GIT スナップショット (それぞれのマスター ブランチ) が含まれるディレクトリが必要です。これらはすべてコンパイルする必要があります ( ./autogen.sh; ./configure; make
)。インストールは必要ありません。また、必要なすべてのライブラリのヘッダー ファイルもインストールします (「libcups2-dev」をインストールすると完了します)。
ps-printer-app.c のあるディレクトリでコマンド ラインを実行します。
gcc -o ps-printer-app ps-printer-app.c $PAPPL_SRC/pappl/libpappl.a $CUPS_FILTERS_SRC/.libs/libppd.a $CUPS_FILTERS_SRC/.libs/libcupsfilters.a $PAPPL_RETROFIT_SRC/.libs/libpappl-retrofit.a -ldl -lpthread -lppd -lcups -lavahi-common -lavahi-client -lgnutls -ljpeg -lpng16 -ltiff -lz -lm -lusb-1.0 -lpam -lqpdf -lstdc++ -I. -I$PAPPL_SRC/pappl -I$CUPS_FILTERS_SRC/ppd -I$CUPS_FILTERS_SRC/cupsfilters -I$PAPPL_RETROFIT_SRC/pappl/retrofit -L$CUPS_FILTERS_SRC/.libs/ -L$PAPPL_RETROFIT_SRC/.libs/
Makefile もありますが、これには PAPPL、cups-filters 2.x、および pappl-retrofit をシステムにインストールする必要があります。
走る
./ps-printer-app --help
スナップされていないバージョンを実行する場合、デフォルトでは、PPD ファイルは次の場所で検索されます。
/usr/share/ppd/
/usr/lib/cups/driver/
/var/lib/ps-printer-app/ppd/
最後のパスは、Web インターフェイスの [PPD ファイルの追加] ページを使用して PPD ファイルを追加するときに使用されます。
代わりに、 PPD_PATHS
環境変数を設定して他の場所を検索できます。
PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
コロンで区切られた任意の数のパスのリストを変数に入力するだけです。常に最後のパスが「PPD ファイルの追加」ページで使用されます。ラッパースクリプトを作成することをお勧めします。
このプリンタ アプリケーションは、PAPPL ではなく CUPS のバックエンドを使用します。つまり、USB プリンタには、互換性問題に対する CUPS の USB quirk 回避策が使用され、ネットワーク プリンタは IPP、IPPS、および LPD プロトコルでも使用でき、SNMP プリンタ検出は構成可能です。
/usr/share/cups/usb
および/etc/cups/snmp.conf
ファイルの USB Quirk ルールは、必要に応じて編集できます。
CUPS (少なくともそのバックエンド) がインストールされていることを確認してください。
PDF ジョブを印刷するには Ghostscript も必要です。
テスト ページtestpage.ps
にアクセスするには、TESTPAGE_DIR 環境変数を使用します。
TESTPAGE_DIR=`pwd` PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
または、テスト ページ (PostScript、PDF、PNG、JPEG、Apple Raster、PWG Raster) を独自に作成する場合:
TESTPAGE=/path/to/my/testpage/my_testpage.ps PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
PostScript プリンター アプリケーションの著作権は Till Kamppeter によって著作権 © 2020 に帰属します。
これは、PAPPL を使用したラスター プリンター アプリケーションの最初の実用モデルである HP PCL プリンター アプリケーションから派生したものです。ここから入手できます:
https://github.com/michaelrsweet/hp-printer-app
HP PCL プリンター アプリケーションの著作権 © 2019-2020 by Michael R Sweet です。
このソフトウェアは、GPL2/LGPL2 ソフトウェア (古いバージョンの CUPS など) に対するリンクを許可する例外を除いて、Apache ライセンス バージョン 2.0 に基づいてライセンスされています。詳細については、ファイル「LICENSE」および「NOTICE」を参照してください。