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 は cups.socket
ユニットを提供しています。cups.socket
が有効化されている (かつ、cups.service
が無効化されている) 場合、systemd は CUPS をすぐには起動せず、適切なソケットをただリッスンします。プログラムがそれらの CUPS ソケットのうちどれかへの接続を試みた時に、systemd は cups.service
を起動し、それらのポートの制御を CUPS プロセスへ透過的に渡します。
印刷の流れ
関連する問題を解決したい場合は、CUPS がどう機能するかを知っておくことが重要です:
- '印刷' が選択された際、アプリケーションは PDF ファイルを CUPS に送信します (アプリケーションが他の形式を送信した場合、それらはまず PDF に変換されます)。
- CUPS はプリンタの PPD ファイル (printer description file) を参照し、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 を使ってプリンタを発見、使用、または共有するには、Avahi を使って .local ホストネーム解決をセットアップして、cups.service
を再起動してください。
Samba を使ってネットワークプリンターを共有する場合や、例えばシステムを Windows クライアント用のプリンターサーバーにする場合、samba パッケージが必要です。
プリンタードライバー
プリンターのドライバーは以下のソースのどこかから入手することができます。動作するのが確認されているドライバーの不完全なリストは 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、そして PCL のプリンタ用のドライバを提供しています。
gutenprint と foomatic-db-gutenprint-ppds をインストールしてください。
メーカー固有のドライバ
多くのプリンタメーカーは独自の Linux ドライバを配布しています。中には Arch の公式リポジトリや AUR から入手できるものもあります。
これらのドライバのうちいくつかは CUPS/プリンター別の問題 で詳しく説明されています。
プリンター URI
以下では手動での 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 のドキュメント [2] を見てください。プリンターによって URI には細かい違いがあるので、プリンターのマニュアルや CUPS/プリンター別の問題もチェックしてください。
リモートの 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 ローカルドキュメント にはコマンドラインツールに関するヒントが載っています。
- デバイスを確認
# lpinfo -v # $ /usr/lib/cups/backend/snmp ip_address # Use SNMP to find a URI
- モデルを確認
$ lpinfo -m
- 新しい印刷キューを追加
# lpadmin -p queue_name -E -v uri -m model
queue_name は適当な名前に置き換えてください。例:
# lpadmin -p HP_DESKJET_940C -E -v "usb://HP/DESKJET%20940C?serial=CN16E6C364BH" -m drv:///HP/hp-deskjet_940c.ppd.gz # lpadmin -p AirPrint -E -v "ipp://10.0.1.25/ipp/print" -m everywhere # Driverless queue (Apple AirPrint or IPP Everywhere) # lpadmin -p SHARED_PRINTER -m raw # Raw queue; no PPD or filter # lpadmin -p Test_Printer -E -v "ipp://10.0.1.3/ipp/print" -m pxlmono.ppd # Specifying a PPD instead of a model
- デフォルトプリンターを設定
$ lpoptions -d queue_name
- オプションを変更
$ lpoptions -p queue_name -l # List the options $ lpoptions -p queue_name -o option=value # Set an option
例:
$ lpoptions -p HP_DESKJET_940C -o PageSize=A4
- 状態を確認
$ lpstat -s $ lpstat -p queue_name
- プリンターを無効化
# cupsdisable queue_name
- プリンターを有効化
# cupsenable queue_name
- ジョブを受け取るようにプリンターを設定
# cupsaccept queue_name
- プリンターの削除
まず印刷を要求するエントリを全て拒否するように設定してください:
# cupsreject queue_name
次にプリンターを無効化してください:
# cupsdisable queue_name
最後に削除してください:
# lpadmin -x queue_name
- ファイルを印刷
$ lpr file $ lpr -# 17 file # print the file 17 times $ echo 'Hello, world!' | lpr -p # print the result of a command. The -p switch adds a header.
- 印刷キューを確認
$ lpq $ lpq -a # on all queues
- 印刷キューを消去
# lprm # remove last entry only # lprm - # remove all entries
ウェブインターフェイス
CUPS サーバーはウェブインターフェイスを使って管理することができます。http://localhost:631/ を開いてください。
ウェブインターフェイスから管理設定を行うには認証が必要です。root
で認証するか、ユーザーをプリンターの管理権限グループに追加してください。#設定を参照。
- 印刷キューを追加
Administration ページを開いてください。
- 既存のキューを編集
Printers ページを開いて、編集したいキューを選択してください。
- キューをテスト
Printers ページを開いて、キューを選択してください。
GUI アプリケーション
CUPS を管理するのに十分な権限を持っていない場合、アプリケーションが起動するときに root パスワードが要求されます。root 権限を与えずにユーザーに管理者権限を与える方法は#設定を見てください。
- print-manager — 印刷ジョブとプリンターの管理ツール (KDE)。
- system-config-printer — GTK+ の CUPS プリンター設定ツール・状態アプレット。
- gtklp — CUPS の 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
グループが使われます。
cups は libpaper のサポートを有効にしてビルドされており、libpaper はデフォルトの用紙サイズとして Letter を使います。印刷キューを追加するたびに用紙サイズを変更しなくてもいいように、/etc/papersize
を編集してデフォルトの用紙サイズを設定してください。詳しくは papersize(5) を参照。
デフォルトでは、全てのログは /var/log/cups/
内のファイルに送信されます。/etc/cups/cups-files.conf
内の AccessLog
, ErrorLog
, PageLog
ディレクティブの値を syslog
に変更することで、CUPS から systemd journal にログを吐かせることができます。詳しくは fedora wiki を見てください。
cups-browsed
CUPS は Avahi を使ってネットワーク上の未知の共有プリンターを発見することができます。サーバーがどこにあるのかわからないくらい巨大な構成で有用です。この機能を使うには .local ホストネーム解決を設定して、avahi-daemon.service
と cups-browsed.service
の両方を起動してください。ジョブは何も処理されずにプリンターに直接送信されるため、キューの作成が上手く行かない場合もあります。IPP Everywhere あるいは AirPrint に対応しているドライバー不要のプリンターであれば特に設定をしなくても問題なく動作するはずです。
プリンター共有
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 サーバーを使わない
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
詳細は、[6] を参照してください。
トラブルシューティング
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 フォーク)