CUPS
CUPS は標準ベースの、Apple によって開発されている macOS® やその他の UNIX® ライクなオペレーティングシステム向けのオープンソースの印刷システムです。
目次
インストール
PDF 文章に「印刷」したい場合、cups-pdf パッケージもインストールしてください。デフォルトでは、PDF ファイルは /var/spool/cups-pdf/$USER
に保存されます。作成場所は /etc/cups/cups-pdf.conf
で変更できます。
インストールしたら cups.service
を起動・有効化してください。
接続インターフェイス
以下には様々なインターフェイスごとにプリンターを認識させる手順を載せています。
USB
USB プリンターが認識されているかどうか確認するには:
$ 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)
ネットワーク
Avahi を使うことでローカルネットワーク内のプリンターをスキャンできます。Avahi ホストネームを使ってネットワークプリンターを接続するには、.local ホストネーム解決をセットアップして cups.service
を再起動してください。
Samba プロトコルを使ってネットワークプリンターに接続する場合や、Windows クライアント用のプリンターサーバーを使う場合、samba パッケージをインストールしてください。
プリンタードライバー
プリンターのドライバーは以下のソースのどこかから入手することができます。動作するのが確認されているドライバーのリストは CUPS/プリンター別の問題を見てください。
プリンターを動かすのに、CUPS は PPD ファイルを必要とします。また、大抵のプリンターでは フィルター も必要です。CUPS がどうやって PPD やフィルターを使用するのかは [2] に詳しく書かれています。
OpenPrinting Printer List は多数のプリンターの推奨ドライバーを教えてくれます。個別のプリンターの PPD ファイルも提供されていますが、大抵の場合は foomatic や推奨されているドライバーパッケージから手に入ります。
PPD ファイルが CUPS に供給されると、CUPS サーバーは PPD ファイルを再生成して /etc/cups/ppd/
に保存します。
新しいドライバーをインストールした後は cups サービスの再起動が必要です。
CUPS
CUPS は何も設定をしなくても動作する PPD やフィルターのバイナリを少数ながらデフォルトで用意しています。また、CUPS は AirPrint と IPP Everywhere プリンターにも対応しています。
Foomatic
foomatic プロジェクトはフリーであるかを問わず多数のプリンタードライバーの PPD を提供しています。foomatic の活動の詳細は Foomatic from the Developer's View を見てください。
foomatic を使用するには、foomatic-db-engine と foomatic-db, foomatic-db-ppds, foomatic-db-nonfree-ppds, foomatic-db-gutenprint-ppds の最低でもどれかひとつをインストールします。
foomatic の PPD は別途でフィルターを必要とすることがあり、gutenprint や ghostscript などが挙げられます (例えば min12xxwAUR)。ghostscript が必要な場合、gsfonts もおそらく必須です。
メーカー別のドライバー
様々なプリンターメーカーが独自の 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 のドキュメント [3] を見てください。プリンターによって URI には細かい違いがあるので、プリンターのマニュアルや CUPS/プリンター別の問題もチェックしてください。
リモートの CUPS 印刷サーバーは ipp://hostname:631/printers/queue_name
という形式の URI でアクセスできます。リモートの印刷サーバーをセットアップする方法は CUPS/プリンター共有#GNU/Linux システム間を見てください。
他の問題については CUPS/トラブルシューティング#ネットワークの問題を見てください。
使用方法
CUPS はコマンドラインツールの the 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
トラブルシューティング
CUPS/トラブルシューティングを見てください。