Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 openSUSE Leap 15.7

7 印刷の操作 Edit source

openSUSE® Leap では、ネットワークプリンタなど、様々な種類のプリンタから印刷することができます。プリンタは手作業で設定することができるほか、 YaST 経由で設定することもできます。設定方法については 第17章 「プリンタの設定 をお読みください。また、印刷ジョブの開始や管理については、グラフィカルなユーティリティとコマンドラインのユーティリティの両方が用意されています。印刷が正しく動作しない場合は、 7.8項 「トラブルシューティング」 をお読みください。

CUPS (Common Unix Printing System) は openSUSE Leap での標準印刷システムです。

各種のプリンタは USB やネットワークなどのインターフェイスで違いがあるほか、プリンタ言語でも違いがあります。プリンタをお買い上げになる場合は、まずインターフェイスが対応可能なものかどうか (USB, イーサネット, Wi-Fi など) とプリンタの言語をご確認ください。プリンタの言語としては、下記の 3 種類に分類することができます:

PostScript プリンタ

PostScript は、ほとんどの Linux や Unix での印刷ジョブの作成にあたって使用されるプリンタ言語で、内部の印刷システムでも使用されています。 PostScript 文書をプリンタ側で直接処理できる場合で、印刷システム側でさらなる編集作業などが発生しない場合は、潜在的にエラーの発生しうる可能性を大きく減らすことができます。

現時点では、標準の印刷ジョブ形式が PostScript から PDF という形式に置き換えられていますが、 PDF を直接印刷することのできる PostScript+PDF 対応のプリンタも現れてきています。従来型の PostScript のみに対応したプリンタの場合、 PDF は印刷のワークフロー内で PostScript に変換する必要があります。

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

既知のプリンタ言語であれば、 Ghostscript を利用することで、印刷システム側で PostScript のジョブをそれぞれの言語に変換することができます。この処理は逐次翻訳処理 (インタプリティング) と呼ばれます。最もよく知られている言語は PCL (HP 社のプリンタなどが対応しています) と ESC/P (EPSON 社のプリンタで使用されています) の 2 種類で、これらの言語は Linux で通常サポートされているため、十分な印刷結果が得られます。ただし、 Linux では特殊な印刷機能に対応していない場合があります。 HP 社と EPSON 社以外の場合は、プリンタの製造元が Linux ドライバを開発しておらず、 Linux のディストリビューションとして配布のできるオープンソースライセンスでは、ソフトウエアが存在しないのが現状です。

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

これらのプリンタは、汎用的なプリンタ言語のいずれにも対応していないものです。これらは非公開のプリンタ言語を使用しているほか、新しい型式が販売されるようになると、言語側にも変更が加えられるようになってしまっています。通常は、 Windows 向けのドライバのみが公開されています。詳しくは 7.8.1項 「標準プリンタ言語に対応していないプリンタについて」 をお読みください。

新しいプリンタを購入される場合は、まず下記の情報源をお読みのうえ、購入予定のプリンタがサポートされているかどうかをご確認ください:

https://www.openprinting.org/printers

OpenPrinting の Web ページには、プリンタデータベースが提供されています。データベースには最新の Linux におけるサポート状態が書かれています。ただし、 Linux ディストリビューションは、開発上の都合で決められたタイミングでドライバを取り込むものであるため、 perfectly supported (完全対応) とされているプリンタであっても、最新の openSUSE Leap バージョンでは対応しきれていない場合があります。そのため、このデータベースは必ずしも正しい状態にはなりませんので、参考情報としてお読みください。

https://www.ghostscript.com

Ghostscript の Web ページもご確認ください。

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

内蔵の Ghostscript ドライバに書かれている一覧です。

7.1 CUPS の流れ Edit source

まずはユーザが印刷ジョブを作成します。印刷ジョブには、印刷するデータそのもののほか、スプーラに対する情報が含まれています。これにはプリンタの名前や印刷キューの名前のほか、プリンタ固有の情報としてフィルタに関する情報などが含まれています。

