CUPS

提供: ArchWiki
2015年6月19日 (金) 21:55時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

関連記事

CUPS のサイト より:

"CUPS は標準ベースの、Apple によって開発されている OS X® やその他の UNIX® ライクなオペレーティングシステム向けのオープンソースの印刷システムです。"

LPRNG など印刷パッケージは他にも存在しますが、使いやすい Common Unix Printing System が最も人気があります。

CUPS Linux 印刷ワークフロー

cups バージョン 1.5.3-3 現在、Arch Linux は新しい pdf ベースの印刷ワークフローを使用します。詳しくは PDF standard printing job format を読んで下さい。昔のワークフローは CUPS filtering chart に載っています。 Linux の印刷に関する問題の一般的な説明は ここ にあります。

プリンターの設定には2つの方法があります。

  • ネットワーク上で CUPS サーバーが動作していてプリンターが共有されている場合、必要なのはクライアントパッケージをインストールすることだけです。
  • プリンターがシステムに直接接続されていたり IPP ネットワークプリンターにアクセスできる場合、ローカルの CUPS サーバーをセットアップします。

クライアントパッケージのインストール

libcups が唯一必要なパッケージです。公式リポジトリからインストールしてください。

次に CUPS サーバーの IP アドレスかホストネームを /etc/cups/client.confServerName の後に加えて下さい。これで終わりです。アプリケーションが CUPS サーバーによって共有されているプリンターをすぐに見つけるはずです。

高度なネットワークセットアップ

ネットワーク上の未知の共有ドライバを見つけるために Avahi ブラウジングを有効にして cupsd+cups-browsed のインスタンス全体をクライアントで動かすことも可能です。サーバーがこれはわからないような巨大なセットアップで便利になります。

ノート: この挙動は cups 1.6.x でも変わっていません - 1.5.x までの cupsd との違いは自身の共有プリンターだけをブラウズできるようになったことです。 ローカルの cupsd がリモートの cupsd サーバーによって共有されている他のプリンターを認識できるようにするには、Avahi を使ってローカルの (cups-filters 1.0.26 からサポートされている) cups-browsed インスタンスを実行してください。April 2013 に good news があります (上と合わせる必要があります)。

CUPS を32ビットの chroot 環境にインストールする

32ビットの chroot 環境を使って64ビットのベースインストールをした場合、32ビット環境で明示的に CUPS をインストールする必要はありません。chroot 環境からインストールした CUPS プリンターにアクセスするには、/var/run/cups ディレクトリを chroot 環境の同じ場所にバインドしなくてはなりません。chroot にディレクトリ (おそらく存在しません) を作り (-o bind をコマンドに指定して) マウントすれば、32ビット chroot アプリケーションからすぐにプリンターが使えるようになるはずです。

# mkdir /path/to/chroot/var/run/cups
# Example: # mkdir /opt/arch32/var/run/cups

# mount -o bind /var/run/cups /path/to/chroot/var/run/cups

サーバーパッケージのインストール

以下のパッケージとプリンタードライバが必要になります。公式リポジトリからインストールしてください。

  • cups - CUPS デーモン
  • ghostscript - (任意) PostScript インタプリタ
  • gsfonts - GhostScript 標準 Type1 フォント

ネットワークを介したプリンターブラウジングを有効にしたいのならば、avahi もインストールして systemd を使って avahi-daemon.service を有効にしてください。

Samba プロトコルを使ってシステムをネットワークプリンターに接続する場合、もしくはシステムを Windows クライアント用の印刷サーバーにする場合、samba もインストールしてください。

プリンタードライバ

以下はドライバパッケージの一部です。プリンターに合わせて適切なドライバを選んで下さい:

  • cndrvcups-lbAUR - Canon の UFR2 ドライバーで LBP, iR, MF シリーズのプリンターをサポートしています。パッケージは AUR から利用可能です。
  • cnijfilter-mg4200AUR - Canon MG4200 のプリンタードライバー。
  • cups-pdf - 送られたジョブから PDF を生成する仮想 PDF プリンターを設定するためのパッケージ。
  • foo2zjsAUR - HP Laserjet 1018 など ZjStream プロトコルを使うプリンターのためのドライバー。ここ に詳細があります。パッケージは AUR から利用可能です。
  • foomatic-db, foomatic-db-engine, foomatic-db-nonfree - Foomatic は Unix でフリーソフトウェアのプリンタードライバをスプーラと統合するデータベース駆動型のシステムです。
  • gutenprint - Canon, Epson, Lexmark, Sony, Olympus, PCL のプリンターで GhostScript, CUPS, Foomatic, GIMP を使うための高品質なドライバのコレクション
  • hplip - HP の DeskJet, OfficeJet, Photosmart, Business Inkjet と複数の LaserJet プリンター機種、そして多数の Brother プリンター用のドライバーです。
  • hpojAUR - HP の Officejet を使っているのならば、このパッケージをインストールして指示に従ってこのスレッドに書かれているような問題を回避する必要があります。パッケージは AUR から利用可能です。
  • samsung-unified-driverAUR - Samsung のプリンターとスキャナー用の統合 Linux ドライバー。ML-2160 などの新しいプリンターで必要になります。パッケージは AUR から利用可能です。
  • splix - SPL (Samsung Printer Language) プリンターに対応する Samsung のドライバーです。

