24 プリンタの運用 #
SUSE® Linux Enterprise Serverは、リモートネットワークプリンタも含め、さまざまな種類のプリンタを使った印刷をサポートしています。プリンタは手動で設定することも、YaSTを使用して設定することもできます。設定の詳細については、第34章 「プリンタの設定」を参照してください。プリントジョブの開始、管理には、グラフィカルインタフェースまたはコマンドラインユーティリティの両方を利用できます。プリンタが正常に動作しない場合は、24.8項 「トラブルシューティング」を参照してください。
CUPS (Common Unix Printing System)は、SUSE Linux Enterprise Serverの標準印刷システムです。
プリンタは、インタフェース(USB、ネットワークなど)と、プリンタ言語によって区別できます。プリンタを購入するときは、プリンタがサポートされているインタフェース(USB、Ethernet、またはWi-Fi)を備えていること、および適切なプリンタ言語が使用できることを確認してください。プリンタは、次の3つのプリンタ言語クラスに基づいて分類できます。
- PostScriptプリンタ
PostScriptは、LinuxとUnix環境のほとんどの印刷ジョブを生成する際に使用されるプリンタ言語であり、内部の印刷システムもこの言語を使用して処理を行います。使用中のプリンタがPostScriptドキュメントを直接処理でき、印刷システム側で追加のステージを使用して変換を行う必要がない場合、潜在的なエラーの原因の数が減少します。
現在では、標準的な印刷ジョブフォーマットとしてPDFがPostScriptに取って代わりつつあります。PostScriptに加え、PDFも直接印刷できるPostScript+PDFプリンタは、すでに存在しています。従来のPostScriptプリンタでは、印刷ワークフローでPDFをPostScriptに変換する必要があります。
- 標準的なプリンタ(PCLおよびESC/Pなどの言語)
既知のプリンタ言語の場合、印刷システムはGhostscriptを使用して、PostScriptのジョブを該当のプリンタ言語へ変換できます。この処理ステージを「解釈」と呼びます。非常によく知られている言語としては、HPのプリンタおよび互換モデルが採用しているPCLと、Epsonのプリンタが採用しているESC/Pがあります。これらのプリンタ言語は、通常、Linuxによってサポートされており、十分な印刷結果が得られています。Linuxは、特定の特殊な印刷機能に対応できない場合があります。HPとEpson以外には、現時点で、Linuxドライバを開発してオープンソース条項に基づきそれらをLinuxのディストリビュータに提供しているプリンタメーカーは存在しません。
- 独自規格のプリンタ(GDIプリンタ)
これらのプリンタは、共通のプリンタ言語をサポートしていません。これらのプリンタは独自のプリンタ言語を使用しており、新しいエディション/モデルがリリースされると、プリンタ言語も変更される可能性があります。通常このようなプリンタでは、Windowsドライバしか利用できません。詳細については、24.8.1項 「標準的なプリンタ言語をサポートしないプリンタ」を参照してください。
新しいプリンタを購入する前に、次の各ソース(情報源)を参照し、購入を予定しているプリンタがどの程度までサポートされているかを確認してください。
- https://www.openprinting.org/printers
プリンタデータベースのあるOpenPrintingホームページです。このデータベースは、最新のLinuxサポートステータスを示します。しかし、Linuxのディストリビューションが統合できるのは、製造の時点で使用可能だったドライバだけです。したがって、現時点で「完全にサポート済み」と評価されているプリンタであっても、最新バージョンのSUSE Linux Enterprise Serverがリリースされた時点では、そのステータスに達していなかった可能性があります。そのため、これらのデータベースは必ずしも正しいステータスを表しているとは限らず、おおよその状況を提示するだけにとどまっています。
- https://pages.cs.wisc.edu/~ghost/
GhostscriptのWebページ。
/usr/share/doc/packages/ghostscript/catalog.devices
組み込みのGhostscriptドライバのリスト。
24.1 CUPSのワークフロー #
ユーザが印刷ジョブを作成します。印刷ジョブは、印刷するデータとスプーラの情報で構成されます。これには、プリンタの名前やプリントキューの名前のほか、オプションでフィルタに関する情報(プリンタ固有のオプションなど)が含まれます。
各プリンタには、1つ以上の専用印刷キューが存在しています。指定のプリンタがデータを受け取れるようになるまで、スプーラは印刷ジョブをキュー内に留めています。プリンタの準備が整うと、スプーラはフィルタおよびバックエンドを経由して、プリンタにデータを送信します。
このフィルタは、印刷中のアプリケーションが生成したデータ(通常はPostScriptやPDFですが、ASCII、JPEGなどの場合もあります)を、プリンタ固有のデータ(PostScript、PCL、ESC/Pなど)に変換します。プリンタの機能については、PPDファイルに記述されています。PPDファイルには、プリンタ固有のオプションが記述されています。各オプションに対しては、プリンタでそのオプションを有効にするために必要なパラメータが指定されています。フィルタシステムは、ユーザが有効として選択したオプションを確認します。
PostScriptプリンタを選択すると、フィルタシステムがデータをプリンタ固有のPostScriptに変換します。この変換にプリンタドライバは必要ありません。PostScript非対応プリンタを使用すると、フィルタシステムがデータをプリンタ固有データに変換します。この変換には、使用しているプリンタに適応したプリンタドライバが必要です。バックエンドは、プリンタ固有データをフィルタから受信し、そのデータをプリンタに送信します。
24.2 プリンタに接続するための方法とプロトコル #
プリンタをシステムに接続するには、複数の方法があります。CUPSの設定は、ローカルプリンタと、ネットワーク経由でシステムに接続されているプリンタを区別しません。プリンタ接続の詳細については、https://en.opensuse.org/SDB:CUPS_in_a_Nutshellにアクセスして「CUPS in a Nutshell」という記事を参照してください。
IBM Z IBM Zのメインフレームにローカルで接続するz/VMによって提供されるプリンタおよび類似デバイスは、CUPSでサポートされていません。これらのプラットフォーム上では、ネットワーク経由の印刷だけを利用できます。ネットワークプリンタのケーブリング(ケーブル接続)は、プリンタメーカの指示にしたがって設置する必要があります。
プリンタをコンピュータに接続する場合、コンピュータの動作中に接続と取り外しを行って良いのはUSBデバイスだけであることに注意してください。システムやプリンタの損傷を回避するために、USB以外の接続を変更する場合は、あらかじめシステムをシャットダウンしてください。
24.3 ソフトウェアのインストール #
PPD (PostScript printer description、PostScriptプリンタ記述)は、PostScriptプリンタの特性(解像度など)やオプション(両面印刷ユニットなど)を記述するコンピュータ言語です。これらの記述は、CUPS側でプリンタオプションを使用するために必須です。PPDファイルがない場合、印刷データは「raw」(ロー、未加工)状態でプリンタへ送信されますが、そのことは望ましくありません。
PostScriptプリンタを設定する場合、最善のアプローチは、適切なPPDファイルを入手することです。パッケージmanufacturer-PPDs
およびOpenPrintingPPDs-postscript
で、多くのPPDファイルが提供されています。24.7.3項 「複数のパッケージ内のPPDファイル」および24.8.2項 「特定のPostScriptプリンタに適したPPDファイルが入手できない」を参照してください。
新しいPPDファイルは、/usr/share/cups/model/
ディレクトリ内に保存するか、YaSTで印刷システムに追加できます(34.1.1項 「YaSTによるドライバの追加」を参照)。その後は、プリンタのセットアップ時にPPDファイルを選択できるようになります。
プリンタメーカーがソフトウェアパッケージ全体をインストールさせようとする場合には注意してください。第一に、このタイプのインストールを行うと、SUSE Linux Enterprise Serverによって提供されているサポートが失われる場合があります。第二に、印刷コマンドが異なる動作をする可能性があり、システムが他のメーカーのデバイスに対応できなくなる場合があります。この理由で、メーカのソフトウェアをインストールすることをお勧めしません。
24.4 ネットワークプリンタ #
ネットワークプリンタは複数のプロトコルをサポートできます。サポートされているプロトコルのほとんどが標準化されているので、特定のメーカーは標準を変更します。そして、メーカーは、少数のオペレーティングシステムにのみ対応するドライバを提供し、Linuxドライバはめったに提供されません。現在の状況では、あらゆるプロトコルがLinux環境で円滑に動作するという仮定に基づいて行動することはできません。したがって、機能する設定を実現するために、いくつかのオプションを実験する必要があります。
CUPSは、socket
、LPD
、IPP
、およびsmb
プロトコルをサポートしています。
- socket
ソケットは、プレーンプリントデータのTCPソケットへの直接送信に使用される接続です。一般的に使用されるsocketのポート番号は、
9100
または35
です。デバイスURI (Uniform Resource Identifier)の構文は、socket://IP.OF.THE.PRINTER:PORTです(たとえば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/ps
およびipp://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.OF.THE.PRINTER
24.5 コマンドラインツールによるCUPSの設定 #
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 QUEUE -v DEVICE-URI -P PPD-FILE -E
このデバイス(-v
)は、指定したPPDファイル(-P
)を使用してQUEUE (-p
)として使用できます。プリンタを手動で設定する場合は、このPPDファイルとデバイスのURIを把握しておく必要があります。
-E
は、最初のオプションとして使用しないでください。どのCUPSコマンドでも、-E
を最初の引数として使用した場合、暗号化接続を使用することを暗示的に意味します。プリンタを使用可能にするには、次の例に示す方法で-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を使用して、これらのデフォルトオプションを変更することもできます。コマンドラインツールを使用して、デフォルトオプションを次のように設定します。
最初に、すべてのオプションを列挙します。
>
sudo
lpoptions -p QUEUE -l例:
Resolution/Output Resolution: 150dpi *300dpi 600dpi
アクティブになったデフォルトオプションは、先頭にアスタリスク(
*
)が付いています。次のように
lpadmin
を使用してオプションを変更します。>
sudo
lpadmin -p QUEUE -o Resolution=600dpi新しい設定値の確認:
>
sudo
lpoptions -p QUEUE -l Resolution/Output Resolution: 150dpi 300dpi *600dpi
標準ユーザがlpoptions
を実行すると、設定が~/.cups/lpoptions
に書き込まれます。ただし、root
設定は/etc/cups/lpoptions
に書き込まれます。
24.6 コマンドラインからの印刷 #
コマンドラインから印刷するには、「lp -d
QUEUENAME FILENAME」と入力し、QUEUENAMEとFILENAMEを対応する名前で置き換えます。
いくつかのアプリケーションでは、印刷処理をlp
コマンドに依存しています。この場合、アプリケーションの印刷ダイアログで正しいコマンドを入力します。通常はFILENAMEを指定しません。たとえば、「lp -d
QUEUENAME」と入力します。
24.7 SUSE Linux Enterprise Serverの特別な機能 #
CUPSの複数の機能は、SUSE Linux Enterprise Serverで使用できるように調整されています。ここでは、最も重要な変更点について説明します。
24.7.1 CUPSとファイアウォール #
デフォルトのSUSE Linux Enterprise Serverのインストールを完了した後、firewalld
はアクティブになり、ネットワークインタフェースは着信トラフィックをブロックするpublic
ゾーンに設定されます。
firewalld
がアクティブな場合は、内部ネットワークゾーンを介してmdns
およびipp
を許可することにより、クライアントがネットワークプリンタをブラウズできるように設定する必要がある場合があります。パブリックゾーンでは、プリンタキューを公開しないでください。
(firewalld
の設定の詳細については、Section 23.4, “firewalld
”およびhttps://en.opensuse.org/SDB:CUPS_and_SANE_Firewall_settingsを参照してください。)
24.7.1.1 CUPSクライアント #
通常、CUPSクライアントはファイアウォール内部の信頼されるネットワーク環境の通常のワークステージョンで実行されます。この場合、ネットワークインタフェースをInternal
Zone
に設定し、ワークステーションにネットワーク内部から到達できるようにすることを推奨します。
24.7.1.2 CUPSサーバ #
CUPSサーバがファイアウォールで保護された信頼済みネットワーク環境の一部の場合、ネットワークインタフェースはファイアウォールのInternal Zone
に設定します。CUPS設定で特別なファイアウォールルールおよびセキュア設定により保護する場合を除いて、信頼できないネットワーク環境でCUPSサーバを設定することはお勧めできません。
24.7.2 ネットワークプリンタの参照 #
CUPSサーバは、共有プリンタが利用可能かどうか、およびそのステータスをネットワーク上で定期的にアナウンスします。クライアントは、この情報にアクセスすることで、印刷ダイアログなどに利用可能なプリンタのリストを表示できます。これを「参照」と呼びます。
CUPSサーバでは、ネットワークを介して印刷キューをアナウンスする際に、従来のCUPS参照プロトコルまたはBonjour/DNS-SDが使用されます。ネットワーク印刷キューの参照を有効にするには、cups-browsed
サービスを、CUPSサーバを介して印刷するすべてのクライアントで実行する必要があります。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
を介してプリンタの参照を許可する方法の詳細については、24.7.1項 「CUPSとファイアウォール」を参照してください。
24.7.3 複数のパッケージ内のPPDファイル #
YaSTのプリンタ環境設定では、/usr/share/cups/model
にインストールされたPPDファイルを使用して、CUPSのキューがセットアップされます。プリンタモデルに適合するPPDファイルを見つけるため、YaSTはハードウェア検出時に判別されたベンダおよびモデルを、すべてのPPDファイル内のベンダおよびモデルと比較します。このために、YaSTのプリンタ環境設定機能は、PPDファイルから抽出したベンダおよびモデルの情報に基づいて、データベースを生成します。
PPDファイルのみを使用し、他の情報ソースを使用しない設定には、/usr/share/cups/model
内のPPDファイルを自由に変更できるという利点があります。たとえば、PostScriptプリンタを使用している場合、そのPPDファイルを/usr/share/cups/model
へ直接コピーし(それらがまだmanufacturer-PPDs
またはOpenPrintingPPDs-postscript
パッケージ内に存在していない場合)、使用中のプリンタに合わせて最適な設定を行うこともできます。
追加のPPDファイルは次のパッケージで提供されています。
gutenprint
: Gutenprintドライバとそれに一致するPPDsplix
: SpliXドライバとそれに一致するPPDOpenPrintingPPDs-ghostscript
: Ghostscriptの組み込みドライバ用PPDOpenPrintingPPDs-hpijs
: HP以外のプリンタ向けのHPIJSドライバ用PPD
24.8 トラブルシューティング #
ここでは、プリンタハードウェアおよびソフトウェアに最も一般的に発生する問題と、それを解決または回避する方法について説明します。GDIプリンタ、PPDファイル、およびポート設定などのトピックをカバーしています。一般的なネットワークプリンタに関する問題、印刷に問題がある場合、およびキュー処理についても対処しています。
24.8.1 標準的なプリンタ言語をサポートしないプリンタ #
これらのプリンタは、共通のプリンタ言語をサポートしておらず、独自のコントロールシーケンスを使用しないと対処できません。そのため、これらのプリンタは、メーカがドライバを添付した特定のバージョンのオペレーティングシステムでのみ動作します。GDIは、Microsoft*がグラフィックデバイス用に開発したプログラミングインタフェースです。通常、メーカーはWindows用のドライバだけを提供しており、WindowsドライバはGDIインタフェースを使用しているため、これらのプリンタは「GDIプリンタ」と呼ばれることもあります。実質的な問題は、このプログラミングインタフェースではなく、これらのプリンタを制御できるのは、各プリンタモデルが採用している独自のプリンタ言語のみということです。
特定のGDIプリンタは、GDIモードと標準的なプリンタ言語のいずれかの間で操作を切り替えることができます。切り替えができるかどうかは、プリンタのマニュアルを確認してください。特定のモデルでは、切り替えを行うために特別なWindowsソフトウェアが必要です。たとえば、Windowsから印刷する場合、Windowsプリンタドライバでは常にプリンタをGDIモードに切り替える場合があります。他のGDIプリンタでは、標準のプリンタ言語を利用するための拡張モジュールが用意されています。
いくつかのメーカは、プリンタに独自規格のドライバを提供しています。独自規格のプリンタドライバの欠点は、インストール済みの印刷システムとそのドライバを組み合わせたときに動作するという保証も、複数のハードウェアプラットフォームに適しているという保証もないことです。一方、標準的なプリンタ言語をサポートするプリンタは、特殊なバージョンの印刷システムや特殊なハードウェアプラットフォームに依存しません。
専有のLinuxドライバを機能させようと時間を費やす代わりに、標準プリンタ言語(PostScript推奨)をサポートするプリンタを購入する方が費用効率が高い場合があります。この方法により、ドライバの問題を一度で完全に解決できます。特殊なドライバソフトウェアのインストールと設定を行う必要はなく、新しい印刷システムの開発に伴ってドライバのアップデートを入手する必要もありません。
24.8.2 特定のPostScriptプリンタに適したPPDファイルが入手できない #
manufacturer-PPDs
パッケージまたはOpenPrintingPPDs-postscript
パッケージに、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ファイルが入手できるかどうかをプリンタメーカに問い合わせることも考えられます。
24.8.3 ネットワークプリンタ接続 #
- ネットワークの問題の識別
プリンタをコンピュータに直接接続します。テストの目的で、そのプリンタをローカルプリンタとして設定します。この方法で動作する場合、問題はネットワークに関連しています。
- TCP/IPネットワークの確認
TCP/IPネットワークと名前解決が正しく機能していることが必要です。
- リモート
lpd
の確認 次のコマンドを使用して、
lpd
上の515
(ポートHOST)に対するTCP接続を確立できるかどうかをテストします。>
netcat -z HOST 515 && echo ok || echo failedlpd
への接続を確立できない場合、lpd
がアクティブになっていないか、ネットワークの基本的な問題があります。root
ユーザで次のコマンドを実行し、リモートHOST上のQUEUEに関するステータスレポートを照会することもできます。これは、該当のlpd
がアクティブで、そのホストが照会を受け付けることを前提にしています。#
echo -e "\004queue" \ | netcat -w 2 -p 722 HOST 515lpd
が応答しない場合、それがアクティブになっていないか、ネットワークの基本的な問題が発生している可能性があります。lpd
が応答する場合、その応答は、host
上にあるqueue
を介して印刷ができない理由を示すはずです。例24.1「lpd
からのエラーメッセージ」で示すような応答を受け取った場合、問題はリモートのlpd
にあります。例 24.1: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ネットワークサーバが存在している場合、出力は例24.2「CUPSネットワークサーバからのブロードキャスト」に示すようになります。
例 24.2: CUPSネットワークサーバからのブロードキャスト #ipp://192.168.2.202:631/printers/queue
IBM Z IBM ZのEthernetデバイスは、デフォルトではブロードキャストを受信しないことを考慮してください。
次のコマンドを使用して、HOST上の
cupsd
(ポート631
)に対するTCP接続を確立できるかどうかをテストすることができます。>
netcat -z HOST 631 && echo ok || echo failedcupsd
への接続を確立できない場合、cupsd
がアクティブになっていないか、ネットワークの基本的な問題があります。lpstat -h
HOST -l -tは、HOST上のすべてのキューのステータスレポートを返します。これは、該当のcupsd
がアクティブで、そのホストが照会を受け付けることを前提としています。次のコマンドを使用して、HOST上のQUEUEが、1つのキャリッジリターン(CR、改行)文字からなる印刷ジョブを受け付けるかどうかをテストできます。何も印刷されないのが妥当です。空白のページが排出されるはずです。
>
echo -en "\r" \ | lp -d queue -h HOST- ネットワークプリンタまたは印刷サーバマシンのトラブルシューティング
印刷サーバマシン上のスプーラは時々、複数の印刷ジョブを処理する必要が生じた場合、問題を引き起こすことがあります。これは印刷サーバマシンのスプーラで発生するため、この問題を解決する方法はありません。回避策として、TCPソケットを使用して、印刷サーバマシンに接続されているプリンタに直接送信することで、印刷サーバマシン内のスプーラを使用しないようにします。24.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_PORT IP_ADDRESSコマンドを使用します。詳細な情報については、nmap
のマニュアルページを参照してください。次のようなコマンドを入力します。
>
echo -en "\rHello\r\f" | netcat -w 1 IP-address port cat file | netcat -w 1 IP-address portこれは、このポートを通してプリンタを使用できるかどうかをテストするために、該当のポートへ文字列またはファイルを直接送信します。
24.8.4 エラーメッセージを生成しない異常なプリントアウト #
印刷システムの観点では、CUPSバックエンドが受信側(プリンタ)へのデータ転送を完了した段階で、印刷ジョブは完了します。受信側でそれ以降の処理が失敗した場合(たとえば、プリンタがそのプリンタ固有のデータを印刷できない)、印刷システムはこれを検出しません。プリンタがそのプリンタ固有のデータを印刷できない場合、そのプリンタにより適していると考えられるPPDファイルを選択します。
24.8.5 無効にされたキュー #
受信側へのデータ転送が数回の試行後に完全に失敗した場合、USB
やsocket
などのCUPSバックエンドは印刷システム(より正確にはcupsd
)にエラーを報告します。データ転送が不可能と報告される前に、バックエンドは何回の試行の失敗が妥当であるかを判断します。それ以上の試行は無駄に終わる可能性があるので、cupsd
はそれぞれのキューの印刷を無効にします。問題の原因を取り除いた後、システム管理者はcupsenable
コマンドを使用して、印刷を再度有効にする必要があります。
24.8.6 CUPS参照: 印刷ジョブの削除 #
CUPSネットワークサーバが参照機能を使用して自らのキューをクライアントホストへブロードキャストし、クライアントホスト側で適切なローカルcupsd
がアクティブになっている場合、クライアント側のcupsd
はアプリケーションから印刷ジョブを受け付け、サーバ側のcupsd
へそれらを転送します。サーバ上でcupsd
が印刷ジョブを受け付けると、そのジョブには新しいジョブ番号が割り当てられます。したがって、クライアントホスト上のジョブ番号は、サーバ上のジョブ番号とは異なっています。印刷ジョブは通常、即座に転送されるので、クライアントホスト上でジョブ番号でそのジョブを削除することはできません。クライアント側のcupsd
は、サーバ側のcupsd
への転送が完了した時点で、その印刷ジョブは完了したと考えるからです。
サーバ上の印刷ジョブを削除するには、lpstat
-h cups.example.com -o
などのコマンドを使用して、サーバ上のジョブ番号を判別します。これは、サーバがまだ印刷ジョブをプリンタに送信して完了していないことが前提となります。取得したジョブ番号を使用して、次のようにサーバ上の印刷ジョブを削除します。
>
cancel -h cups.example.com QUEUE-JOBNUMBER
24.8.7 異常な印刷ジョブとデータ転送エラー #
印刷プロセス中にプリンタの電源を切ったり、コンピュータをシャットダウンすると、印刷ジョブはキュー内に残ります。コンピュータ(またはプリンタ)の電源を再度投入すると、印刷が再開されます。異常な印刷ジョブは、cancel
を使用してキューから削除する必要があります。
印刷ジョブが破損しているか、ホストとプリンタ間の通信にエラーが発生した場合、プリンタはデータを正しく処理できず、判読不能な文字を含む多数の用紙を印刷します。この問題を解決するには、次の手順を実行します。
プリンタの動作を停止するために、インクジェットプリンタの場合、すべての用紙を取り除きます。レーザープリンタの場合、用紙トレイを開けます。上位機種のプリンタでは、現在のプリントアウトをキャンセルするボタンを用意していることもあります。
この時点で、印刷ジョブはキューに残っている可能性があります。ジョブがキューから削除されるのは、ジョブをプリンタへ送信した後に限られるからです。
lpstat -o
またはlpstat -h cups.example.com -o
を使用して、どのキューが現在印刷に使用されているかを確認します。cancel
QUEUE-JOBNUMBERまたはcancel -h cups.example.com
QUEUE-JOBNUMBERを使用して印刷ジョブを削除します。印刷ジョブがすでにキューから削除されているにもかかわらず、特定のデータが依然としてプリンタへ送信され続けることもあります。CUPSバックエンドプロセスが、引き続き該当のキューを対象として動作しているかどうかをチェックし、その処理を停止します。
プリンタの電源をしばらくオフにして、リセットします。その後、紙を元に戻し、プリンタの電源をオンにします。
24.8.8 CUPSのデバッグ #
CUPSの問題を特定するために、次の一般的な手順を実行します。
/etc/cups/cupsd.conf
でLogLevel debug
を設定します。cupsd
を停止します。/var/log/cups/error_log*
を削除して、大規模なログファイルから検索を行うことを避けます。cupsd
を開始します。問題の原因となったアクションをもう一度実行します。
/var/log/cups/error_log*
内のメッセージを確認し、問題の原因を識別します。
24.8.9 詳細情報 #
SUSE Linux Enterprise Serverでの印刷の詳細については、openSUSE Support Database (https://en.opensuse.org/Portal:Printing)にアクセスしてください。SUSE Knowledgebase (https://www.suse.com/support/)では、さまざまな個別の問題のソリューションが紹介されています。CUPS
のテキスト検索機能により関連する記事を見つけてください。