第11章 プリンタの操作

目次

11.1. 印刷システムの作業手順
11.2. プリンタ接続の方法とプロトコル
11.3. ソフトウエアのインストール
11.4. ネットワークプリンタ
11.5. コマンドラインからの印刷
11.6. での特殊機能openSUSE
11.7. トラブルシューティング

openSUSE® では、ネットワークプリンタを含む多種のプリンタに対応して います。プリンタは手動で設定することもできますし、 YaST から設定することも できます。設定方法については 項 「プリンタの設定」 (第2章 YaST を利用したハードウエアコンポーネントの設定, ↑スタートアップ) をお読みください。 また、印刷ジョブの管理にはグラフィカルなユーティリティと、コマンドラインから 実行可能なユーティリティの 2 種類があります。プリンタがうまく動作しない場合は、 11.7項 「トラブルシューティング」 をお読みください。

openSUSE では CUPS (Common Unix Printing System) を標準印刷システムと しています。

プリンタは USB やネットワークなどのインターフェイスのほか、プリンタの言語に よっても区別を行ないます。プリンタをご購入の際は、プリンタがどのような インターフェイス (USB やパラレルポートなど) を持っているのかと、その インターフェイスがお使いのハードウエアで利用可能なものであるかどうか、 およびプリンタが使用する言語についても、あらかじめご確認ください。 プリンタは下記のような 3 種類の言語に分類されます:

PostScript プリンタ

PostScript は多くの Linux および UNIX システムが生成するプリンタ言語で、 印刷システム内部の印刷システムで処理されるものです。プリンタ側で PostScript 文書を直接処理でき、かつ印刷システムで特別な処理が必要でない場合は、 潜在的なエラー要因を減らすこともできます。

標準プリンタ (PCL や ESC/P などの言語)

これらのプリンタ言語はかなり古いものですが、今でもなおプリンタに 対する新しい機能を追加しながら今に至っています。言語が既知のプリンタ言語で あった場合は、 Ghostscript の助けを借りて PostScript ジョブをそれぞれの 言語に変換することができます。処理作業は逐次翻訳 (インタプリタ) とも 呼ばれます。最もよく知られた言語は、 PCL (HP 社製のプリンタやそれらの 類似製品などで使用されています) と ESC/P (エプソン社製のプリンタで 使用されています) です。これらのプリンタ言語は一般に Linux に対応して いて、十分な品質の印刷を行なうことができます。ただし Linux では特別な プリンタ機能を利用することができない場合もあります。 HPLIP (HP Linux Imaging and Printing) を開発している HP 社を除き、現時点では Linux 向けのドライバを開発し、オープンソースのライセンスで Linux ディストリビュータに提供している製造元はありません。

プロプライエタリプリンタ (GDI プリンタとも呼ばれます)

これらのプリンタは、汎用的なプリンタ言語に一切対応していません。 これらは非公開の独自プリンタ言語を使用していて、新しいプリンタモデルが 販売される際に変更されることがあります。一般に Windows 用のドライバのみ が公開されています。詳しくは 11.7.1項 「標準プリンタ言語に対応していないプリンタ」 を お読みください。

新しいプリンタをお買い上げの前に、下記の情報をお読みのうえ、ご希望のプリンタが どの程度 Linux に対応しているかをご確認ください:

http://www.linuxfoundation.org/OpenPrinting/ (英語)

プリンタデータベースを公開している OpenPrinting のホームページです。 データベースでは最新の Linux 対応状況が公開されています。ただし、 Linux ディストリビューションには製品を公開した時点のドライバしか 含まれていないため、 perfectly supported (完全対応) と明記されたプリンタであっても、それが openSUSE の対応状況とは 一致しない場合があります。そのため、このデータベースは参考情報として ご覧ください。

http://www.cs.wisc.edu/~ghost/ (英語)

Ghostscript の Web ページです。

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

同梱ドライバの一覧です。

11.1. 印刷システムの作業手順

ユーザは印刷ジョブを作成します。印刷ジョブには印刷するデータそのもののほか、 プリンタの名前や印刷キューの名前、さらにオプションでフィルタの情報やプリンタ 固有の設定など、スプーラに対する情報も付加されています。

