第11章 プリンタの運用

目次

11.1. 印刷システムのワークフロー
11.2. プリンタに接続するための方法とプロトコル
11.3. ソフトウェアのインストール
11.4. ネットワークプリンタ
11.5. コマンドラインからの印刷
11.6. での特殊機能SUSE Linux Enterprise Server
11.7. トラブルシューティング

SUSE Linux Enterprise Serverは、リモートネットワークプリンタも含め、さまざまな種類のプリンタを使った印刷をサポートしています。プリンタは手動、またはYaSTを使用して設定できます。設定の詳細については、「プリンタの設定」 (第8章 YaSTによるハードウェアコンポーネントの設定, ↑導入ガイド)を参照してください。プリントジョブの開始、管理には、グラフィカルインタフェースまたはコマンドラインユーティリティの両方を利用できます。 プリンタが正常に動作しない場合は、11.7項 「トラブルシューティング」を参照してください。

CUPS(Common Unix Printing System)は、SUSE Linux Enterprise Serverの標準印刷システムです。

プリンタは、インタフェース(USB、ネットワークなど)と、プリンタ言語によって区別できます。プリンタの購入時には、プリンタにご利用のハードウェアで利用できるインタフェース(USBやパラレルポートなど)が搭載されていること、およびプリンタの対応言語が正しいことをご確認ください。プリンタは、次の3つのプリンタ言語クラスに基づいて分類できます。

PostScriptプリンタ

PostScriptは、LinuxとUnix環境のほとんどの印刷ジョブを生成する際に使用されるプリンタ言語であり、内部の印刷システムもこの言語を使用して処理を行います。使用中のプリンタがPostScriptドキュメントを直接処理でき、印刷システム側で追加のステージを使用して変換を行う必要がない場合、潜在的なエラーの原因の数が減少します。

標準的なプリンタ(PCLおよびESC/Pなどの言語)

これらのプリンタ言語はかなり古いのですが、プリンタで新機能を実現するために、引き続き拡張が行われています。既知のプリンタ言語の場合、印刷システムはGhostscriptの支援により、PostScriptのジョブを該当のプリンタ言語へ変換できます。この処理ステージを「解釈」(interpreting)と呼びます。非常によく知られている言語としては、ほとんどのHPのプリンタおよび互換モデルが採用しているPCLと、Epsonのプリンタが採用しているESC/Pがあります。これらのプリンタ言語は、通常、Linuxによってサポートされており、十分な印刷結果が得られています。Linuxは、一部の特殊な印刷機能に対応できない場合があります。HPが開発したHPLIP(HP Linux Imaging and Printing)を除き、現時点では、Linuxドライバを開発してオープンソースライセンスでそれらをLinuxディストリビュータに提供するプリンタメーカは存在しません。

独自規格のプリンタ(GDIプリンタ)

これらのプリンタは、共通のプリンタ言語をサポートしていません。これらのプリンタは独自のプリンタ言語を使用しており、新しいエディション/モデルがリリースされると、プリンタ言語も変更される可能性があります。一般的にこのようなプリンタでは、Windowsドライバしか利用できません。詳細については、11.7.1項 「標準的なプリンタ言語をサポートしないプリンタ」を参照してください。

新しいプリンタを購入する前に、次の各ソース(情報源)を参照し、購入を予定しているプリンタがどの程度までサポートされているかを確認してください。

http://www.linuxfoundation.org/OpenPrinting/

プリンタデータベースのあるOpenPrintingホームページです。このデータベースは、最新のLinuxサポートステータスを示します。しかし、Linuxのディストリビューションが統合できるのは、製造の時点で使用可能だったドライバだけです。したがって、現時点で完全にサポート済みと評価されているプリンタであっても、最新バージョンのSUSE Linux Enterprise Serverがリリースされた時点では、そのステータスに達していなかった可能性があります。そのため、これらのデータベースは必ずしも正しいステータスを表しているとは限らず、おおよその状況を提示するだけにとどまっています。

http://pages.cs.wisc.edu/~ghost/

GhostscriptのWebページ。

/usr/share/doc/packages/ghostscript-library/catalog.devices

付属するドライバのリスト

11.1. 印刷システムのワークフロー

ユーザが印刷ジョブを作成します。印刷ジョブは、印刷するデータとスプーラの情報から構成されますが、その情報には、プリンタの名前またはプリンタキューの名前だけでなく、必要に応じて、プリンタ固有のオプションなど、フィルタに関する情報も含まれます。

