CUPS
CUPS は、Linux® や他の Unix® ライクなオペレーティングシステムのための標準ベースのオープンソースな印刷システムです。OpenPrinting によって開発されています。
Arch Linux では、Apple CUPS フォークではなく、OpenPrinting CUPS フォークがパッケージングされています。
インストール
任意で、PDF ドキュメントに"印刷"したい場合は、cups-pdf パッケージをインストールしてください。デフォルトでは、PDF ファイルは /var/spool/cups-pdf/username/
に保存されます。保存場所は /etc/cups/cups-pdf.conf
で変更することができます。
そして、cups.service
を有効化し、起動してください。または、ソケットアクティベーションを使用することで、このサービスがプログラムによって必要とされる場合にのみ CUPS を起動させることもできます。
印刷の流れ
関連する問題を解決したい場合は、CUPS がどう機能するかを知っておくことが重要です:
- '印刷' が選択された際、アプリケーションは PDF ファイルを CUPS に送信します (アプリケーションが他の形式を送信した場合、それらはまず PDF に変換されます)。
- CUPS はプリンタの PPD ファイル (プリンタ記述ファイル) を参照し、PDF ファイルをプリンタの理解できる言語 (PJL、PCL、ビットマップ、ネイティブな PDF など) へ変換するためにどのようなフィルタを使用する必要があるかを調べます。
- フィルタが PDF ファイルをプリンタの理解できる形式へ変換します。
- 最後に、そのデータがバックエンドへ送られます。例えば、プリンタが USB ポートに接続されている場合、USB バックエンドが使用されます。
接続インターフェイス
様々なインターフェイスにおける、プリンタを認識させるための追加の手順を以下に載せています。
USB
USB プリンタが認識されているかどうか確認するには、まず usbutils パッケージがインストールされていることを確認し、以下を実行してください:
$ lsusb
(...) Bus 001 Device 007: ID 03f0:1004 Hewlett-Packard DeskJet 970c/970cse
パラレルポート
パラレルポートプリンターを使うには、カーネルモジュール lp
、parport
、そして parport_pc
が必要です。
# dmesg | grep -i parport
parport0: Printer, Hewlett-Packard HP LaserJet 2100 Series lp0: using parport0 (polling)
ネットワーク
既知の場所のプリンタを追加する
プリンタのアドレスがわかっている場合 (アドレスは、プリンタの画面に表示されたり、他の何らかの方法でネットワークをスキャンしたりなどして得られます)、プリンタを動的に発見する機能 (DNS-SD/mDNS) に頼る必要はありません。CUPS のキューを直接追加することで、プリンタを使用することができます。lpadmin でキューを追加する歩法については、次の章かドキュメント Setting up printers で見られます。
プリンタを発見する
DNS-SD/mDNS を使ってプリンタを発見、使用、または共有するには、Avahi を使って .local ホストネーム解決をセットアップして、cups.service
を再起動してください。
Samba を使ってネットワークプリンターを共有する場合や、例えばシステムを Windows クライアント用のプリンターサーバーにする場合、samba パッケージが必要です。
プリンタードライバー
最近 (2010年以降) のプリンタのほとんどは、AirPrint や IPP_Everywhere を実装しているのでドライバレスでの使用をサポートしています (以下を参照)。
プリンターのドライバーは以下のソースのどこかから入手することができます。動作するのが確認されているドライバーの不完全なリストは CUPS/プリンター別の問題 を見てください。
プリンターを動かすのに、CUPS は PPD ファイルを必要とします。また、大抵のプリンターではいくつかのフィルターも必要です。CUPS がどうやって PPD やフィルターを使用するのかは [1] に詳しく書かれています。
OpenPrinting Printer List は多数のプリンターの推奨ドライバーを教えてくれます。個別のプリンターの PPD ファイルも提供されていますが、大抵の場合は foomatic や推奨されているドライバーパッケージから手に入ります。
PPD ファイルが CUPS に供給されると、CUPS サーバーは PPD ファイルを再生成して /etc/cups/ppd/
に保存します。
PKGBUILD を作成する前に PPD ファイルが動作することを確認するために、PPD ファイルを /usr/share/cups/model
に手動で追加することができます。cups サービスを再起動したあとに、そのドライバが利用可能になるはずです。
AirPrint と IPP Everywhere
CUPS には AirPrint と IPP Everywhere プリンタのサポートが含まれています。そのようなプリンタは自動的に発見されるはずです。
OpenPrinting CUPS フィルタ
Linux Foundation の OpenPrinting ワークグループは、cups-filters を提供しています。これらは、かつて CUPS の一部だったがプロジェクトから外されたバックエンド、フィルタ、そしてその他のバイナリです。これらは、cups の依存関係である cups-filters パッケージで利用できます。
非 PDF プリンタは、ghostscript をインストールする必要があります。PostScript プリンタは、gsfonts も必要である場合があります。
Foomatic
Linux Foundation の OpenPrinting ワークグループの foomatic は、多くのプリンタドライバの PPD を (フリーとフリーでないもの両方) 提供しています。foomatic が何をするかに関する詳細は Foomatic from the Developer's View を参照してください。
foomatic を使うには、foomatic-db-engine と、以下から最低でも1つをインストールしてください:
- foomatic-db - foomatic-db-engine によって PPD ファイルを生成するために使用される XML ファイルのコレクション。
- foomatic-db-ppds — ビルド済み PPD ファイル群。
- foomatic-db-nonfree — プリンタのメーカーからフリーでないライセンスの XML ファイルのコレクション。foomatic-db-engine によって PPD ファイルを生成するために使用されます。
- foomatic-db-nonfree-ppds — フリーでないライセンスのビルド済み PPD ファイル群。
foomatic PPD は追加のフィルタを必要とする場合があります (例: min12xxwAUR)。
Gutenprint
Gutenprint プロジェクトは、CUPS と GIMP で使うための、Canon、Epson、Lexmark、Sony、Olympus、Brother、HP、Ricoh、PCL、そして一部の汎用プリンタ用のドライバを提供しています。
gutenprint と foomatic-db-gutenprint-ppds をインストールしてください。
メーカー固有のドライバ
多くのプリンタメーカーは独自の Linux ドライバを配布しています。中には Arch の公式リポジトリや AUR から入手できるものもあります。
これらのドライバのうちいくつかは CUPS/プリンター別の問題 で詳しく説明されています。
プリンター URI
以下は、必要に応じて手動で URI を生成する追加の手順をリストアップしています。一部のプリンタとドライバは、CUPS/プリンター別の問題 で説明されている通り、特殊な URI を必要とする場合があります。
USB
CUPS は USB プリンタの URI を自動的に生成できるはずです (例: usb://HP/DESKJET%20940C?serial=CN16E6C364BH
)。
生成されない場合、CUPS/トラブルシューティング#USB プリンター でトラブルシューティングの手順を確認してください。
パラレルポート
URI は parallel:device
という形式である必要があります。例えば、プリンターが /dev/lp0
で接続されている場合、parallel:/dev/lp0
を使ってください。USB からパラレルポートに変換するアダプタを使っている場合、プリンター URI は parallel:/dev/usb/lp0
を使ってください。
ネットワーク
#ネットワークに書かれているように Avahi を設定することで、CUPS はプリンター URI を探知します。avahi-discover
を使ってプリンターの名前やアドレスを確認することもできます (例: BRN30055C6B4C7A.local/10.10.0.155:631
)。
Avahi を使わずに URI を手動で生成することも可能です。ネットワークプリンターで利用可能な URI スキーマのリストは CUPS のドキュメントを見てください。プリンターによって URI には細かい違いがあるので、プリンターのマニュアルや CUPS/プリンター別の問題もチェックしてください。
SMB 共有におけるプリンタの URI は、smbspool(8) man ページで説明されています。
リモートの CUPS 印刷サーバーは ipp://hostname:631/printers/queue_name
という形式の URI でアクセスできます。リモートの印刷サーバーをセットアップする方法は CUPS/プリンター共有#GNU/Linux システム間 を見てください。
他の問題については CUPS/トラブルシューティング#ネットワークの問題を見てください。
使用方法
CUPS は lp* ツールと cups* ツールを使って完全に制御できます。または、#ウェブインターフェイス や #GUI アプリケーション を使うこともできます。
- queue はキューを識別するために使われる短くてわかりやすい名前です。名前に空白・特殊文字を含めることはできません。例えば、HP LaserJet 5P を使用する印刷キューの名前は "hpljet5p" などとします。複数のキューを物理的なプリンターに関連付けることができます。
- location はプリンターの物理的な場所の説明です (例えば "bedroom" や "kitchen" など)。複数のプリンターを管理しやすくするためにあります。
- description はプリンターの完全な説明です。大抵はプリンターの正式名称が使われます ("HP LaserJet 5P" など)。
CLI ツール
コマンドラインツールに関するヒントはローカルの CUPS ドキュメントを参照してください。
SNMP を使って URI を見つけるには:
$ /usr/lib/cups/backend/snmp ip_address
lp*
lpinfo コマンドは、-v
オプションを付けるとシステムに接続されているプリンタの URI を一覧表示し、-m
オプションを付けるとシステム上にインストールされている利用可能な全てのドライバ (CUPS 用語では "モデル") を一覧表示します。
lpadmin ユーティリティは、-p queue_name
オプションを付けると新しいキューを作成します。-p
に -E
を加えると、プリンタを有効化し、ジョブを受け入れるようになります。-v
フラグはデバイスの URI を指定します。-m
フラグは、使用するドライバ (CUPS 用語では "モデル") か PPD ファイルを指定します。
-x
フラグを使うことでプリンタを取り除くこともできます (先に #cups* を読んでください)。
例:
# lpadmin -p HP_DESKJET_940C -E -v "usb://HP/DESKJET%20940C?serial=CN16E6C364BH" -m drv:///HP/hp-deskjet_940c.ppd.gz
ドライバレスのキュー (Apple AirPrint か IPP Everywhere) の場合は:
# lpadmin -p AirPrint -E -v "ipp://10.0.1.25/ipp/print" -m everywhere
raw キューの場合 (PPD もフィルタも無し):
# lpadmin -p SHARED_PRINTER -m raw
モデルではなく PPD を指定する場合:
# lpadmin -p Test_Printer -E -v "ipp://10.0.1.3/ipp/print" -m pxlmono.ppd
lpq ユーティリティはキューのチェックを行います。全てのキューをチェックするには -a
フラグを追加してください。
lprm ユーティリティはキューをクリアします。デフォルトの最後のキューではなく、全てのエントリを削除するには -
を追加してください。
lpr ユーティリティは印刷を行います。ファイルを N 回印刷するには -# N
を使用してください。ヘッダを追加するには -p
フラグを使用してください。
lpr を使って印刷テストを行う例:
$ lpr /usr/share/cups/data/testprint $ echo 'Hello, world!' | lpr -p
lpstat ユーティリティは、-s
フラグを付けて使用すると、ステータスをチェックします。-p
フラグを付けると、チェックするキューを指定できます。
lpoptions ユーティリティは、上記の lpadmin と同じ -p queue_name
フラグを使用します。-l
フラグを付けると、オプションを一覧表示します。-d
フラグは、デフォルトのプリンタを引数 queue_name
に設定します。-o
フラグは、オプションに値を設定します:
$ lpoptions -p HP_DESKJET_940C -o PageSize=A4 $ lpoptions -p HP_DESKJET_940C -o cupsIPPSupplies=true -o Duplex=DuplexNoTumble
cups*
ユーティリティ cupsaccept、cupsdisable、cupsenable、そして cupsreject は、その名の通りの動作を行います。それぞれの動作は次のとおりです:ジョブを受け入れるようにプリンタを設定する、プリンタを無効化する、プリンタをアクティブ化する、全ての受信タスクを拒否するようにプリンタを設定する。
例として、プリンタをクリーンに取り除いてみましょう:
# cupsreject queue_name # cupsdisable queue_name # lpadmin -x queue_name
ink
インクレベルを見るには inkAUR をインストールしてください。
ユーザを lp
ユーザグループに追加し、一旦ログアウトし、再度ログインしてください。
詳細を見るには、オプションを付けずに ink
を実行してください。
ウェブインターフェイス
CUPS サーバは、ウェブインターフェイス (http://localhost:631/ で利用可能) から完全に管理することができます。
ウェブインターフェイスから管理を行うには、認証が必要です。#パーミッション を参照してください。
- キューを追加する
Administration (管理) ページを開いてください。
- 既存のキューを編集する
Printers (プリンター) ページを開き、編集したいキューを選択してください。
- キューをテストする
Printers (プリンター) ページを開き、キューを選択してください。
GUI アプリケーション
CUPS を管理するのに十分な権限がユーザに無い場合、アプリケーションは起動時に root のパスワードを要求します。ユーザに root アクセスを要さない管理権限を与える方法は、#設定 を見てください。
- Deepin Print Manager — Deepin デスクトップのためのプリンタ設定インターフェイス。
- GtkLP — CUPS の GTK インターフェイス。
- print-manager — 印刷ジョブとプリンターの管理ツール (KDE)。
- system-config-printer — GTK プリンタ設定ツールと状態アプレット。
設定
CUPS サーバの設定は /etc/cups/cupsd.conf
と /etc/cups/cups-files.conf
にあります (cupsd.conf(5) と cups-files.conf(5) を参照)。どちらかのファイルを編集したら、変更を適用するために cups.service
を再起動してください。ほとんどのユーザにとって、デフォルトの設定で問題ありません。
パーミッション
グループ
プリンタの管理権限を持つユーザグループは /etc/cups/cups-files.conf
内の SystemGroup
で定義されています。デフォルトでは、sys
グループ、root
グループ、そして wheel
グループが使用されています。
CUPS のヘルパプログラムは、cups
ユーザとグループとして実行されます。これにより、ヘルパプログラムがプリンタデバイスにアクセスしたり、/etc/cups/
内の設定ファイル (cups
グループによって所有されています) を読み込んだりすることができます。
PolicyKit による管理者認証を許可する
PolicyKit を設定することで、ユーザは管理者パスワードを入力せずに GUI を使ってプリンタを設定できるようになります。
以下は、wheel ユーザグループのメンバーにパスワード無しでのプリンタ管理を許可する例です:
/etc/polkit-1/rules.d/49-allow-passwordless-printer-admin.rules
polkit.addRule(function(action, subject) { if (action.id == "org.opensuse.cupspkhelper.mechanism.all-edit" && subject.isInGroup("wheel")){ return polkit.Result.YES; } });
デフォルトの用紙サイズ
cups は、libpaper サポートありでビルドされており、libpaper はデフォルトでレター用紙サイズ (lpoptions
では PageSize
と呼ばれています) を使用します。印刷キューを追加するたびに用紙サイズを変更する手間を省くために、/etc/papersize
を編集してシステムのデフォルト用紙サイズを設定することができます。paper(1) を参照してください。
アーカイブ PDF/A
以下は、互換性の高い形式で PDF ファイルを保存する方法です (通常、これらは Archival PDF や PDF/A、PDFA、ISO 19005 と呼ばれます)。
現在、オプションはありません。なので、cups によって使用される、gs を呼び出すコマンドに追加する必要があります。
/etc/cups/cups.conf
# GSCall %s -q -dCompatibilityLevel=%s -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile="%s" -dAutoRotatePages=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite -f %s # 上記は GSCall を呼び出す際のデフォルト引数です。-dNOPAUSE の前に -dPDFA を追加し、上記をアンコメントすると (デフォルトの設定が変わっているかもしれないので、以下の行を丸々コピペしないでください。あなたのシステム上のデフォルトを使用してください): GSCall %s -q -dCompatibilityLevel=%s -dPDFA -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile="%s" -dAutoRotatePages=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite -f %s
ログファイル
デフォルトでは、全てのログは /var/log/cups/
内のファイルへ送られます。
ログレベルは /etc/cups/cupsd.conf
で変更できます。cupsd.conf ドキュメントを参照してください。
/etc/cups/cups-files.conf
内の AccessLog
ディレクティブ、ErrorLog
ディレクティブ、そして PageLog
ディレクティブの値を syslog
に変更することで、CUPS にログを代わりに systemd journal へ記録させることができます。元の提案された変更に関する情報は Fedora:Changes/CupsJournalLogging を参照してください。
cups-browsed
CUPS は Avahi browsing を使ってネットワーク上の未知の共有プリンターを発見することができます。サーバーがどこにあるのかわからないくらい巨大な構成で有用です。この機能を使うには .local ホストネーム解決を設定して、avahi-daemon.service
と cups-browsed.service
の両方を起動してください。ジョブは何も処理されずにプリンターに直接送信されるため、作成されたキューが動作しない場合があります。しかし、IPP Everywhere や AirPrint をサポートするプリンタなど、ドライバレスのプリンタは設定せずに動作するはずです。
印刷サーバとリモート管理
CUPS/プリンター共有 と CUPS/プリンター共有#リモート管理 を見てください。
ローカルの CUPS サーバーを使わない
CUPS ではローカルにプリンターサーバーを立ち上げるかわりにリモートのプリンターサーバーに直接接続するように設定することができます。libcups パッケージのインストールが必要です。ただし、アプリケーションによってはリモートのサーバーを使用する場合も印刷するのに cups パッケージのインストールを必要とします。
リモートの CUPS サーバーを使うには、CUPS_SERVER
環境変数を printerserver.mydomain:port
に設定してください。例えば、単一の Firefox インスタンスにおいて別の印刷サーバを使用した場合は (printserver.mydomain:port
の部分は、あなたの印刷サーバの名前/ポートに置き換えてください):
$ CUPS_SERVER=printserver.mydomain:port firefox
この設定を永続化するには、設定ファイル /etc/cups/client.conf
を作成し、それにリモート CUPS サーバーのホスト名を追加します:
ServerName server
カスタムポートを指定することもできます:
ServerName server:port
詳細は、[4] を参照してください。
トラブルシューティング
CUPS/トラブルシューティング と CUPS/プリンター別の問題 を見てください。
参照
- 公式 CUPS ドキュメント (ローカルにインストールされています)
- Wikipedia:ja:CUPS
- OpenPrinting ホームページ
- 印刷処理の考え方 - 印刷ワークフローについての説明
- OpenSuSE CUPS in a Nutshell - a quick CUPS overview
- Gentoo:Printing
- Debian の印刷ポータル - 詳細な技術的ガイド
- Debian の印刷の概要 - CUPS 印刷システムの基本的な概要
- CUPS メーリングリスト
- CUPS メーリングリスト (Apple フォーク)
- CUPS 問題トラッカー
- CUPS 問題トラッカー (Apple フォーク)