それぞれのプリンタに対しては、少なくとも 1 つの専用印刷キューが割り当てられます。スプーラは、目的のプリンタがデータを受信できる状態になるまで、キュー内に印刷ジョブを貯めておきます。プリンタの準備ができると、フィルタとバックエンドを通して、プリンタに対してデータを送信します。

フィルタは、アプリケーションが生成した印刷用のデータ (通常は PostScript, PDF などですが、 ASCII, JPEG などである場合もあります) をプリンタ固有のデータ (PostScript, PCL, ESC/P など) に変換します。プリンタの機能は PPD ファイルとして定義されていて、プリンタ固有のオプションのほか、プリンタで特定の機能を有効化するためのパラメータなどが定義されています。フィルタシステムでは、ユーザが選択したオプションが有効化されるよう設定します。

PostScript プリンタを使用している場合は、フィルタシステムがデータをプリンタ固有の PostScript に変換します。この場合、プリンタドライバは不要となります。 PostScript 以外のプリンタの場合は、フィルタシステムが同じくプリンタ固有のデータに変換します。この場合は、お使いのプリンタに合わせたドライバが必要となります。バックエンドは、プリンタ固有のデータをフィルタから受信して、それをプリンタに送信します。

7.2 プリンタの接続方式とプロトコル Edit source

システムとプリンタを接続する方式には複数のものがあります。 CUPS ではローカルのプリンタとネットワーク経由で接続されたプリンタを区別せずに設定することができます。プリンタの接続方法について、詳しくは https://ja.opensuse.org/SDB:CUPS_in_a_Nutshell をお読みください。

警告
警告: 実行中のシステムにおけるケーブル接続の変更

マシンに対してプリンタを接続するにあたっては、 USB 以外の方式ではホットプラグ (活性挿抜) に対応しておらず、動作中に接続したり、動作中に取り外したりすることができないことに注意してください。お使いのシステムやプリンタが損傷を受けないようにするため、 USB 以外の方式で接続されている場合は、接続を変更する前にシステムをシャットダウンしてください。

7.3 ソフトウエアのインストール Edit source

PPD (PostScript Printer Description) はコンピュータ言語の一種で、解像度やオプション、両面印刷の可否などの情報を設定するためのものです。これらの仕組みは、 CUPS で様々なオプションを使用する際に必要となるもので、 PPD ファイルがないと、プリンタに対して 何も加工しない 状態でデータを送信しなければならなくなってしまいます。

PostScript プリンタを設定するにあたって最も適切なやり方は、適切な PPD ファイルを取得することです。 manufacturer-PPDsOpenPrintingPPDs-postscript のパッケージには、多数の PPD ファイルが用意されています。詳しくは 7.7.3項 「様々なパッケージ内にある PPD ファイルについて」 および7.8.2項 「PostScript プリンタに対応する PPD ファイルが存在しない場合について」 をお読みください。

新しい PPD ファイルは /usr/share/cups/model/ ディレクトリ内に保存することができるほか、 17.1.1項 「YaST を利用したドライバの追加」 の手順に従うことで、 YaST から印刷システムに追加することもできます。 PPD ファイルを追加したあとは、プリンタの設定時に追加した PPD ファイルを選択することができます。

なお、プリンタの製造元がソフトウエア (アプリケーション) パッケージ全体をインストールさせようとする場合がありますが、これをそのままインストールしてしまうと、 openSUSE Leap で提供しているサポートを受けられなくなってしまう場合があることにご注意ください。これは、ソフトウエアパッケージによっては印刷コマンドの動作を書き換えてしまうものがあるためで、このようなシステムにしてしまうと、他の製造元のプリンタを扱えなくなってしまいます。このような理由から、製造元が提供するソフトウエアのインストールは、お勧めできません。

7.4 ネットワークプリンタ Edit source