各プリンタには、1つ以上の専用プリンタキューが存在しています。指定のプリンタがデータを受け取れるようになるまで、スプーラは印刷ジョブをキュー内に留めています。プリンタの準備が整うと、スプーラはフィルタおよびバックエンドを経由して、プリンタにデータを送信します。

このフィルタは、印刷中のアプリケーションが生成したデータ(通常的はPostScriptやPDFですが、ASCII、JPEGなどの場合もあります)を、プリンタ固有のデータ(PostScript、PCL、ESC/Pなど)に変換します。プリンタの機能については、PPDファイルに記述されています。PPDファイルには、プリンタ固有のオプションが記述されています。各オプションに対しては、プリンタでそのオプションを有効にするために必要なパラメータが指定されています。フィルタシステムは、ユーザが有効として選択したオプションを確認します。

PostScriptプリンタを選択すると、フィルタシステムがデータをプリンタ固有のPostScriptに変換します。この変換にプリンタドライバは必要ありません。PostScript非対応プリンタを使用すると、フィルタシステムがデータをプリンタ固有データに変換します。この変換には、使用しているプリンタに適応したプリンタドライバが必要です。バックエンドは、プリンタ固有データをフィルタから受信し、そのデータをプリンタに送信します。

11.2. プリンタに接続するための方法とプロトコル

プリンタをシステムに接続するには、さまざまな方法があります。CUPS印刷システムの設定は、ローカルプリンタと、ネットワーク経由でシステムに接続されているプリンタを区別しません。

►System z: IBM System zのメインフレームとローカルに接続するz/VMによって提供されるプリンタおよびその類似デバイスは、CUPSまたはLPRngのどちらにもサポートされていません。これらのプラットフォーム上では、ネットワーク経由の印刷だけを利用できます。ネットワークプリンタのケーブリング(ケーブル接続)は、プリンタメーカの指示にしたがって設置する必要があります。

[Warning]稼働中システムのケーブル接続の変更

プリンタをコンピュータに接続する場合、コンピュータの動作中に接続と取り外しを行って良いのはUSBデバイスだけであることに注意してください。システムやプリンタの損傷を回避するために、USB以外の接続を変更する場合は、あらかじめシステムをシャットダウンしてください。

11.3. ソフトウェアのインストール

PPD (PostScript printer description、PostScriptプリンタ記述)は、PostScriptプリンタの特性(解像度など)やオプション(両面印刷ユニットなど)を記述するコンピュータ言語です。これらの記述は、CUPS側でさまざまなプリンタオプションを使用するために必須です。PPDファイルがない場合、印刷データはraw(ロー、未加工)状態でプリンタへ送信されますが、そのことは通常は望ましくありません。SUSE Linux Enterprise Serverのインストール時に、多数のPPDファイルがプレインストールされます。

PostScriptプリンタを設定する場合、最善のアプローチは、適切なPPDファイルを入手することです。この種の多数のPPDファイルは、標準インストールの範囲内で自動的にインストールされるパッケージmanufacturer-PPDsに用意されています。および11.7.2項 「特定のPostScriptプリンタに適したPPDファイルが入手できない」を参照してください。11.6.2項 「各種パッケージ内のPPDファイル」

新しいPPDファイルは、/usr/share/cups/model/ディレクトリ内に保存するか、YaSTで印刷システムに追加できます(「YaSTによるドライバの追加」 (第8章 YaSTによるハードウェアコンポーネントの設定, ↑導入ガイド)参照)。その後は、プリンタのセットアップ時にPPDファイルを選択できるようになります。

プリンタメーカーがソフトウェアパッケージ全体をインストールさせようとする場合には注意してください。第一に、このタイプのインストールを行うと、SUSE Linux Enterprise Serverによって提供されているサポートが失われる場合があります。第二に、印刷コマンドが異なる動作をする可能性があり、システムが他のメーカーのデバイスに対応できなくなる場合があります。この理由で、メーカのソフトウェアをインストールすることをお勧めしません。

11.4. ネットワークプリンタ