少なくともそれぞれのプリンタには、専用の印刷キューが存在していなければ なりません。またスプーラは、目的のプリンタがデータを受信できるように なるまで、印刷ジョブを保持します。プリンタの準備ができると、スプーラは フィルタを通してデータを送信し、応答を受信します。

一方のフィルタは、それぞれのアプリケーションが生成したデータ (一般的には PostScript や PDF 、その他にも ASCII, JPEG などである場合もあります) を、 印刷用 (PostScript, PCL, ESC/P など) に変換する機能を備えています。 プリンタの機能は PPD ファイル内に定義します。 PPD ファイルには、それぞれ のプリンタで必要な機能を有効化するための、プリンタ固有のオプション設定と パラメータが書かれています。また、フィルタシステムではユーザ側で選択した オプションについても有効化を行ないます。

PostScript プリンタをお使いの場合、フィルタシステムはデータをプリンタ固有の PostScript に変換します。この場合にはプリンタドライバは必要になりません。 PostScript 以外のプリンタをお使いの場合は、フィルタはプリンタ固有のデータに 変換します。この場合はお使いのプリンタに合わせた適切なドライバを用意する 必要があります。バックエンド側ではプリンタ固有のデータを受け取り、プリンタ に対してデータを送信します。

11.2. プリンタ接続の方法とプロトコル

お使いのシステムにプリンタを接続するには、いくつかの方法があります。 CUPS 印刷システムでは、ローカルプリンタとネットワーク接続のプリンタとの 区別は行ないません。 プリンタの接続方法について より詳しい情報は、サポートデータベース内の CUPS in a Nutshell 記事 (http://old-en.opensuse.org/SDB:CUPS_in_a_Nutshell (英語)) をお読みください。

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

お使いのマシンにプリンタを接続する場合は、 USB 接続の場合にのみ、稼働中の 取り付け/取り外しに対応することにご注意ください。 USB 接続以外の環境で お使いの場合は、システムやプリンタに障害を起こさないようにするため、 接続を変更する際にはシステムをシャットダウンしてから行なってください。

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

PPD は解像度やその他のオプション、たとえば両面印刷機能などを定義する コンピュータ言語です。これらの定義ファイルは、 CUPS で様々な印刷オプションを 使用する際に必要となる者です。 PPD ファイル無しの状態では、印刷データは 未加工の 状態でそのままプリンタに送信されてしまいます。 openSUSE をインストールすると、それに合わせて多くの PPD ファイルもインストール されます。

PostScript プリンタを設定する最もよいアプローチは、適切な PPD ファイルを 取得することです。標準インストールを行なうことでインストールされるパッケージ manufacturer-PPDs には、多くの PPD ファイルが 含まれています。詳しくは 11.6.2項 「様々なパッケージ内にある PPD ファイル」11.7.2項 「PostScript プリンタで適切な PPD ファイルが見つからない場合」 をお読みください。

新しい PPD ファイルは /usr/share/cups/model/ ディレクトリに 保管することができるほか、 YaST から印刷システムに追加することもできます。 詳しくは 項 「YaST を利用したドライバの追加」 (第2章 YaST を利用したハードウエアコンポーネントの設定, ↑スタートアップ)) をお読みください)。 PPD ファイルのインストールを行なうと、印刷システムから選択を行なうことが できるようになります。

なお、ソフトウエアパッケージ全体のインストールを求められた場合にはご注意ください。 第一にこの種類のインストール作業は openSUSE のサポート対象外に なってしまうほか、印刷コマンドが異なる動作をすることになるため、 他の製造元のデバイスに対してアクセスできなくなってしまう可能性があります。 そのため、製造元が提供するソフトウエアをインストールすることはお勧めできません。

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

ネットワークプリンタでは様々なプロトコルを利用することができます。これらは 場合によっては、複数を同時に使用することもできます。対応しているほとんどの プロトコルは標準化されていますが、製造元によっては標準から外れた実装をしている 場合もあり、この場合はごく少数のオペレーティングシステムに対してだけドライバを 提供していたりすることがあります。このような場合には、不幸にも Linux の ドライバはほとんど提供されていません。従って、 Linux で全てのプロトコルが うまく動作するとは言い切れないのが現状です。そのため、うまく動作する設定を見つける ため、様々なオプションを試してみる必要があるかもしれません。