ネットワークプリンタの場合は同時に複数のプロトコルに対応できるものもあります。対応するプロトコルのうちのほとんどは標準化されているものですが、製造元によっては標準のプロトコルを改変して使用している場合があります。この場合は、ごく限られたオペレーティングシステム向けのドライバしか公開しておらず、その中に Linux 向けのものは無いのが一般的です。このような状況から、全てのプロトコルが Linux でスムーズに動作するとは限りません。そのため、いくつかのプロトコルを使ってみて、期待通りに動作するかどうかを試してみる必要があります。

CUPS では ソケット , LPD , IPP smb にそれぞれ対応しています。

ソケット

ソケット とは、純粋な TCP ソケットを介して純粋な印刷データを送信する仕組みです。一般的には 910035 などのポート番号を使用します。デバイス 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 プロトコルをベースにして作られたプロトコルです。 IPP では、他のプロトコルよりも多くのジョブ関連データを送信します。 CUPS では IPP を内部的なデータ転送手段として使用しています。 IPP を正しく設定するため、印刷キューの名前を指定する必要があります。 IPP のポート番号は 631 です。デバイス URI はたとえば下記のようになります:ipp://192.168.2.202/psipp://192.168.2.202/printers/ps

SMB (Windows 共有)

CUPS は Windows で共有されているプリンタにも接続して印刷することができます。この場合、使用するプロトコルは SMB と呼ばれます。 SMB ではポート番号 137 , 138, 139 をそれぞれ使用します。デバイス URI は smb://user:password@workgroup/smb.example.com/printer , smb://user:password@smb.example.com/printer, smb://smb.example.com/printer のいずれかの形態を取ります。

プリンタ側で対応しているプロトコルは、接続するまえにあらかじめ設定しておく必要があります。製造元が必要な情報を公開していない場合は、 nmap (nmap パッケージ) コマンドを利用することで、どのようなプロトコルに対応しているのかを調べることができます。 nmap は開いているポートを調べるためのコマンドで、たとえば下記のように実行します:

> nmap -p 35,137-139,515,631,9100-10000 プリンタの IP アドレス

7.5 コマンドラインツールを利用した CUPS の設定 Edit source

CUPS は lpinfo , lpadmin, lpoptions などのコマンドラインツールで設定することもできます。設定を行うにあたっては、バックエンド (USB など) とパラメータから構成されるデバイス URI を指定する必要があります。お使いのシステムでデバイス URI を判断するには、 lpinfo -v | grep ":/" を実行します:

> sudo lpinfo -v | grep ":/"
direct usb://ACME/FunPrinter%20XL
network socket://192.168.2.253

lpadmin を使用することで、 CUPS サーバに対して印刷キューの追加や削除、管理などを行うことができます。印刷キューを追加するには、下記の文法で指定します:

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

上記のように実行すると、 -v で指定したデバイスが、指定した PPD ファイル ( -P ) および キュー名 ( -p ) のキュー名で利用できるようになります。このことから、プリンタを手作業で設定するにあたっては、 PPD ファイルとデバイス URI をあらかじめ知っておかなければならないことになります。

なお、 -E を最初のオプションとして指定してはなりません。-E オプションを最初に指定すると、全ての CUPS コマンドで暗号化された接続を使用する意味になります。プリンタを有効化するには、 -E を下記のように指定して使用しなければなりません:

> sudo lpadmin -p ps -v usb://ACME/FunPrinter%20XL -P \
/usr/share/cups/model/Postscript.ppd.gz -E

ネットワークプリンタを設定するには、下記の例のように実行します:

> sudo 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. まずは全てのオプションを表示します:

    > sudo lpoptions -p キュー名 -l

    例:

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

    既定値として設定されている値には、アスタリスク ( * ) が付けられています。

  2. lpadmin を利用することで、このオプションを変更することができます:

    > sudo lpadmin -p キュー名 -o Resolution=600dpi
  3. 変更された設定を確認します:

    > sudo lpoptions -p キュー名 -l
    
    Resolution/Output Resolution: 150dpi 300dpi *600dpi

一般ユーザが lpoptions を実行した場合、設定値は ~/.cups/lpoptions 内に書き込まれます。 root で実行した場合は、設定値は/etc/cups/lpoptions に書き込まれます。

7.6 コマンドラインからの印刷 Edit source