ネットワークプリンタは、さまざまなプロトコルをサポートできますし、その複数を同時にサポートすることも可能です。サポートされているプロトコルのほとんどが標準化されているので、一部のメーカーは標準を変更します。そして、メーカーは、2、3のオペレーティングシステムにのみ対応するドライバを提供します。残念なことに、Linuxドライバはめったに提供されません。現在の状況では、あらゆるプロトコルがLinux環境で円滑に動作するという仮定に基づいて行動することはできません。したがって、機能する設定を実現するために、さまざまなオプションを実験する必要があります。

CUPSは、socketLPDIPP、およびsmbの各プロトコルをサポートしています。

socket

ソケットは、プレインプリントデータのTCPソケットへの直接送信に使用される接続です。一般的に使用されるsocketのポート番号のいくつかは、9100または35です。デバイスURI (uniform resource identifier)の構文は、socket://プリンタのIP:ポートです(たとえば、socket://192.168.2.202:9100/)。

LPD (line printer daemon、ラインプリンタデーモン)

LPDプロトコルについては、RFC 1179で説明されています。このプロトコルの下では、プリンタキューのIDなど、一部のシジョブ関連データが送信されてから、実際の印刷データが送信されます。したがって、LPDプロトコルの設定時にはプリンタキューを指定する必要があります。さまざまなプリンタメーカによる実装は、プリンタキューとして任意の名前を受け入れる柔軟性を備えています。必要に応じて、使用可能な名前がプリンタのマニュアルに提示されています。多くの場合、LPT、LPT1、LP1、または他の類似した名前が使用されています。LPDサービスが使用するポート番号は515です。デバイスURIの例は、lpd://192.168.2.202/LPT1です。

IPP (Internet Printing Protocol、インターネット印刷プロトコル)

IPPは、HTTPプロトコルに基づいた比較的新しい(1999年)プロトコルです。IPPを使用する場合、他のプロトコルより、ジョブとの関連性が高いデータが送信されます。CUPSは、IPPを使用して内部のデータ送信を行います。IPPを正しく設定するには、印刷キューの名前は必須です。IPPのポート番号は631です。デバイスURIの例は、ipp://192.168.2.202/psおよびipp://192.168.2.202/printers/psです。

SMB (Windows共有)

CUPSは、Windows共有に接続されたプリンタへの印刷もサポートしています。この目的で使用されるプロトコルは、SMBです。SMBは、ポート番号137138、および139を使用します。デバイスURIの例は、smb://user:password@workgroup/smb.example.com/printersmb://user:password@smb.example.com/printer、およびsmb://smb.example.com/printerです。

設定を行う前に、プリンタがサポートしているプロトコルを決定する必要があります。メーカーから必要な情報が提供されていない場合は、コマンドnmap(nmapパッケージに付属)を使用して、プロトコルを推定します。nmapはホストのオープンポートを確認します。例:

nmap -p 35,137-139,515,631,9100-10000 printerIP

11.4.1. コマンドラインツールによるCUPS設定

CUPSは、lpinfolpadminlpoptionsなどのコマンドラインツールで設定できます。バックエンド(パラレルなど)とパラメータで構成されるデバイスURIが必要です。システム上の有効なデバイスURIを決定するには、コマンドlpinfo -v | grep ":/"を使用します。

# lpinfo -v | grep ":/"
direct usb://ACME/FunPrinter%20XL
direct parallel:/dev/lp0

lpadminを使用すると、CUPSサーバ管理者は、印刷キューの追加、削除、または管理を実行できます。プリントキューを追加するには、次の構文を使用します。

lpadmin -p queue -v device-URI -P PPD-file -E

このデバイス(-v)は、指定したPPDファイル(-P)を使用して、queue (-p)として使用できます。プリンタを手動で設定する場合は、このPPDファイルとデバイスのURIを把握しておく必要があります。

-Eは、最初のオプションとして使用しないでください。どのCUPSコマンドでも、-Eを最初の引数として使用した場合、暗号化接続を使用することを暗示的に意味します。プリンタを使用可能にするには、次の例に示す方法で-Eを使用する必要があります。

lpadmin -p ps -v parallel:/dev/lp0 -P \
/usr/share/cups/model/Postscript.ppd.gz -E

ネットワークプリンタの設定例:

lpadmin -p ps -v socket://192.168.2.202:9100/ -P \
/usr/share/cups/model/Postscript-level1.ppd.gz -E

lpadminのオプションの詳細は、lpadmin(8)のマニュアルページを参照してください。