どのドライバーパッケージをインストールすればいいかわからなかったり、使っているドライバーが動いているのかどうか不明な場合、全てのドライバーをインストールするのが一番簡単な解決策です。パッケージの名前とは関係ないドライバーが必要になることもあるので注意してください。例えば、Brother HL-2140 には hplip ドライバーをインストールする必要があります。

プリンター PPD のダウンロード

プリンターによっては、この手順は必要ないかもしれません。標準の CUPS にすでに相当数の PPD (Postscript Printer Description) ファイルが含まれているからです。さらに、foomatic-filters, gimp-print, hplip パッケージにも少数の PPD ファイルが入っており CUPS によって自動で検知されます。

以下は Linux Printing ウェブサイトから引用した PPD ファイルの説明です:

"全ての PostScript プリンターには、特定のプリンター機種に関するプリンター固有の情報が含まれた PPD ファイルがメーカーによって提供されています: プリンターのカラーやフォント、PostScript レベルなどプリンターの基本的な機能と、用紙サイズや解像度などユーザーが調整できるオプション。"

プリンターの PPD が CUPS に存在しない時は:

  • AUR をチェックしてプリンターやメーカーのパッケージが存在しないか確認してください
  • OpenPrinting データベース にアクセスしてメーカーとプリンターの機種を選択してください
  • メーカーのサイトに行って GNU/Linux 用のドライバーを配布してないか検索してください
ノート: PPD ファイルは /usr/share/cups/model/ に置きます。

プリンタードライバーの他のソース

Turboprint は GNU/Linux でサポートされていないプリンター (例えば Canon i*) 用のプロプライエタリのドライバーです。CUPS とは違って、高品質の印刷にはウォーターマークが加えられたり料金を支払う必要があります。

ハードウェアのサポートと設定

USB プリンター

ヒント: ほとんどの USB プリンターは何も設定しなくても動作します。このセクションをスキップして、あなたのプリンターが動かないとわかったときに読みなおして下さい。

USB プリンターには2つの方法でアクセスが可能です: usblp カーネルモジュールと libusb。前者はクラシックな方法になります。やっていることはシンプルです: シリアルデータストリームとしてデータをデバイスファイルに書き出してプリンターに送信します。同じデバイスファイルを読むことで bi-di アクセスが可能になり、インク残量や状態、プリンタ性能情報 (PJL) を読み出せます。シンプルなプリンタでは問題なく動作しますが、複合機 (プリンタ・スキャナ) には適しておらず HP などのメーカーはバックエンドを提供しています。ソース: here

usblp のブラックリスト化

警告: cups バージョン 1.6.0 では、usblp カーネルモジュールをブラックリストに入れる必要はなくなっています。 ブラックリストを使わないと解決できない問題を発見した時は上流である CUPS のバグトラッカーに報告してください。おそらく Till Kamppeter (Debian の CUPS メンテナ) とコンタクトが取れるはずです。詳しくは upstream bug を見て下さい。

USB プリンタが動作しない問題がある場合、usblp カーネルモジュールのブラックリスト化を試すことができます:

/etc/modprobe.d/blacklistusblp.conf
blacklist usblp

カスタムカーネルのユーザーは先に進む前に usbcore カーネルモジュールを手動でロードする必要があるかもしれません。

モジュールをインストールしたら、プリンタを接続して次を実行することでカーネルがプリンタを検知したかどうか確認できます:

# tail /var/log/messages.log

もしくは

# dmesg

usblp を使っている場合、プリンタが検知されると以下のような出力がされているはずです:

Feb 19 20:17:11 kernel: printer.c: usblp0: USB Bidirectional
printer dev 2 if 0 alt 0 proto 2 vid 0x04E8 pid 0x300E
Feb 19 20:17:11 kernel: usb.c: usblp driver claimed interface cfef3920
Feb 19 20:17:11 kernel: printer.c: v0.13: USB Printer Device Class driver

