CUPS

提供: ArchWiki
2023年7月12日 (水) 16:58時点における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 ファイル (プリンタ記述ファイル) を参照し、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 ドキュメントを参照してください。

ノート: コマンドラインのスイッチはまとめて指定することができません。

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
ノート:
  • PPD を指定する場合、フルパスではなくファイル名だけを指定してください (例えば、/usr/share/ppd/cupsfilters/pxlmono.ppd ではなく pxlmono.ppd)。あるいは、-P コマンドラインスイッチを使うことでフルパスを使用することもできます。
  • 2021年現在、最近のプリンタの多くはドライバレスの印刷セットアップをサポートしており、-m everywhere を指定すると (上記の例では2番目)、プリンタが定義され、ネットワーク上のプリンタにクエリすることで .ppd ファイルが /etc/cups/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*

ユーティリティ cupsacceptcupsdisablecupsenable、そして cupsreject は、その名の通りの動作を行います。それぞれの動作は次のとおりです:ジョブを受け入れるようにプリンタを設定する、プリンタを無効化する、プリンタをアクティブ化する、全ての受信タスクを拒否するようにプリンタを設定する。

例として、プリンタをクリーンに取り除いてみましょう:

# cupsreject queue_name
# cupsdisable queue_name
# lpadmin -x queue_name

ink

インクレベルを見るには inkAURインストールしてください。

ノート: サポートされているプリンタのリストを参照してください。

ユーザを lp ユーザグループに追加し、一旦ログアウトし、再度ログインしてください。

詳細を見るには、オプションを付けずに ink を実行してください。

ウェブインターフェイス

CUPS サーバは、ウェブインターフェイス (http://localhost:631/ で利用可能) から完全に管理することができます。

ノート: CUPS への HTTPS 接続を使用する場合、初回アクセス時はインターフェイスが現れるまでに非常に長い時間がかかる場合があります。これは、初回リクエスト時に SSL 証明書の生成がトリガーされ、これに時間が掛かる可能性があるからです。

ウェブインターフェイスから管理を行うには、認証が必要です。#パーミッション を参照してください。

キューを追加する

Administration (管理) ページを開いてください。

既存のキューを編集する

Printers (プリンター) ページを開き、編集したいキューを選択してください。

キューをテストする

Printers (プリンター) ページを開き、キューを選択してください。

GUI アプリケーション

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

  • Deepin Print Manager — Deepin デスクトップのためのプリンタ設定インターフェイス。
https://github.com/linuxdeepin/dde-printer || deepin-printer
  • GtkLP — CUPS の GTK インターフェイス。
https://gtklp.sirtobi.com/index.shtml || gtklpAUR
  • print-manager — 印刷ジョブとプリンターの管理ツール (KDE)。
https://invent.kde.org/utilities/print-manager || print-manager
  • system-config-printer — GTK プリンタ設定ツールと状態アプレット。
https://github.com/OpenPrinting/system-config-printer || system-config-printer

設定

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

参照

翻訳ステータス: このページは en:CUPS の翻訳バージョンです。最後の翻訳日は 2023-07-11 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。