プリンタのセットアップ時には、一部のオプションがデフォルトとして設定されています。これらのオプションは、各印刷ジョブ用に変更できます(使用される印刷ツールに依存)。YaSTを使用して、これらのデフォルトオプションを変更することもできます。コマンドラインツールを使用して、デフォルトオプションを次のように設定します。

  1. 最初に、すべてのオプションを列挙します。

    lpoptions -p queue -l

    例:

    Resolution/Output Resolution: 150dpi *300dpi 600dpi

    アクティブになったデフォルトオプションは、先頭にアスタリスク(*)が付いています。

  2. 次のようにlpadminを使用してオプションを変更します。

    lpadmin -p queue -o Resolution=600dpi
  3. 新しい設定値の確認:

    lpoptions -p queue -l
    
    Resolution/Output Resolution: 150dpi 300dpi *600dpi

標準ユーザがlpoptionsを実行すると、設定が~/.cups/lpoptionsに書き込まれます。ただし、root設定は/etc/cups/lpoptionsに書き込まれます。

11.5. コマンドラインからの印刷

コマンドラインから印刷するには、コマンド「lp -d queuenamefilename」を入力し、queuenameおよびfilenameを対応する名前で置き換えます。

一部のアプリケーションでは、印刷処理をlpコマンドに依存しています。この場合、アプリケーションの印刷ダイアログで正しいコマンドを入力します。ただし、通常はfilenameを指定しません。たとえば、「lp -d queuename」と入力します。

11.6. SUSE Linux Enterprise Serverでの特殊機能

CUPSの多くの機能は、SUSE Linux Enterprise Serverで使用できるように調整されています。ここでは、最も重要な変更点について説明します。

11.6.1. CUPSとファイアウォール

SUSE Linux Enterprise Serverのデフォルトインストールの実行後、SuSEFirewall2はアクティブになり、ネットワークインタフェースは着信トラフィックをブロックするExternal Zoneに設定されます。SuSEFirewall2設定の詳細については、「SuSEfirewall2」 (第15章 Masquerading and Firewalls, ↑Security Guide (セキュリティガイド))を参照してください。

11.6.1.1. CUPSクライアント

通常、CUPSクライアントはファイアウォール内部の信頼されるネットワーク環境の通常のワークステージョンで実行されます。この場合、ネットワークインタフェースを内部ゾーンに設定し、ワークステーションにネットワーク内部から到達できるようにすることを推奨します。

11.6.1.2. CUPSサーバ

CUPSサーバがファイアウォールで保護された信頼済みネットワーク環境の一部の場合、ネットワークインタフェースはファイアウォールの内部ゾーンに設定します。CUPS設定で特別なファイアウォールルールおよびセキュア設定により保護する場合を除いて、信頼できないネットワーク環境でCUPSサーバを設定することはお勧めできません。

11.6.2. 各種パッケージ内のPPDファイル

YaSTのプリンタ設定では、/usr/share/cups/model/にインストールされたPPDファイルを使用して、CUPSのキューがセットアップされます。プリンタモデルに適合するPPDファイルを見つけるため、YaSTはハードウェア検出時に判別されたベンダおよびモデルを、すべてのPPDファイル内のベンダおよびモデルと比較します。この目的で、YaSTのプリンタ設定機能は、PPDファイルから抽出したベンダおよびモデルの情報に基づいて、データベースを生成します。

PPDファイルのみを使用し、他の情報ソースを使用しない設定には、/usr/share/cups/model/内のPPDファイルを自由に変更できるという利点があります。たとえば、PostScriptプリンタのみを使用している場合、通常はcups-driversパッケージ内にあるFoomatic PPDファイルや、gutenprintパッケージ内にあるGutenprint PPDファイルを必要としません。代わりに、使用中のPostScriptプリンタ用のPPDファイルを/usr/share/cups/model/へ直接コピーし(それらがまだmanufacturer-PPDsパッケージ内に存在していない場合)、使用中のプリンタに合わせて最適な設定を行うこともできます。

11.6.2.1. cupsパッケージ内のCUPS PPDファイル

cupsパッケージ内にある基本PPDファイルは、PostScript Level 1およびLevel 2プリンタに適応したFoomatic PPDファイルによって補足されます。

  • /usr/share/cups/model/Postscript-level1.ppd.gz

  • /usr/share/cups/model/Postscript-level2.ppd.gz

11.6.2.2. cups-driversパッケージ内のPPDファイル

