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

ここでは、プリンタハードウェアおよびソフトウェアに最も一般的に発生する問題と、それを解決または回避する方法について説明します。

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

一般的なプリンタ言語をどれもサポートせず、特殊な制御シーケンスのみに依存して動作するプリンタを、「GDI プリンタ」と呼びます。これらのプリンタは、メーカがドライバを添付した特定のバージョンのオペレーティングシステムでのみ動作します。GDIは、Microsoftがグラフィックデバイス用に開発したプログラミングインタフェースです。実質的な問題は、このプログラミングインタフェースではなく、GDIプリンタを制御できるのは、各プリンタモデルが採用している独自のプリンタ言語のみという事実にあります。

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

独自規格に対応するLinuxドライバを正常に機能させるために時間を費やすより、サポートされているプリンタを購入する方がコスト効率が良いこともあります。この方法により、ドライバの問題を一度だけで、そしてあらゆる状況で解決できます。特殊なドライバソフトウェアのインストールと設定を行う必要はなく、新しい印刷システムの開発に伴ってドライバのアップデートを入手する必要もありません。

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」(Adobe PostScriptプリンタ記述ファイルフォーマット仕様、バージョン4.3)に準拠しているかどうかを確認します。このユーティリティが「FAIL」を返した場合、PPDファイル内のエラーは重大なものであり、おそらく大きな問題を引き起こすと考えられます。cupstestppdによって報告された問題点は、取り除く必要があります。必要に応じて、適切なPPDファイルが入手できるかどうかをプリンタメーカに問い合わせることも考えられます。

11.7.3 パラレルポート

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

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

  • Interrupt (割り込み):無関係

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

  • DMA: disabled (無効)

これらの設定値を使用した場合でも、パラレルポートに接続したプリンタを使用できない場合、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:ホストにラインプリンタへのアクセス権
lpdがない。キューに
プリンタが存在しない。スプーリングで
プリンタが使用できない。印刷が使用できない
リモートcupsdのチェック

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

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

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

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

ipp://host.domain:631/printers/queue

次のコマンドを使用して、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.2項 「ネットワークプリンタ」を参照してください。

この方法により、印刷サーバボックスは異なる形式のデータ転送(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_port IP-addressコマンドを使用します。これは、ある程度の時間を要することがあります。詳細については、man 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は該当のキューへの印刷を無効にします。問題の原因を取り除いた後、システム管理者は/usr/bin/enableコマンドを使用して、印刷を再度有効にする必要があります。

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

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

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

cancel -h print-server queue-jobnnumber

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

印刷プロセスの実行中に、管理者がプリンタの電源をオフにして再度オンにした場合、またはコンピュータをシャットダウンしてリブートした場合、印刷ジョブはキュー内にとどまっていて、印刷が再開されます。異常な印刷ジョブは、cancelを使用してキューから削除する必要があります。

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

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

  2. この時点で、印刷ジョブはキューに残っている可能性があります。 ジョブがキューから削除されるのは、ジョブ全体をプリンタへ送信した後に限られるからです。lpstat -o (またはlpstat -h print-server -o)を使用して、どのキューが現在印刷に使用されているかをチェックします。cancel queue-jobnumber (またはcancel -h print-server 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 関連情報

多くの具体的問題に対する解決策は、SUSE Support Database (サポートデータベース)にあります(http://portal.suse.com/)。キーワードで関連記事を検索してください。