CUPS は ソケット, LPD, IPP, smb の各プロトコルに対応しています。

ソケット

ソケット とは、確立された TCP のソケットに対して 印刷データをありのまま送信することを言います。ソケットポートとして一般的に 使用されるポートとしては、 910035 などがあります。デバイス URI (Uniform Resource Identifier; 統一資源識別子) の書式は、 socket://プリンタの IP アドレス:ポート となります。たとえば、 socket://192.168.2.202:9100/ のようになります。

LPD (ラインプリンタデーモン)

LPD プロトコルは、 RFC 1179 で規定されています。 このプロトコルでは、印刷キューの ID などのいくつかのジョブ関連データ が、実際の印刷データの前に送信されます。そのため、データ転送用に LPD プロトコルを設定する際には、あらかじめ印刷キューを指定しておかなければ なりません。異なるプリンタ製造元の実装でも、印刷キューに任意の名前を 設定できるほど柔軟な仕組みになっています。また場合によっては、印刷キューの 名前が固定されている場合もあります。 LPT, LPT1, LP1 などの名前がよく 使用されます。 LPD サービスが使用するポート番号は 515 です。たとえばデバイス URI は、 lpd://192.168.2.202/LPT1 のようになります。

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

IPP は比較的新しい (1999 年) HTTP ベースのプロトコルです。 IPP を使用すると、他のプロトコルに比べてより多いジョブ関連のデータが 送信されます。 CUPS は内部のデータ転送に IPP を使用しています。 なお、 IPP を設定するためには印刷キューの名前を指定する必要があります。 IPP が使用するポート番号は 631 です。たとえばデバイス URI は、 ipp://192.168.2.202/psipp://192.168.2.202/printers/ps のようになります。

SMB (Windows 共有)

もちろん CUPS でも Windows 共有に接続されたプリンタに対応しています。 この目的で使用するプロトコルは SMB で、ポート番号は 137, 138, 139 を それぞれ使用します。デバイス URI は、 smb://ユーザ:パスワード@ワークグループ/smb.example.com/printer, smb://ユーザ:パスワード@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 は lpinfo, lpadmin, lpoptions などのコマンドラインツールで設定を行なう ことができます。これらのコマンドラインツールを利用するには、パラレルなどの デバイス URI を設定する必要があるほか、パラメータについても設定を行なう 必要があります。お使いのシステムで正しいデバイス URI を知るには、 lpinfo -v | grep ":/" コマンドをお使いください:

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

lpadmin コマンドを利用すると、 CUPS サーバの管理者は 印刷キューを追加したり削除したり、管理したりすることができます。 印刷キューを追加するには、下記の書式をご利用ください:

lpadmin -p キュー -v デバイス URI -P PPD ファイル -E