コマンドラインから印刷処理を行うには、 lp -d キュー名 ファイル名 のようにして実行します。ここで、 キュー名ファイル名 には適切な値を指定します。

アプリケーションによっては、 lp コマンドを利用して印刷するものもあります。この場合は、アプリケーションの印刷ダイアログ内で ファイル名 以外の正しいオプションを指定してください。たとえば lp -d キュー名 のようになります。

7.7 openSUSE Leap での特殊機能 Edit source

CUPS 機能によっては openSUSE Leap 向けに調整されているものがあります。本章では、主な変更点が示されています。

7.7.1 CUPS とファイアウオール Edit source

openSUSE Leap を既定値のままインストールすると、 firewalld が有効化され、ネットワークインターフェイスが public ゾーンに割り当てられます。この場合、全ての着信接続がブロックされます。

firewalld が有効化されている場合、 internal (内部) ネットワークゾーンに対して mdnsipp を許可して、クライアント側からネットワークプリンタを参照できるように設定する必要があります。 public ゾーンに対しては、プリンタキューを公開すべきではありません。

(firewalld の設定について、詳しくは 23.4項 「firewalld および https://ja.opensuse.org/SDB:CUPS_and_SANE_Firewall_settings をお読みください。)

7.7.1.1 CUPS クライアント Edit source

通常、 CUPS はファイアウオールの内側にある、信頼のおけるネットワーク環境内のワークステーションで動作させるものです。この場合は、ネットワークインターフェイスをInternal ゾーンに割り当てることをお勧めします。これにより、ネットワーク側からワークステーションにアクセスできるようになります。

7.7.1.2 CUPS サーバ Edit source

CUPS サーバがファイアウオールで保護される信頼のできるネットワーク環境内にある場合、ネットワークインターフェイスはファイアウオールの Internal ゾーンに割り当てるべきです。 CUPS サーバを特別なファイアウオールルールで防ぎ、かつ CUPS で機密を保護する設定をしない限り、信頼のできないネットワーク環境内に配置することはおすすめしません。

7.7.2 ネットワークプリンタの参照 Edit source

CUPS サーバは、共有されているプリンタとその状態に関する情報を、ネットワークに対して定期的に提供します。クライアントはこの情報を元にして、たとえば印刷ダイアログ内のプリンタ情報を更新します。これを ブラウジング (参照) と呼びます。

CUPS サーバは、自身の印刷キューに関する情報をネットワーク側に提供する際、以前より用意されている CUPS ブラウジングプロトコルのほか、 Bonjour/DNS-SD も利用することができます。印刷キューに関する情報を参照できるようにするには、全てのクライアントで cups-browsed サービスを動作させる必要があります。 cups-browsed は既定では起動するように設定されていませんので、今すぐ起動するには sudo systemctl start cups-browsed を、システムの起動時に自動的に開始するように設定するには sudo systemctl enable cups-browsed を、全てのクライアントで実行してください。

cups-browsed を開始しても印刷キューが現れない場合、 CUPS サーバが印刷キューを Bonjour/DNS-SD で情報公開しているものと思われます。この場合は、全てのクライアントで avahi パッケージをインストールし、 sudo systemctl start avahi-daemon を実行して関連するサービスを起動しておく必要があります。

firewalld でプリンタを参照できるように設定する方法については、 7.7.1項 「CUPS とファイアウオール」 をお読みください。

7.7.3 様々なパッケージ内にある PPD ファイルについて Edit source

YaST プリンタ設定モジュールでは、 /usr/share/cups/model 内にある PPD ファイルを利用してキューを設定します。特定のプリンタのモデル (型式) 向けの PPD ファイルを見つけるにあたって、 YaST はハードウエアの検出段階で取り出した製造元とモデルの情報と、インストールされている全ての PPD ファイル内の情報を比較して行います。このような仕組みから、 YaST のプリンタ設定モジュールは、 PPD ファイル内にある情報をデータベース化して検索を高速にできるようにしています。

PPD ファイルのみを使用し、その他の情報源を使用しない構成であることから、 /usr/share/cups/model にある PPD ファイルを自由に編集することもできるようになっています。たとえば特定の PostScript プリンタに対する PPD ファイルが manufacturer-PPDs パッケージにも OpenPrintingPPDs-postscript パッケージにも用意されていないものの、製造元から提供されている場合、これを /usr/share/cups/model 内にコピーすることで、プリンタの機能を最大限に生かしながら印刷することができるようになります。

追加の PPD ファイルは、下記のパッケージ内に含まれています:

  • gutenprint: Gutenprint ドライバとそれを利用する PPD

  • splix: SpliX ドライバとそれを利用する PPD

  • OpenPrintingPPDs-ghostscript: Ghostscript 内蔵ドライバを使用する PPD

  • OpenPrintingPPDs-hpijs: HP 社のプリンタ以外に対する HPIJS ドライバ向け PPD

7.8 トラブルシューティング Edit source

下記には、プリンタハードウエアやソフトウエアで最もよく発生する問題と、その解決策や回避策を説明しています。特に GDI プリンタを利用する場合の問題や、 PPD ファイルやポートの設定などのほか、一般的なネットワークプリンタを使用する際の問題や、印刷が正しく出力されない問題やキューの処理の問題などを示しています。

7.8.1 標準プリンタ言語に対応していないプリンタについて Edit source

一般的なプリンタ言語には対応しておらず、特殊な非公開の制御シーケンスを通じてのみ制御可能なプリンタの場合は、製造元がドライバを提供しているオペレーティングシステムでしか動作させることができません。 GDI は Microsoft* がグラフィックデバイス向けに作成したプログラミングインターフェイスですが、 Windows 向けのドライバしか製造元が提供していないものの場合、 Windows は GDI を利用してプリンタ出力を行うことから、 GDI プリンタ と呼んでいます。実際にはプログラミングインターフェイスの問題ではなく、これらのプリンタが非公開のプリンタ言語を使用している点が問題となります。

このような GDI プリンタの場合、型式によっては GDI モードと標準プリンタ言語モードとを切り替えることができるものがあります。詳しくはプリンタのマニュアルをお読みのうえ、対応可能かどうかをご確認ください。また、型式によっては、特殊な Windows ソフトウエアを利用して切り替えるものもあります。この場合、 Windows 側でプリンタを使用すると、 GDI モードに強制的に切り替わってしまいますので、 Linux 側での印刷の際にはご注意ください。その他の GDI プリンタに対しては、利用可能な標準プリンタ言語向けの拡張モジュールがある場合もあります。

また、製造元によってはプリンタに対するプロプライエタリな (=オープンソースではない) ドライバを提供している場合があります。このようなドライバは、インストール済みの印刷システムで動作するかどうか、および様々なハードウエアプラットフォームに対応しているかどうかを保証することができません。逆に、標準プリンタ言語に対応しているプリンタであれば、印刷システムもハードウエアプラットフォームにも依存せずに使用することができます。

プロプライエタリな Linux ドライバの試行錯誤に時間を取られるくらいであれば、標準プリンタ言語 (できれば PostScript) に対応したプリンタを購入してしまったほうが、コスト面でもより有利になることでしょう。これでドライバの問題は一挙に解決できるわけですし、特殊なドライバのインストールや設定を行う必要もなくなるほか、今後のバージョンアップでも新しいドライバの提供を待つ必要がなくなります。

7.8.2 PostScript プリンタに対応する PPD ファイルが存在しない場合について Edit source

manufacturer-PPDsOpenPrintingPPDs-postscript パッケージにお使いの PostScript プリンタに対応した PPD ファイルが含まれていない場合は、プリンタの製造元が提供するドライバ CD 内に PPD ファイルが含まれていたり、プリンタの製造元の Web ページからダウンロードできたりする場合があります。

PPD ファイルが zip アーカイブ (.zip) や自己展開型の zip アーカイブ ( .exe ) で提供されている場合、まず unzip コマンドで展開を行ってください。展開を行ったら、まず PPD ファイルに付属するライセンス条件をご確認のうえ、 cupstestppd ユーティリティをお使いになり、 PPD ファイルが Adobe PostScript プリンタ定義ファイル仕様 バージョン 4.3 に準拠しているかどうかをご確認ください。ユーティリティが 失敗 を返す場合、 PPD ファイルには致命的な問題があり、重大な問題を引き起こすだろうことが判明します。ご利用になる前に、 cupstestppd で報告される問題点は全て解決しておくべきです。詳しくはプリンタの製造元にお尋ねください。

7.8.3 ネットワークプリンタの接続 Edit source

ネットワークの問題点の判別

まずはプリンタをコンピュータに直接接続してみてください。テスト用にローカル接続してプリンタの動作を確認します。問題なく動作するようであれば、問題点はネットワーク側にあることになります。

TCP/IP スタックの確認

TCP/IP ネットワークと名前解決が正しく動作しなければなりません。

リモートの lpd の確認

下記のコマンドを実行して、 ホスト にある lpd (ポート 515 ) に接続できるかどうかを確認します:

> netcat -z HOST 515 && echo ok || echo failed

lpd への接続が確立できない (failed と出力される) 場合は、プリンタ側で lpd が正しく動作していないか、基本的なネットワークの問題であることが分かります。

lpd サービスへの接続ができた場合は、さらに次のコマンドを root で実行して、 ホスト 内にある queue という印刷キューの状態を問い合わせます:

# echo -e "\004queue" \
| netcat -w 2 -p 722 ホスト 515

lpd が何も応答を返さない場合は、プリンタ側で lpd が正しく動作していないか、基本的なネットワークの問題であることが分かります。 lpd が応答を返した場合は、応答には ホストqueue でなぜ印刷ができないのかが表示されるはずです。 例7.1「lpd からのエラーメッセージ」 のような応答が届いた場合は、問題はリモート側の lpd にあることがわかります。

例 7.1: 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 ネットワークサーバが見つかると、 例7.2「CUPS ネットワークサーバからのブロードキャスト」 のように出力が現れます。

例 7.2: CUPS ネットワークサーバからのブロードキャスト
ipp://192.168.2.202:631/printers/queue

下記のコマンドを実行して、 ホスト にある lpd (ポート 631 ) に接続できるかどうかを確認します:

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

cupsd への接続が確立できない (failed と出力される) 場合は、プリンタ側で cupsd が正しく動作していないか、基本的なネットワークの問題であることが分かります。また、 lpstat -h ホスト -l -t のように実行すると、 ホスト にある全てのcupsd のキューに対する状態情報が表示されます。これが問題なく出力されれば、 cupsd は問題なく動作していて、問い合わせを受け付けることができるようになっているものと考えられます。

次のコマンドは、 ホスト 内にある キュー に対して、改行文字 1 文字を含むだけの印刷ジョブを受け付けるかどうかを試しています。これで出力されるものは何もなく、単に白紙のページが出力されるはずです。

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

印刷サーバ機内で動作しているスプーラは、複数の印刷ジョブを取り扱う必要があることから、場合によっては問題が発生することがあります。ただ、この問題は印刷サーバ機側の問題であることから、この問題を解決する方法はありません。ただし、印刷サーバ機に接続されているプリンタに TCP で直接アクセスして、スプーラを使用せずに印刷できる機器もあります。詳しくは 7.4項 「ネットワークプリンタ」 をお読みください。

このような方法でアクセスする場合、印刷サーバ機はデータ転送の形態を変換する (TCP/IP ネットワークとローカルのプリンタ接続) だけのコンバータとして動作することになります。この方法を使用するには、印刷サーバ機側でどのような 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_アドレス ポート
cat file | netcat -w 1 IP_アドレス ポート

これにより、プリンタがそのポートで動作している場合、文字列やファイルを特定のポートに送信することができます。

7.8.4 エラーメッセージが出力されないものの出力が正しくない場合について Edit source

印刷システムとしては、印刷ジョブは CUPS のバックエンドが宛先 (プリンタ) にデータを転送し終えた時点で完了となります。宛先での処理が失敗したような場合 (たとえば特定のプリンタ固有データの印刷ができなかったなど) は、印刷システム側には何も通知がされませんので、問題に気がつくこともありません。プリンタが特定の固有データを印刷できない場合は、プリンタに対してより適切な PPD ファイルを選択してください。

7.8.5 キューの無効化について Edit source

何回転送しようとしても宛先にデータを届けることができない場合、 CUPS バックエンド (USB もしくは socket) は印刷システム (cupsd) に対してエラーを通知します。バックエンド側では、何回データ送信に失敗したらエラーとして扱うのかを基準として決めています。この場合、それ以降の試行は無駄であるものと判断できるため、 cupsd では対応するキューでの印刷を無効化します。問題の原因が判明し解決したら、システム管理者側で cupsenable を実行して、印刷を再度有効化する必要があります。

7.8.6 CUPS ブラウジング: 印刷キューの削除 Edit source

CUPS ネットワークサーバが、キューをクライアントに対してブラウジングでブロードキャスト (全体通知) し、クライアント側の cupsd が動作している場合、クライアント側の cupsd はそのキューに対する印刷ジョブを受け付けるようになり、印刷ジョブが届いたらそれをサーバ宛に送信するようになります。サーバ側の cupsd が印刷ジョブを受け取ると、新しいジョブ番号が割り当てられます。このような仕組みであるため、クライアント側でのジョブ番号とサーバ側でのジョブ番号は、一般的に異なる値になります。ただし、クライアント側では印刷ジョブを即時に転送するため、クライアント側でジョブを削除することができない場合があります。これは、 cupsd が印刷ジョブを転送し終えた時点で、クライアント側ではジョブを削除してしまうためです。

サーバ側で印刷ジョブを削除するには、まずサーバ側でのジョブ番号を判断するため、 lpstat -h cups.example.com -o のようなコマンドを実行します。ただし、こちらもサーバ側で印刷ジョブが完了していない (プリンタからの出力が完了していない) 場合に限ります。ジョブ番号が判明したら、あとはサーバ内で印刷ジョブを削除します:

> cancel -h cups.example.com キュー名-ジョブ番号

7.8.7 出力が正しくない場合やデータ転送エラーが発生する場合について Edit source

印刷処理の最中にプリンタの電源を落としてしまったり、コンピュータをシャットダウンしてしまったりした場合は、印刷ジョブがキュー内に残ったままになってしまうことがあります。印刷処理はコンピュータ (もしくはプリンタ) に再度電源が入った際に再開されます。この場合を含め、出力が正しくない場合は、 cancel でキューから印刷ジョブを削除しなければなりません。

印刷ジョブにそもそも不正なデータが入っていた場合や、ホストとプリンタとの間で通信エラーが発生した場合、プリンタはデータを正しく処理することができず、意味不明な文字の羅列などの形で、大量のページが出力されてしまったりすることがあります。このような問題を解決するには、下記の手順で修復してください:

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

  2. 印刷ジョブは、プリンタに対してデータを送信し終えるまで、キューを保持したままになりますので、まずは lpstat -olpstat -h cups.example.com -o などを実行して、現在印刷中のキューを判断します。あとは cancel キュー名 - ジョブ番号 もしくは cancel -h cups.example.com キュー名 - ジョブ番号 で印刷ジョブを削除します。

  3. ただし、キューから印刷ジョブを削除しても、しばらくはプリンタが出力を続けてしまう場合がありますので、対応する印刷キューの CUPS のバックエンドプロセスを終了させます。

  4. いったんプリンタの電源を落として、プリンタをリセットします。しばらく経ってから用紙を入れ、プリンタの電源を入れてください。

7.8.8 CUPS のデバッグ Edit source

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* の内容を確認して、問題の原因を探ります。

7.8.9 さらなる情報 Edit source

openSUSE Leap における印刷時の問題について、より深い情報は openSUSE サポートデータベース (https://ja.opensuse.org/Portal:Printing) に用意されています。

このページを印刷