CUPS

提供: ArchWiki
2023年7月11日 (火) 16:28時点におけるAshMyzk (トーク | 投稿記録)による版 (訳を修正)
ナビゲーションに移動 検索に移動

関連記事

CUPS は、Linux® や他の Unix® ライクなオペレーティングシステムのための標準ベースのオープンソースな印刷システムです。OpenPrinting によって開発されています。

Arch Linux では、Apple CUPS フォークではなく、OpenPrinting CUPS フォークがパッケージングされています。

インストール

cups パッケージをインストールしてください。

ノート: CUPS では、ドライバは IPP Everywhere に取って代わられる形で非推奨となっているため、印刷を機能させるには cups-pdf をインストールする必要がある場合があります。このパッケージがないと、client-error-document-format-not-supported のようなエラーが発生する場合があります。IPP Everywhere は PDF を直接プリンタに送信するため、印刷したいものをまず PDF を変換するために cups-pdf が必要です。

任意で、PDF ドキュメントに"印刷"した場合は、cups-pdf パッケージをインストールしてください。デフォルトでは、PDF ファイルは /var/spool/cups-pdf/username/ に保存されます。保存場所は /etc/cups/cups-pdf.conf で変更することができます。

そして、cups.service有効化し、起動してください。または、ソケットアクティベーションを使用することで、このサービスがプログラムによって必要とされる場合にのみ CUPS を起動させることもできます。

ソケットアクティベーション

cupscups.socket ユニットを提供しています。cups.socket が有効化されている (かつ、cups.service無効化されている) 場合、systemd は CUPS をすぐには起動せず、適切なソケットをただリッスンします。プログラムがそれらの CUPS ソケットのうちどれかへの接続を試みた時に、systemdcups.service を起動し、それらのポートの制御を CUPS プロセスへ透過的に渡します。

印刷の流れ

関連する問題を解決したい場合は、CUPS がどう機能するかを知っておくことが重要です:

  1. '印刷' が選択された際、アプリケーションは PDF ファイルを CUPS に送信します (アプリケーションが他の形式を送信した場合、それらはまず PDF に変換されます)。
  2. CUPS はプリンタの PPD ファイル (printer description file) を参照し、PDF ファイルをプリンタの理解できる言語 (PJL、PCL、ビットマップ、ネイティブな PDF など) へ変換するためにどのようなフィルタを使用する必要があるかを調べます。
  3. フィルタが PDF ファイルをプリンタの理解できる形式へ変換します。
  4. 最後に、そのデータがバックエンドへ送られます。例えば、プリンタが USB ポートに接続されている場合、USB バックエンドが使用されます。

接続インターフェイス

様々なインターフェイスにおける、プリンタを認識させるための追加の手順を以下に載せています。

USB

USB プリンタが認識されているかどうか確認するには、まず usbutils パッケージがインストールされていることを確認し、以下を実行してください:

$ lsusb
(...)
Bus 001 Device 007: ID 03f0:1004 Hewlett-Packard DeskJet 970c/970cse

パラレルポート

パラレルポートプリンターを使うには、カーネルモジュール lpparport、そして 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再起動してください。

ノート: DNS-SD は、Avahi を使用している時にのみ、サポートされています。CUPS は systemd-resolved を DNS-SD のために使用することをサポートしていません。CUPS issue 5452 を参照してください。

Samba を使ってネットワークプリンターを共有する場合や、例えばシステムを Windows クライアント用のプリンターサーバーにする場合、samba パッケージが必要です。

プリンタードライバー

ノート: 訳注: CUPS は PPD とドライバのサポートを廃止し、完全に IPP Everywhere に依存させることを計画しています (CUPS issue 103)。英語版の議論ページ en:Talk:CUPS#CUPS printer drivers and backends are deprecated も参照してください。

プリンターのドライバーは以下のソースのどこかから入手することができます。動作するのが確認されているドライバーの不完全なリストは 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 には AirPrintIPP 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 のプリンタ用のドライバを提供しています。

gutenprintfoomatic-db-gutenprint-ppds をインストールしてください。

ノート: Gutenprint のパッケージが更新された際、cups-genppdupdate を root として実行し CUPS を再起動するまで、Gutenprint ドライバを使用するプリンタは動作を停止します。cups-genppdupdate は、構成されたプリンタの PPD ファイルを更新します。詳細は cups-genppdupdate(8) を参照してください。

メーカー固有のドライバ

多くのプリンタメーカーは独自の 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 ページで説明されています。

ノート: プリンタ URI 内の特殊文字は適切に URL エンコードする必要があります。さもないと、Windows プリンタ名やユーザのパスワードに空白が存在する場合、CUPS は lpadmin: Bad device-uri エラーを投げます。

例えば、smb://BEN-DESKTOP/HP Color LaserJet CP1510 series PCL6smb://BEN-DESKTOP/HP%20Color%20LaserJet%20CP1510%20series%20PCL6 となります。

以下のコマンドを実行することで、URL エンコードされた文字列を得ることができます:

$ python -c 'from urllib.parse import quote; print("smb://" + quote("BEN-DESKTOP/HP Color LaserJet CP1510 series PCL6"))'