通常、Foomaticプリンタフィルタのfoomatic-ripは、PostScript非対応プリンタ用のGhostscriptと組み合わせて使用されます。適切なFoomatic PPDファイルには、*NickName: ... Foomatic/Ghostscript driverおよび*cupsFilter: ... foomatic-ripのエントリがあります。これらのPPDファイルは、cups-driversパッケージ内にあります。

YaSTでは一般に、manufacturer-PPDファイルが優先されます。ただし、適切なmanufacturer-PPDファイルが存在しない場合は、*NickName: ... Foomatic ... (recommended)エントリを含むFoomatic PPDファイルが選択されます。

11.6.2.3. gutenprintパッケージのGutenprint PPDファイル

多くのPostScript非対応プリンタでは、foomatic-ripの代わりに、Gutenprint(以前のGIMP-Print)から取得したCUPSフィルタrastertogutenprintを使用できます。このフィルタと、適切なGutenprint PPDファイルは、gutenprintパッケージ内に用意されています。Gutenprint PPD ファイルは /usr/share/cups/model/gutenprint/ 内に配置されていて、そのファイル内にエントリ*NickName: ... CUPS+Gutenprintおよび*cupsFilter: ... rastertogutenprintがあります。

11.6.2.4. manufacturer-PPDsパッケージ内にあるプリンタメーカからのPPDファイル

manufacturer-PPDsパッケージには、十分自由なライセンスに基づいてプリンタメーカから提供されたPPDファイルが含まれています。PostScriptプリンタは、プリンタメーカの適切なPPDファイルを使用して設定するのが妥当です。このファイルを使用すると、そのPostScriptプリンタの機能すべてを活用できるためからです。manufacturer-PPDsパッケージから得られたPPDファイルが優先されます。ただし、モデル名が一致しない場合は、YaSTがmanufacturer-PPDパッケージからのPPDファイルを使用することはできません。これは、Funprinter 12xxシリーズなど、類似モデルについて1つのPPDファイルのみがmanufacturer-PPDパッケージに含まれる場合に該当します。この場合は、YaSTで対応するPPDファイルを手動で選択します。

11.7. トラブルシューティング

ここでは、プリンタハードウェアおよびソフトウェアに最も一般的に発生する問題と、それを解決または回避する方法について説明します。GDIプリンタ、PPDファイル、およびポート設定などのトピックをカバーしています。一般的なネットワークプリンタに関する問題、印刷に問題がある場合、およびキュー処理についても対処しています。

11.7.1. 標準的なプリンタ言語をサポートしないプリンタ

これらのプリンタは、共通のプリンタ言語をサポートしておらず、独自のコントロールシーケンスを使用しないと対処できません。そのため、これらのプリンタは、メーカがドライバを添付した特定のバージョンのオペレーティングシステムでのみ動作します。GDIは、Microsoft*がグラフィックデバイス用に開発したプログラミングインタフェースです。通常、メーカーはWindows用のドライバだけを提供しており、WindowsドライバはGDIインタフェースを使用しているため、これらのプリンタは「GDIプリンタ」と呼ばれることもあります。実質的な問題は、このプログラミングインタフェースではなく、これらのプリンタを制御できるのは、各プリンタモデルが採用している独自のプリンタ言語のみという事実にあります。

いくつかのGDIプリンタは、GDIモードと標準的なプリンタ言語のいずれかの間で操作を切り替えることができます。切り替えができるかどうかは、プリンタのマニュアルを参照してください。モデルによっては、切り替えを行うために特別なWindowsソフトウェアが必要なこともあります(Windowsから印刷する場合、Windowsプリンタドライバは常にプリンタをGDIモードに切り替える場合があることに注意してください)。他のGDIプリンタでは、標準のプリンタ言語を利用するための拡張モジュールが用意されています。

一部のメーカは、プリンタに独自規格のドライバを提供しています。独自規格のプリンタドライバの欠点は、インストール済みの印刷システムとそのドライバを組み合わせたときに動作するという保証も、さまざまなハードウェアプラットフォームに適しているという保証もないことです。一方、標準的なプリンタ言語をサポートするプリンタは、特殊なバージョンの印刷システムや特殊なハードウェアプラットフォームに依存しません。