上記を実行すると、デバイス (-v で指定したもの) は、 指定した PPD ファイル (-P) 経由で キュー (-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 キュー名 ファイル名 のようにして実行してください。 キュー名ファイル名 は、それぞれの名前に置き換えてください。

また、アプリケーションによっては、印刷に際して lp コマンド に依存している場合があります。この場合はアプリケーションの印刷ダイアログから、 ファイル名 を指定せずにコマンドを入力してください。 たとえば lp -d キュー名 の ようになります。

11.6. openSUSE での特殊機能

CUPS での様々な機能が openSUSE に搭載されています。ここでは、 それらの機能のうち重要なものをいくつか紹介します。

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

openSUSE を特に何も指定せずにインストールすると、SuSEfirewall2 が 有効化され、ネットワークインターフェイスは外部から到達する要求を ブロックする 外部ゾーン として設定されます。 SUSEfirewall2 の設定について、詳しくは 項 「SuSEfirewall2」 (第14章 Masquerading and Firewalls, ↑セキュリティガイド) と http://ja.opensuse.org/SDB:CUPS_and_SANE_Firewall_settings (日本語) http://en.opensuse.org/SDB:CUPS_and_SANE_Firewall_settings (英語) をお読みください。

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 を自由に変更できるという利点 があります。たとえばお使いのプリンタとして 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 レベル 1 および 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 とともに使用されるものです。 正しい PPD ファイルであれば、 *NickName: ... Foomatic/Ghostscript driver*cupsFilter: ... foomatic-rip と書かれた項目が存在しているはずです。 これらの PPD ファイルは、 cups-drivers パッケージ 内に含まれています。

YaST では一般的に manufacturer-PPD パッケージに 含まれるドライバを優先的に使用しますが、適切なドライバが見つからない場合は Foomatic PPD ファイルのうち、 *NickName: ... Foomatic ... (recommended) が書かれているドライバを選択します。

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

多くの非 PostScript プリンタでは、 foomatic-rip の代わりに Gutenprint (従来は GIMP-Print という名前でした) に含まれる rastertogutenprint という CUPS フィルタを 利用することができます。このフィルタと対応する Gutenprint PPD ファイルは、 gutenprint パッケージ内に含まれています。 Gurenprint PPD ファイルは /usr/share/cups/model/gutenprint/ ディレクトリ内に存在し、 *NickName: ... CUPS+Gutenprint および *cupsFilter: ... rastertogutenprint と書かれている行が存在します。

11.6.2.4. manufacturer-PPDs パッケージ内にあるプリンタの製造元が提供する PPD ファイル

manufacturer-PPDs パッケージには、プリンタの 製造元から自由なライセンスの元で提供されている PPD ファイルが含まれています。 PostScript プリンタの場合、プリンタの製造元が提供する適切な PPD ファイルを利用することで、プリンタに備わっている全ての機能を利用できる ようになるため、製造元提供の PPD ファイルで設定するのがお勧めです。 YaST は manufacturer-PPDs が提供する PPD ファイルを優先的に使用しますが、モデル名が一致していない場合には 利用することができません。これは manufacturer-PPDs パッケージ内の PPD ファイルに、似通った型式のうち 1 つしか記述していない (たとえば "Funprinter 12xx シリーズ" のように) 場合に発生します。 この場合は、 YaST を利用して手動で PPD ファイルを選択してください。

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

本章では、プリンタのハードウエアおよびソフトウエア上で最もよく発生する 問題について、その解決方法や回避策を掲載しています。本章で扱っている分野と しては、 GDI プリンタや PPD ファイル、ポートの設定などがあります。また、 一般的なネットワークプリンタの問題や印刷がおかしくなる問題、キューの処理に 関する問題についても対応しています。

11.7.1. 標準プリンタ言語に対応していないプリンタ

これらのプリンタは汎用プリンタ言語には全く対応しておらず、特別な非公開 コントロール言語だけに対応しています。そのためこれらのプリンタは、製造元が 公開するドライバに対応したオペレーティングシステムでのみ動作します。 GDI は Microsoft がグラフィックデバイス向けに開発したプログラミング インターフェイスで、プリンタデバイス向けの Windows ドライバは、これを 利用して作成します。製造元が Windows に対応したドライバしか公開しない ことから、それらのプリンタを GDI プリンタ と呼びます。 実際の問題はプログラミングインターフェイスではなく、そのプリンタの型番に 対応した非公開のプリンタ言語でしかアクセスできない、という点です。

GDI プリンタによっては GDI モードと標準プリンタ言語モードを切り替えることが できるものがあります。まずはお使いのプリンタのマニュアルをお読みのうえ、 そのような切り替えに対応できるかどうかをご確認ください。また、型式に よっては特別な Windows ソフトウエアで切り替えることができるものもあります (ただし Windows 側のプリンタドライバを利用して印刷する際、常に GDI モードに切り替えてしまうような場合もあります) 。それ以外にも、 拡張モジュールで標準プリンタ言語が利用できるプリンタもあります。

また、製造元によってはそれらのプリンタに対応したプロプライエタリ (非公開) なドライバを公開している場合もあります。プロプライエタリなドライバの 欠点は、インストール済みのシステムで動作するのかどうかや、様々なハードウエア プラットフォーム上で動作するものかどうかが保証されていない点です。 逆に、標準プリンタ言語に対応したプリンタは、特定の印刷システムのバージョンや 特別なハードウエアプラットフォームに依存していたりはしません。

プロプライエタリな Linux ドライバを動かすために時間を費やすくらいであれば、 標準言語に対応したプリンタ (おそらくは PostScript) を購入してしまったほうが、 コスト面でより有利になるかもしれません。これはドライバの問題をいっぺんに解決し、 特別なドライバソフトウエアのインストールや設定の要件から解放されるだけでなく、 印刷システムが更新されたことによるドライバ側の更新作業も不要になります。

11.7.2. PostScript プリンタで適切な PPD ファイルが見つからない場合

manufacturer-PPDs パッケージ内に PostScript プリンタ向けの適切な PPD ファイルが見つからない場合、プリンタの製造元が 提供するドライバ CD を利用することができるほか、プリンタの製造元の 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. パラレルポート

最も安全なアプローチは、プリンタを 1 基目のパラレルポートに接続し、 BIOS 側でパラレルポートの設定を下記のような設定にするのが適切です:

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

  • 割り込み: (任意)

  • モード: 通常, SPP, 出力のみ のいずれか。

  • DMA: 無効

上記の設定を行なったにもかかわらずパラレルポート上のプリンタがうまく 動作しない場合は、 BIOS 側に設定した I/O アドレスを 0x378 のような形で /etc/modprobe.conf 内に設定してください。 なお、 2 基のパラレルポートが存在する場合、アドレスが 378278 (それぞれ 16 進) であれば 0x378,0x278 のように指定してください。

また、割り込み 7 があいている場合は、 例11.1「/etc/modprobe.conf: 1 基目のパラレルポート用割り込みモード設定」 のように設定することで、 割り込みを有効にすることができます。割り込みモードを有効にする前に /proc/interrupts ファイルを確認し、その割り込みが 使用されていないことを確認してください。左記のファイルでは、使用中の割り込み だけが表示されます。また、左記のファイルは利用中のハードウエアコンポーネント によって表示が異なります。パラレルポートの場合、他のデバイスから使用されて いてはいけません。うまく動作しない場合は、 irq=none のように指定し、ポーリングモードでご利用ください。

例11.1 /etc/modprobe.conf: 1 基目のパラレルポート用割り込みモード設定

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

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

ネットワーク側の問題かどうかの確認

まずはお使いのコンピュータに直接プリンタを接続します。テストのため、 ローカルプリンタとしてプリンタを設定してみます。これで問題なく動作する ようであれば、問題はプリンタ側にあることになります。

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

TCP/IP ネットワークと名前解決が正しく動作するかどうかを確認します。

遠隔の lpd の確認

下記のコマンドでは、 ホスト 上にある lpd (ポート 515) に対して、 TCP の 接続テストを行ないます:

netcat -z ホスト 515 && echo ok || echo failed

lpd との接続がうまくいかない場合は、 lpd が動作していないか、基本的なネットワーク部分に 問題があることになります。

さらに root ユーザから 下記のコマンドを実行し、 ホスト 上の キュー に対して (多くの場合、とても長い) ステータスレポートを要求します。これにより、 lpd が動作しているかどうかと、ホストが問い合わせを 受け付けるかどうかを確認することができます:

echo -e "\004キュー" \
| netcat -w 2 -p 722 ホスト 515

lpd が何も応答を返さなかった場合は、 lpd が動作していないか、基本的なネットワーク部分に 問題があることになります。 lpd が応答を返した場合は、 出力された情報の中に ホスト 上の キュー が、なぜ利用できないのかを表示します。 たとえば 例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 のネットワークサーバはそのキュー情報を 30 秒 おきに UDP ポート 631 でブロードキャストします。 そのため下記のコマンドを利用すると、ネットワーク内に 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

さらに、下記のコマンドでは ホスト 上にある cupsd (ポート 631) に対して、 TCP の 接続テストを行ないます:

netcat -z ホスト 631 && echo ok || echo failed

cupsd との接続がうまくいかない場合は、 cupsd が動作していないか、基本的なネットワーク部分に 問題があることになります。 さらに lpstat -h ホスト -l -t を実行すると、 ホスト 上の全てのキューに対する (多くの場合、とても長い) ステータスレポートを要求します。これにより、 cupsd が動作しているかどうかと、ホストが問い合わせを 受け付けるかどうかを確認することができます。

また、次のコマンドは ホスト 上の キュー に対して、単一の改行コードだけから成る 印刷キューを受け付けるかどうかをテストすることができます。 何も印刷されず、単に空白のページだけが出力されるはずです。

echo -en "\r" \
| lp -d キュー -h ホスト
ネットワークプリンタやプリントサーバのトラブルシューティング

プリントサーバ内で動作しているスプール機能は、複数の印刷ジョブを 取り扱うような場合に問題が発生する場合があります。このような問題は プリントサーバ内のスプール機能によって引き起こされている問題で あるため、解決するための手段は存在しません。ただし、プリントサーバの スプール機能に接続されているプリンタに対し、直接 TCP 接続を行なう ことで回避することができます。詳しくは 11.4項 「ネットワークプリンタ」 をお読みください。

この方法では、プリントサーバは様々なデータ転送手段 (TCP/IP ネットワークと ローカルプリンタ接続) 間でのコンバータとして動作するようになります。 この方法を利用するには、プリントサーバ内で使用する TCP ポートを知って おく必要があります。プリンタがプリントサーバに接続されていて電源が入って いる場合、プリントサーバの電源を入れてからしばらくしてから、 TCP ポートを nmap パッケージに 含まれる nmap ユーティリティで判別することが できます。 nmap IP アドレス のように入力すると、プリントサーバに対する下記のような出力が 表示されます:

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

上記の出力は、 TCP ポート 9100 を利用することで プリントサーバ内のプリンタにアクセスできることを示しています。 なお、既定では nmap コマンドは /usr/share/nmap/nmap-services ファイルに書かれた 既知のポートだけを確認します。全てのポートに対して確認を行なうには、 nmap -p  開始ポート-終了ポート  IP アドレス のように入力してください。 上記のコマンドを実行するには、しばらくの時間がかかります。 また、詳しい情報は nmap のマニュアルページを お読みください。

また、下記のようなコマンドを入力すると、上記で発見したポートに対して 文字列やファイルを直接送信し、プリンタに対してアクセスできるかどうかを 確認することができます:

echo -en "\rHello\r\f" | netcat -w 1 IP-address port
cat file | netcat -w 1 (IP アドレス) (ポート)

 

11.7.5. エラーメッセージが表示されないにも関わらず出力がおかしい場合

印刷システムでは、印刷ジョブは CUPS のバックエンドが送信先 (プリンタ) に送信し終わった時点で完了します。受け取り側での処理作業で何らかの問題が 発生した場合 (たとえばプリンタ固有のデータを印刷できない場合) は、 印刷システム側からそれを検知する手段がありません。お使いのプリンタが プリンタ固有のデータを印刷できない場合は、そのプリンタに対するより適切な PPD ファイルを選択してください。

11.7.6. キューの無効化

何回かの試行を行なっても送信先へのデータ送信が完了しない場合、 USBソケット などの 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 キュー-ジョブ番号

11.7.8. 印刷ジョブの問題とデータ転送エラー

印刷処理中にプリンタの電源を落としたり、コンピュータをシャットダウン したりした場合は、印刷ジョブがキュー内に残ったままになっています。 印刷処理はコンピュータ (またはプリンタ) の電源が復帰した後に再開されます。 不要な印刷ジョブや間違った印刷ジョブは、 cancel コマンドでキューから削除しなければなりません。

また、印刷ジョブが正しい形式ではなかったり、ホストとプリンタの間での 通信にエラーが発生したりした場合は、プリンタはデータを正しく処理できず、 何枚もの正しくない出力をしてしまう場合があります。このような現象が発生 した場合は、下記の手順で修復してください:

  1. 印刷を停止するため、インクジェットプリンタの場合は全ての紙を取り除き、 レーザープリンタの場合は用紙トレイを開けます。また、高品質なプリンタで あれば、現在の印刷処理をキャンセルするためのボタンが用意されている 場合もあります。

  2. ジョブはプリンタへの送信が全て完了した場合にのみ削除される仕組みであるため、 印刷ジョブがキュー内に残っている場合があります。 lpstat -olpstat -h cups.example.com -o などのコマンドを 利用して、現在のキューが印刷中であるかどうかを確認してください。 印刷中の場合は、 cancel キュー-ジョブ番号 または cancel -h cups.example.com キュー-ジョブ番号 を利用して、キューを削除してください。

  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. さらなる情報

多くの固有の問題は、 SUSE のサポートデータベース (http://en.opensuse.org/Portal:Support_database) (日本語) または (http://en.opensuse.org/Portal:Support_database) (英語) 内に書かれています。プリンタ関連の問題の場合は、テキスト検索で SDB:CUPS と入力してください。