usblp をブラックリストに入れた場合、以下のように表示されます:

usb 3-2: new full speed USB device using uhci_hcd and address 3
usb 3-2: configuration #1 chosen from 1 choice

パラレルポートプリンター

パラレルポートプリンターを使うには lp, parport, parport_pc カーネルモジュールをロードする必要があります。

次を実行してセットアップを確認してください:

# tail /var/log/messages.log

おそらく次のような表示があるはずです:

lp0: using parport0 (polling).

USB からパラレルポートへの変換器を使っている場合、CUPS はプリンターを検知することができません。対策としては、異なる接続タイプを使ってプリンターを追加し /etc/cups/printers.conf の DeviceID を変更してください:

DeviceID = parallel:/dev/usb/lp0

HP プリンター

警告: hplip ツールスタックは python2 を使っています。おそらく hp-setup の実行中、/usr/bin/python/usr/bin/python3 へのシンボリックリンクになっているために構文エラーが発生します。一時的に /usr/bin/python から /usr/bin/python2 にリンクを張って下さい。セットアップを終了した後は戻すようにしてください。

HP のプリンターでは HP の Linux セットアップツールを使ってインストールすることも可能です。公式リポジトリから hplip をインストールしてください。

qt フロントエンドで起動するには:

# hp-setup -u

コマンドラインで起動するには:

# hp-setup -i

systray スプールマネージャを起動するには:

$ hp-systray

PPD ファイルは /usr/share/ppd/HP/ にあります。

ノート: 依存パッケージの gobject/dbus が欠けているというエラーが表示される場合は、python2-gobject2python2-dbus をインストールしてください。詳しくはバグレポートを見て下さい。

プロプライエタリの HP プラグインが必要なプリンター (Laserjet Pro P1102w や 1020 など) を使うには、AUR から hplip-pluginAUR パッケージをインストールしてください。

警告: hplip-setup のバグによって、AUR から前述の hplip-pluginAUR パッケージをインストールしても、システムトレイや CUPS のログにエラー Print job failed - required plug-in not found. Please run hp-plugin が表示される場合があります。修正するには、CUPS のウェブインターフェイスからプリンターを修正してドライバーを手動で選択してください (en,en バージョンが推奨)。その後 CUPS サービスを再起動してください。
ノート: hplipfoomatic-db-engine に依存しており、プリンターが CUPS に追加されたときにウェブインターフェイスでドライバーリストが表示されないという問題が起こります (エラー: "Unable to get list of printer drivers")。解決するには、まず hplip をインストールして適切な PPD ファイルを /usr/share/ppd/HP/ から取得してください。次に、hplip を完全に削除します (不必要な依存パッケージも)。最後に、CUPS のウェブ UI を使って手動でプリンターをインストールしてください。先に取得した PPD ファイルを選択して hplip を再インストールします。再起動後、プリンターは完全に動作するようになっているはずです。

設定

CUPS がインストールされた今、印刷ソリューションを設定する様々なオプションが存在します。いつもどおり、コマンドラインを使う方法は自由に使えます。CUPS にはフル機能のウェブインターフェイスも内蔵されています。同じく、GNOME や KDE などのデスクトップ環境にはプリンターの管理を助ける便利なプログラムが付いています。あなたの必要に応じて、どれか一つの方法を選ぶことが可能です。

コンピュータに直接プリンターを接続するのではなく、ネットワークプリンターに接続するつもりならば、先に CUPS printer sharing のページを読んでおくといいかもしれません。GNU/Linux システム間でのプリンターの共有はとても簡単でほとんど設定が必要ありません。他方、Windows と GNU/Linux で共有するにはちょっとした作業が必要になります。

CUPS デーモン

ノート: cups 2.0.0 から、サービスの名前が cups.service から org.cups.cupsd.service に変更されています。このパッケージは2014年10月31日から extra リポジトリに入りました。バージョン 2.0.0 にアップデートするときは、古いサービスを手動で無効化する必要があります。/etc/systemd/system/ サブディレクトリに壊れたシンボリックリンクが残ってしまい、存在しないサービスがあると systemd によって警告が表示されてしまいます。

CUPS をインストールしたら、systemd を使って org.cups.cupsd.service を起動できます。必要に応じて有効にしてください。

任意で、CUPS は Avahi のブラウジングを使ってネットワーク上にある共有プリンターを発見することができます。サーバーがどこにあるのかわからないような巨大なセットアップを使っているときに便利です。この機能を使用するには、cups-browsed.service systemd ユニットを起動してください。