専有のLinuxドライバを機能させようと時間を費やす代わりに、標準プリンタ言語(PostScript推奨)をサポートするプリンタを購入する方が費用効率が高い場合があります。この方法により、ドライバの問題を一度だけで、そしてあらゆる状況で解決できます。特殊なドライバソフトウェアのインストールと設定を行う必要はなく、新しい印刷システムの開発に伴ってドライバのアップデートを入手する必要もありません。

11.7.2. 特定のPostScriptプリンタに適したPPDファイルが入手できない

manufacturer-PPDsパッケージに、PostScriptプリンタに適したPPDファイルが含まれていない場合は、プリンタメーカのドライバCDにあるPPDファイルを使用したり、プリンタメーカのWebページから適切なPPDファイルをダウンロードすることができます。

PPDファイルがzipアーカイブ(.zip)または自己展開zipアーカイブ(.exe)の形で提供されている場合、unzipを使用してそのファイルを展開します。最初に、PPDファイルのライセンス(許諾契約)条項を読みます。次にcupstestppdユーティリティを使って、PPDファイルがAdobe PostScript Printer Description File Format Specification, version 4.3に準拠しているかどうかを確認します。FAILユーティリティから失敗が返された場合は、PPDファイル中のエラーは深刻なもので、問題を引き起こす可能性があります。cupstestppdによって報告された問題点は、取り除く必要があります。必要に応じて、適切なPPDファイルが入手できるかどうかをプリンタメーカに問い合わせることも考えられます。

11.7.3. パラレルポート

最も安全なアプローチは、プリンタを最初のパラレルポートに直接接続し、BIOS内で次のパラレルポート設定値を選択することです。

  • I/Oアドレス:378 (16進)

  • 割り込み:無関係

  • モード:Normal (通常)、SPP、またはOutput Only (出力専用)

  • DMA:無効

これらの設定値を使用した場合でも、パラレルポートに接続したプリンタを使用できない場合、BIOS内での設定値に合わせて、I/Oアドレスを0x378という形で/etc/modprobe.conf内に明示的に入力します。2つのパラレルポートが存在し、それぞれのI/Oアドレスが378278 (16進)に設定されている場合、それらを0x378,0x278という形で入力します。

割り込み(IRQ) 7が空いている場合、例11.1「/etc/modprobe.conf:最初のパラレルポートの割り込みモード」に示すエントリを使用して、その割り込みを有効にすることもできます。割り込みモードを有効にする前に、/proc/interruptsファイルを参照して、すでに使用中の割り込みを調べます。現時点で使用中の割り込みだけが表示されます。どのハードウェアコンポーネントがアクティブになっているかに応じて、この表示は変化することがあります。パラレルポート用の割り込みは、他のどのデバイスも使用してはなりません。自信がない場合、irq=noneを指定してポーリングモードを使用します。

例11.1 /etc/modprobe.conf:最初のパラレルポートの割り込みモード

alias parport_lowlevel parport_pc
options parport_pc io=0x378 irq=7

11.7.4. ネットワークプリンタ接続

ネットワークの問題の識別

プリンタをコンピュータに直接接続します。テストの目的で、そのプリンタをローカルプリンタとして設定します。この方法で動作する場合、問題はネットワークに関連しています。

TCP/IPネットワークの確認

TCP/IPネットワークと名前解決が正しく機能していることが必要です。

リモートlpdの確認

次のコマンドを使用して、host上のlpd (ポート515)に対するTCP接続を確立できるかどうかをテストします。

netcat -z host 515 && echo ok || echo failed

lpdへの接続を確立できない場合、lpdがアクティブになっていないか、ネットワークの基本的な問題があります。

rootユーザで次のコマンドを使用し、リモートhost上のqueueに関するステータスレポート(おそらく、非常に長い)を照会することもできます。これは、該当のlpdがアクティブで、そのホストが照会を受け付けることを前提にしています。

echo -e "\004queue" \
| netcat -w 2 -p 722 host 515

lpdが応答しない場合、それがアクティブになっていないか、ネットワークの基本的な問題が発生している可能性があります。lpdが応答する場合、その応答は、host上にあるqueueを介して印刷ができない理由を示すはずです。例11.2「lpdからのエラーメッセージ」で示すような応答を受け取った場合、問題はリモートのlpdにあります。

例11.2 lpdからのエラーメッセージ

lpd: your host does not have line printer access
lpd: queue does not exist
printer: spooling disabled
printer: printing disabled

リモートcupsdの確認