リモートの CUPS 印刷サーバーは ipp://hostname:631/printers/queue_name という形式の URI でアクセスできます。リモートの印刷サーバーをセットアップする方法は CUPS/プリンター共有#GNU/Linux システム間 を見てください。

他の問題については CUPS/トラブルシューティング#ネットワークの問題を見てください。

警告: サーバとクライアントの両方をプリンタフィルタで設定することは避けてください。クライアントかサーバのどちらかの印刷キューは 'raw' であるべきです。こうすることで、フィルタを通して印刷ジョブが2回送信されることを防ぐことができます (2回送信されてしまうと、共有されたプリンタがローカルでは動作するが、リモートマシンでは印刷に失敗してしまうなどの問題を引き起こす可能性があります [2])。印刷キューを 'raw' に設定する例は #lp* を見てください。

使用方法

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
ノート: PPD を指定する場合、フルパスではなくファイル名だけ指定してください (例えば /usr/share/ppd/cupsfilters/pxlmono.ppd ではなく pxlmono.ppd を指定します)。
デフォルトプリンターを設定
$ 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/ を開いてください。

ノート: HTTPS 接続で CUPS を使用する場合、初めてアクセスしたときにインターフェイスが表示されるまで長い時間がかかります。初期設定で行われる SSL 証明書の生成に時間がかかるためです。

ウェブインターフェイスから管理設定を行うには認証が必要です。root で認証するか、ユーザーをプリンターの管理権限グループに追加してください。#設定を参照。

印刷キューを追加

Administration ページを開いてください。

既存のキューを編集

Printers ページを開いて、編集したいキューを選択してください。

キューをテスト

Printers ページを開いて、キューを選択してください。

GUI アプリケーション

CUPS を管理するのに十分な権限を持っていない場合、アプリケーションが起動するときに root パスワードが要求されます。root 権限を与えずにユーザーに管理者権限を与える方法は#設定を見てください。

  • print-manager — 印刷ジョブとプリンターの管理ツール (KDE)。
https://cgit.kde.org/print-manager.git || print-manager
  • system-config-printerGTK+ の CUPS プリンター設定ツール・状態アプレット。
http://cyberelk.net/tim/software/system-config-printer/ || system-config-printer
  • gtklp — CUPS の GTK+ インターフェイス。
https://gtklp.sirtobi.com/index.shtml || gtklpAUR

設定

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 グループによって所有されています) を読み込んだりすることができます。

ノート: cups 2.2.6-2 より前では、lp グループが代わりに使用されていました。アップグレード後、/etc/cups 内のファイルは、/etc/cups/cups-files.conf 内で設定されている cups グループ、User 209、そして Group 209 によって所有されるはずです。

PolicyKit による管理者認証を許可する

PolicyKit を設定することで、ユーザは管理者パスワードを入力せずに GUI を使ってプリンタを設定できるようになります。

ノート: system-config-printer を使用する場合、system-config-printer に PolicyKit を使用させるために cups-pk-helper をインストールする必要があります。

以下は、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) を参照してください。

ログファイル

デフォルトでは、全てのログは /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

この記事またはセクションは情報が古くなっています。
理由: DNS-SD で広告されたプリンタを発見するために cups-browsed.service は必要ありません。これは cups.service によって行われます。cups-browsed.service は、LDAP サーバや、レガシーな CUPS プロトコル (CUPS サーバ ≤ 1.5) を使用するサーバでプリンタを発見する時にだけ必要になります。 (Discuss)

CUPS は Avahi browsing を使ってネットワーク上の未知の共有プリンターを発見することができます。サーバーがどこにあるのかわからないくらい巨大な構成で有用です。この機能を使うには .local ホストネーム解決を設定して、avahi-daemon.servicecups-browsed.service の両方を起動してください。ジョブは何も処理されずにプリンターに直接送信されるため、作成されたキューが動作しない場合があります。しかし、IPP EverywhereAirPrint をサポートするプリンタなど、ドライバレスのプリンタは設定せずに動作するはずです。

ノート:
  • ネットワークプリンタの検索によってコンピュータの起動時間が大幅に長くなってしまうことがあります
  • cups-browsed.service は、プリンタがネットワークに現れたり消えたりしたときに、そのプリンタを動的に追加したり削除したりするときにだけ必要になります。単に DNS-SD/mDNS 対応のネットワークプリンタを CUPS に追加したい場合は、必要ありません。

印刷サーバとリモート管理

CUPS/プリンター共有CUPS/プリンター共有#リモート管理 を見てください。

ローカルの CUPS サーバーを使わない

CUPS ではローカルにプリンターサーバーを立ち上げるかわりにリモートのプリンターサーバーに直接接続するように設定することができます。libcups パッケージのインストールが必要です。ただし、アプリケーションによってはリモートのサーバーを使用する場合も印刷するのに cups パッケージのインストールを必要とします。

ノート: ローカルの CUPS サーバーを使わずにリモートプリンターにアクセスすることは開発者によって非推奨とされています。[3]

リモートの 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/プリンター別の問題 を見てください。

参照