ウェブインターフェイスとツールキット

デーモンが起動したら、ブラウザを開いて次のページに行って下さい: http://localhost:631 (localhost /etc/hostname に書かれているホストネームに置き換える必要があるかもしれません)。

ここから、ウィザードに従ってプリンターを追加してください。通常は Adding Printers and ClassesAdd Printer をクリックしてウィザードを開始します。ユーザー名とパスワードの入力を求められたら、root でログインしてください。プリンターに割り当てられる名前にあまり意味はありません、これは 'location' や 'description' にも同じことが言えます。次に、選択するデバイスのリストが表示されます。プリンターの実際の名前はラベルの横に表示されます (例: USB プリンターなら USB Printer #1 の後)。最後に、適切なドライバを選択すれば設定は完了です。

Maintenance ドロップダウンメニューから Print Test Page を押して設定をテストしてください。印刷がされなかったり設定が正しく適用されていない場合は、おそらく適切なプリンタードライバが欠けているのが問題です。

ヒント: 他のフロントエンドは #他の CUPS インターフェイス を参照してください。
ノート:
  • USB プリンターを設定するとき、Add Printer ページにプリンターが表示されるはずです。"SCSI printer" オプションしか表示されない場合は、おそらく CUPS がプリンターを認識できていません。
  • HP の複合機で hplip パッケージを使ってワイヤレススキャンを有効にするには、HTTP プロトコルを使ってネットワークプリンターとしてプリンターを追加する必要があります。使用する URI を得るには、hp-makeuri コマンドを実行してください。

CUPS の管理

ウェブインターフェイスでプリンターを管理する時 (例: プリンターを追加・削除する、印刷タスクを停止する) はユーザー名とパスワードが必要になります。デフォルトのユーザー名は sys グループに割り当てられたユーザー、もしくは root です。他の admin グループ (例: printadmin) は /etc/cups/cups-files.confSystemGroup 行に追加することができます (この行を新しく加える必要があるかもしれません):

 # Administrator user group, used to match @SYSTEM in cupsd.conf policy rules...
SystemGroup sys root 
SystemGroup printadmin

グループを作成してください (man groupadd):

# groupadd printadmin 
# groupadd lp

グループにユーザーを追加してください (man gpasswd):

# gpasswd -a username printadmin       # for printer administration
# gpasswd -a username lp               # for printing priviledges

変更を適用するには org.cups.cupsd.service デーモンを再起動してログインし直す必要があります:

# systemctl restart org.cups.cupsd.service

root アカウントがロックされている (つまり sudo を使っている) と、デフォルトのユーザー名 (root) とパスワードでは CUPS の管理インターフェイスにログインできません。この投稿を読んで他のユーザーを cups の管理者として追加してください。

ウェブインターフェイスにリモートアクセスする

デフォルトでは、CUPS のウェブインターフェイスは localhost (インストールしたコンピュータ) からしかアクセスできないようになっています。インターフェイスに外部からアクセスするには、以下の変更を /etc/cups/cupsd.conf ファイルに加えて下さい。次の行を:

Listen localhost:631

下のように置き換えてください。

Port 631

これで CUPS がリクエストを受け取るようになります。

3つのアクセスレベルを設定することができます:

<Location />           #サーバーへのアクセス
<Location /admin>	#admin ページヘのアクセス
<Location /admin/conf>	#設定ファイルへのアクセス

リモートホストに以上のレベルのどれか一つを与えるには、レベルのセクションに Allow の記述を追加してください。Allow は以下のような形式で使うことができます:

Allow from all
Allow from host.domain.com
Allow from *.domain.com
Allow from ip-address
Allow from ip-address/netmask
Allow from @LOCAL

また、Deny も使うことが可能です。例えば、ローカルネットワークインターフェイス上にあるホスト全てに完全なアクセス権を与えるには、ファイル /etc/cups/cupsd.conf に以下を記述します:

# Restrict access to the server...
# By default only localhost connections are possible
<Location />
   Order allow,deny
   Allow from @LOCAL
</Location>

# Restrict access to the admin pages...
<Location /admin>
   Order allow,deny
   Allow from @LOCAL
</Location>

# Restrict access to configuration files...
<Location /admin/conf>
   AuthType Basic
   Require user @SYSTEM
   Order allow,deny
   Allow From @LOCAL
</Location>

次の設定も追加する必要があるかもしれません:

DefaultEncryption Never

この設定によって次のエラーを止めることができます: 426 - Upgrade Required when using the CUPS web interface from a remote machine。

コマンドライン設定

コマンドラインからツール (lp* と cups* コマンドファミリー) を使って CUPS を完全に操作することができます。

Arch Linux では、ほとんどのコマンドはシェルの自動補完をサポートしています。 また、コマンドラインのスイッチはグループ化することはできないので注意してください。

デバイスを一覧する
# lpinfo -v
ドライバを一覧する
# lpinfo -m
新しいプリンターを追加する
# lpadmin -p printer -E -v device -P ppd

printer はあなたが自由に設定できます。デバイスは lpinfo -v コマンドで取得できます。 例:

# lpadmin -p HP_DESKJET_940C -E -v "usb://HP/DESKJET%20940C?serial=CN16E6C364BH"  -P /usr/share/ppd/HP/hp-deskjet_940c.ppd.gz

以下のコマンドの、printer はあなたが設定したプリンターの名前に置き換えてください。

デフォルトのプリンターを設定する
$ lpoptions -d printer
状態をチェックする
$ lpstat -s
$ lpstat -p printer
プリンターを無効にする
# cupsdisable printer
プリンターを有効にする
# cupsenable printer
プリンターを削除する

まず印刷要求のエントリを全て拒否するように設定してください:

# cupsreject printer

次にプリンターを無効にしてください。

# cupsdisable printer

最後にプリンターを削除してください。

# lpadmin -x printer
ファイルを印刷する
$ lpr file
$ lpr -# 17 file              # ファイルを17部印刷する
$ echo "Hello, world!" | lpr -p # print the result of a command. The -p switch adds a header.
印刷キューを確認する
$ lpq
$ lpq -a # on all printers
印刷キューを削除する
# lprm   # 最後のエントリを削除
# lprm - # 全てのエントリを削除

他の CUPS インターフェイス

GNOME

system-config-printerインストールすることでプリンターを設定・管理できます。このプログラムは複数の gnome 依存パッケージを呼びこむことがあります。

cups スケジューラを管理するのに必要な特権をユーザーが持っていない場合、system-config-printer は起動時に root パスワードの入力を求めます。以下の設定をすることでこれを回避することが可能です。

1. cups スケジューラを管理するグループを作成してください:

# groupadd lpadmin

2. ユーザーを新しく作成したグループに追加してください:

# usermod -aG lpadmin username

3. cups が新しく作成したグループを使うように設定してください:

/etc/cups/cups-files.conf
 ...
 SystemGroup sys root lpadmin
 ...

4. cups を再起動してください:

# systemctl restart org.cups.cupsd.service

5. 一度ログアウトしてからログインしなおすか、コンピュータを再起動してください。

KDE

KDE のユーザーはコントロールセンターからプリンターを変更することが可能です。ハードウェアグループにプリンターインターフェイスが現れない時は kdeutils-print-manager パッケージをインストールする必要があるかもしれません。インターフェイスの使用方法など詳しい情報はデスクトップ環境のドキュメントを参照してください。

その他

AURgtklpAUR があります。

PDF 仮想プリンター

ノート: GNOME では、PDF や Postscript ファイルに直接プリントすることが可能なため、そのような場合 CUPS-PDF が必要ありません。

cups-pdf パッケージを使うことで送信されたデータから PDF を作成する仮想プリンターをセットアップすることができます。このパッケージは必須ではありませんが、使うと非常に便利です。

パッケージをインストールした後、他のプリンターと同じようにウェブインターフェイスを使って設定してください。cups の印刷マネージャ http://localhost:631 にアクセスして選択してください:

Administration -> Add Printer
Select CUPS-PDF (Virtual PDF), choose for the make and driver:
Make:	Generic
Driver:	Generic CUPS-PDF Printer

生成された PDF ドキュメントは /var/spool/cups-pdf のサブディレクトリに置かれます。通常、サブディレクトリにはジョブを実行したユーザーの名前が付けられます。ちょっとした設定で、印刷した PDF ドキュメントをもっと簡単に見つけられるようにできます。/etc/cups/cups-pdf.conf を編集して、次の行を

#Out /var/spool/cups-pdf/${USER}

下のように変更してください

Out ${HOME}

PostScript に印刷する

CUPS-PDF (仮想 PDF プリンター) は実際は PostScript ファイルを作成してから ps2pdf ユーティリティを使って PDF を作成しています。PostScript に印刷するには、印刷ダイアログでプリンターとして "CUPS-PDF" を選択し、"print to file" のチェックボックスを選択して、印刷を押し、filename.ps を入力して保存をクリックするだけです。これはファックスなどで便利です。

トラブルシューティング

CUPS/トラブルシューティングを見て下さい。

参照