CUPSネットワークサーバは、デフォルトで、UDPポート631から30秒ごとにキューをブロードキャストできます。したがって、次のコマンドを使用すると、ブロードキャストするCUPSネットワークサーバがネットワーク内に存在しているかどうかテストすることができます。コマンドを実行する前に、ローカルCUPSデーモンが終了していることを確認します。

netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID

ブロードキャストを行っているCUPSネットワークサーバが存在している場合、出力は例11.3「CUPSネットワークサーバからのブロードキャスト」に示すようになります。

例11.3 CUPSネットワークサーバからのブロードキャスト

ipp://192.168.2.202:631/printers/queue

►System z: IBM System zのイーサネットデバイスが、デフォルトではブロードキャストを受信しないことを考慮してください。

次のコマンドを使用して、host上のcupsd (ポート631)に対するTCP接続を確立できるかどうかをテストすることができます。

netcat -z host 631 && echo ok || echo failed

cupsdへの接続を確立できない場合は、cupsdが有効になっていないか、基本的なネットワークの問題が発生している可能性があります。lpstat -h host -l -tは、host上のすべてのキューに関するステータスレポート(非常に長い場合がある)を返しますが、それぞれのcupsdが有効になっていて、ホストがクエリを受け入れることが前提になります。

次のコマンドを使用して、host上のqueueが、1つのキャリッジリターン(CR、改行)文字からなる印刷ジョブを受け付けるかどうかをテストできます。何も印刷されないのが妥当です。おそらく、空白のページが排出されるはずです。

echo -en "\r" \
| lp -d queue -h host
ネットワークプリンタまたは印刷サーバボックスのトラブルシューティング

プリントサーバボックス上のスプーラは時々、複数の印刷ジョブを処理する必要が生じた場合、問題を引き起こすことがあります。これはプリントサーバボックスのスプーラで発生するため、この問題を解決する方法はありません。回避策として、TCPソケットを使用して、プリントサーバボックスに接続されているプリンタに直接送信することで、プリントサーバボックス内のスプーラを使用しないようにします。詳細については、11.4項 「ネットワークプリンタ」を参照してください。

この方法により、印刷サーバボックスは異なる形式のデータ転送(TCP/IPネットワークとローカルプリンタ接続)間の単純なコンバータになります。この方法を使用するには、印刷サーバボックス内にある、該当するTCPポートについて把握する必要があります。プリンタがプリントサーバボックスに接続されていて、電源がオンになっている場合、プリントサーバボックスの電源をオンにした後、しばらく経過した時点で、nmapパッケージのnmapユーティリティを使用することにより、このTCPポートを特定できます。たとえば、nmap IP-addressは、印刷サーバボックスに関して次のような出力をすることがあります。

Port       State       Service
23/tcp     open        telnet
80/tcp     open        http
515/tcp    open        printer
631/tcp    open        cups
9100/tcp   open        jetdirect

この出力は、印刷サーバボックスに接続されているプリンタが、ポート9100上のTCPソケットを介して使用できることを示します。nmapはデフォルトでは、/usr/share/nmap/nmap-services内でリストされている多数の一般的な既知のポートだけを確認します。可能性のあるすべてのポートをチェックするには、nmap -p from_port-to_portIP-addressコマンドを使用します。これは、ある程度の時間を要することがあります。詳細な情報については、nmapのマニュアルページを参照してください。

次のようなコマンドを入力します。

echo -en "\rHello\r\f" | netcat -w 1 IP-address port
cat file | netcat -w 1 IP-address port

これは、このポートを通してプリンタを使用できるかどうかをテストするために、該当のポートへ文字列またはファイルを直接送信します。

11.7.5. エラーメッセージを生成しない異常なプリントアウト

印刷システムの観点では、CUPSバックエンドが受信側(プリンタ)へのデータ転送を完了した段階で、印刷ジョブは完了します。受信側でそれ以降の処理が失敗した場合(たとえば、プリンタがそのプリンタ固有のデータを印刷できない)、印刷システムはこれを検出しません。プリンタがそのプリンタ固有のデータを印刷できない場合、そのプリンタにより適していると考えられるPPDファイルを選択します。

11.7.6. 無効にされたキュー

受信側へのデータ転送が数回の試行後に完全に失敗した場合、usbsocketなどのCUPSバックエンドは印刷システム(より正確にはcupsd)にエラーを報告します。データ転送が不可能と報告される前に、バックエンドは何回の試行の失敗が妥当であるかを判断します。それ以上の試行は無駄に終わる可能性があるので、cupsdはそれぞれのキューの印刷を無効にします。問題の原因を取り除いた後、システム管理者はcupsenableコマンドを使用して、印刷を再度有効にする必要があります。

11.7.7. CUPS参照:印刷ジョブの削除

CUPSネットワークサーバが参照機能を使用して自らのキューをクライアントホストへブロードキャストし、クライアントホスト側で適切なローカルcupsdがアクティブになっている場合、クライアント側のcupsdはアプリケーションから印刷ジョブを受け付け、サーバ側のcupsdへそれらを転送します。サーバ上でcupsdが印刷ジョブを受け付けると、そのジョブには新しいジョブ番号が割り当てられます。したがって、クライアントホスト上のジョブ番号は、サーバ上のジョブ番号とは異なっています。印刷ジョブは通常、即座に転送されるので、クライアントホスト上でジョブ番号でそのジョブを削除することはできません。クライアント側のcupsdは、サーバ側のcupsdへの転送が完了した時点で、その印刷ジョブは完了したと考えるからです。

サーバ上にある印刷ジョブを削除したい場合、lpstat -h cups.example.com -oなどのコマンドを使用してサーバ上のジョブ番号を判断します。サーバがまだその印刷ジョブを完了していない(つまり、プリンタへ完全に送信していない)ことが前提条件です。このジョブ番号を使用して、サーバ上にある印刷ジョブを削除できます。

cancel -h cups.example.com queue-jobnumber

11.7.8. 異常な印刷ジョブとデータ転送エラー

印刷プロセス中にプリンタの電源を切ったり、コンピュータをシャットダウンすると、印刷ジョブはキュー内に残ります。コンピュータ(またはプリンタ)の電源を再度投入すると、印刷が再開されます。異常な印刷ジョブは、cancelを使用してキューから削除する必要があります。

印刷ジョブが異常な場合、またはホストとプリンタの間で通信エラーが発生した場合、プリンタはデータを正しく処理できなくなるので、文字化けのような大量のページを印刷することがあります。この状況を修正するには、次の手順に従います。

  1. プリンタの動作を停止するために、インクジェットプリンタの場合、すべての用紙を取り除きます。レーザープリンタの場合、用紙トレイを開けます。上位機種のプリンタでは、現在のプリントアウトをキャンセルするボタンを用意していることもあります。

  2. この時点で、印刷ジョブはキューに残っている可能性があります。ジョブがキューから削除されるのは、ジョブ全体をプリンタへ送信した後に限られるからです。lpstat -o (またはlpstat -h cups.example.com -o)を使用して、どのキューが現在印刷に使用されているかを確認します。cancel queue-jobnumber (またはcancel -h cups.example.com queue-jobnumber)を使用して、該当の印刷ジョブを削除します。

  3. 印刷ジョブがすでにキューから削除されたにもかかわらず、一部のデータが依然として、プリンタへ送信され続けることもあります。CUPSバックエンドプロセスが、引き続き該当のキューを対象として動作しているかどうかをチェックし、その処理を終了します。たとえば、プリンタがパラレルポートに接続されている場合、fuser -k /dev/lp0コマンドを使用して、引き続きそのプリンタ(より正確に表現すると、パラレルポート)にアクセスしているすべてのプロセスを終了することができます。

  4. ある程度の時間にわたって電源をオフにして、プリンタを完全にリセットします。その後、紙を元に戻し、プリンタの電源をオンにします。

11.7.9. CUPS印刷システムのデバッグ

CUPS印刷システムの問題を特定するために、次の一般的な処理を実行してください。

  1. /etc/cups/cupsd.conf内に、LogLevel debugを設定します。

  2. cupsdコマンドを停止します。

  3. /var/log/cups/error_log*を削除して、大規模なログファイルから検索を行うことを避けます。

  4. cupsdを起動します。

  5. 問題の原因となったアクションをもう一度実行します。

  6. /var/log/cups/error_log*内のメッセージを確認し、問題の原因を識別します。

11.7.10. 詳細情報

Novell Knowledgebase (http://support.novell.com/)では、さまざまな個別の問題のソリューションが紹介されています。CUPSのテキスト検索機能により関連する記事を見つけてください。