# CUPS (日本語)

関連記事

- CUPS プリンター共有
- CUPS プリンター別の問題
- Samba

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.conf` に加えて下さい。これで終わりです。アプリケーションが CUPS サーバーによって共有されているプリンターをすぐに見つけるはずです。

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

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

Note: この挙動は 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 もインストールしてください。

### プリンタードライバ

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

- gutenprint - Canon, Epson, Lexmark, Sony, Olympus, PCL のプリンターで GhostScript, CUPS, Foomatic, GIMP を使うための高品質なドライバのコレクション
- foomatic-db, foomatic-db-engine, foomatic-db-nonfree - Foomatic は Unix でフリーソフトウェアのプリンタードライバをスプーラと統合するデータベース駆動型のシステムです。
- hplip - HP の DeskJet, OfficeJet, Photosmart, Business Inkjet と複数の LaserJet プリンター機種、そして多数の Brother プリンター用のドライバーです。
- splix - SPL (Samsung Printer Language) プリンターに対応する Samsung のドライバーです。

- foo2zjs - HP Laserjet 1018 など ZjStream プロトコルを使うプリンターのためのドライバー。ここ に詳細があります。パッケージは AUR から利用可能です。
- hpoj - HP の Officejet を使っているのならば、このパッケージをインストールして指示に従ってこのスレッドに書かれているような問題を回避する必要があります。パッケージは AUR から利用可能です。
- samsung-unified-driver - Samsung のプリンターとスキャナー用の統合 Linux ドライバー。ML-2160 などの新しいプリンターで必要になります。パッケージは AUR から利用可能です。
- cndrvcups-lb - Canon の UFR2 ドライバーで LBP, iR, MF シリーズのプリンターをサポートしています。パッケージは AUR から利用可能です。

- cups-pdf - 送られたジョブから PDF を生成する仮想 PDF プリンターを設定するためのパッケージ

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

Note: PPD ファイルは `/usr/share/cups/model/` に置きます。

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

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

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

### USB プリンター

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

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

#### usblp のブラックリスト化

Warning: 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 プリンター

Warning: 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/` にあります。

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

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

Warning: hplip-setup のバグによって、AUR から前述の hplip-plugin パッケージをインストールしても、システムトレイや CUPS のログにエラー `Print job failed - required plug-in not found. Please run hp-plugin` が表示される場合があります。修正するには、CUPS のウェブインターフェイスからプリンターを修正してドライバーを手動で選択してください (en,en バージョンが推奨)。その後 CUPS サービスを再起動してください。
Note: hplip は foomatic-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 と任意で cups-browsed デーモンを起動して、必要に応じて有効にすることができます。

    # systemctl start cupsd.service       # to start cupsd daemon
    # systemctl enable cupsd.service      # to start daemon on boot

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

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

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

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

Tip: 他のフロントエンドは #他の CUPS インターフェイス を参照してください。
Note:

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

#### CUPS の管理

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

     # 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

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

    # systemctl restart 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

また、`Deny` も使うことが可能です。例えば、192.168.1.0/255.255.255.0 サブネットのホスト全てに完全な全てのアクセス権を与えるには、ファイル `/etc/cups/cupsd.conf` には以下を含めます:

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

    # Restrict access to the admin pages...
    <Location /admin>
       # Encryption disabled by default
       #Encryption Required
       Order allow,deny
       Allow from localhost
       Allow from 192.168.1.0/255.255.255.0
    </Location>

    # Restrict access to configuration files...
    <Location /admin/conf>
       AuthType Basic
       Require user @SYSTEM
       Order allow,deny
       Allow From localhost
       Allow From 192.168.1.0/255.255.255.0
    </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 -i' コマンドで取得できます。 例:

    # 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 cupsd

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

#### KDE

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

#### その他

AUR に gtklp があります。

## PDF 仮想プリンター

Note: 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 を入力して保存をクリックするだけです。これはファックスなどで便利です。

## トラブルシューティング

印刷が機能しない時は `/etc/cups/cupsd.conf` の 'LogLevel' を次のように設定して:

    LogLevel debug

次のコマンドで `/var/log/cups/error_log` からの出力を表示してください:

    # tail -n 100 -f /var/log/cups/error_log

出力の左端の文字の意味は:

- D=デバッグ (Debug)
- E=エラー (Error)
- I=情報 (Information)
- など

以下のファイルも有用です:

- `/var/log/cups/page_log` - 印刷が成功する度に新しいエントリを表示します
- `/var/log/cups/access_log` - cupsd http1.1 サーバー活動全てを表示します

勿論、問題を解決するには CUPS がどうやって動いているのか知るのが重要です:

1. '印刷'が選択されると (ほとんどの) アプリケーションは .ps ファイル (PostScript、ページの見た目を記述するスクリプト言語) を CUPS に送信します。
2. 次に CUPS はプリンターの PPD ファイル (プリンターの定義ファイル) を調べ、プリンターが理解する言語 (PJL, PCL など) に .ps ファイルを変換するにはどのフィルターが必要なのか目星をつけます (通常は GhostScript)。
3. GhostScript が入力を受け取り、使用するフィルターを調べ、フィルターを適用して .ps ファイルをプリンターが理解するフォーマットに変換します。
4. そして変換されたものはバックエンドに送信されます。例えば、プリンターが USB ポートに接続されている場合は、USB バックエンドが使われます。

文章を印刷して `error_log` を見れば印刷プロセスのさらに詳しいイメージがわかります。

### アップグレードによる問題

CUPS や関連プログラムのパッケージのバージョンが上がった後に起こる問題

#### CUPS が動作しなくなった

おそらく新しいバージョンを正しく動作させるために新しい設定ファイルが必要になっています。例えば、localhost:631 から CUPS を管理しようとすると "404 - page not found" のようなメッセージが表示されます。

新しい設定を使うには、`/etc/cups/cupsd.conf.default` を `/etc/cups/cupsd.conf` にコピーして (必要なら古い設定をバックアップしてください) から CUPS を再起動して新しい設定を適用してください。

#### 全てのジョブが"停止"になる

プリンターに送ったジョブが全て"停止"になる場合は、プリンターを削除してからもう一度追加してください。 CUPS のウェブインターフェイス を使って、Printers > Delete Printer に行って下さい。

プリンターの設定を確認するには Printers から Modify Printer に行って下さい。表示された情報をコピーして、次のページに進むには 'Modify Printer' をクリックしてください。

#### 全てのジョブが"プリンターが応答していません"になる

ネットワークプリンターを使っている場合、CUPS が CUPS が接続 URI に使っている名前が DNS によってプリンターの IP を解決しているか確認してください。例えばプリンターの接続が次のようになっている場合:

    lpd://BRN_020554/BINARY_P1

ホスト名 'BRN_020554' が CUPS を動かしているサーバーからプリンターの IP に解決されるようにする必要があります。

#### PPD のバージョンが gutenprint と互換性がない

次を実行してください:

    # /usr/bin/cups-genppdupdate

そして CUPS を再起動してください (このことは gutenprint のインストール後のメッセージでも指示されます)。

### その他

##### CUPS のパーミッションエラー

- Some users fixed 'NT_STATUS_ACCESS_DENIED' (Windows clients) errors by using a slightly different syntax:

    smb://workgroup/username:password@hostname/printer_name

- Sometimes, the block device has wrong permissions:

    # ls /dev/usb/
    lp0
    # chgrp lp /dev/usb/lp0

#### HPLIP プリンターが "/usr/lib/cups/backend/hp failed" エラーを送る

Make sure dbus is installed and running. If the error persists, try starting avahi-daemon.

Try adding the printer as a Network Printer using the http:// protocol. Generate the printer URI with `hp-makeuri`.

Note: There might need to set permissions issues right. Follow indications here: CUPS#Device node permissions.

#### HPLIP プリンターはジョブが完了したと言ってるのにプリンターが何もしない

This happens on HP printers when you select the (old) hpijs driver (e.g. the Deskjet D1600 series). Instead, use the hpcups driver when adding the printer.

Some HP printers (e.g HP LaserJet) require their firmware to be downloaded from the computer every time the printer is switched on. If there is an issue with udev (or equivalent) and the firmware download rule is never fired, you may experience this issue. As a workaround, you can manually download the firmware to the printer. Ensure the printer is plugged in and switched on, then enter

    hp-firmware -n

#### hp-setup が見つかったプリンターの PPD ファイルを指定するように要求する

hp-setup を実行する前に CUPS をインストールしてください。

#### Qt をインストールしたのに、hp-setup が "Qt/PyQt 4 initialization failed" と表示する

"hp-check -t" won't give you useful information to find the required package. You have to install all the "Dependent Packages" prefixed with "python2" in https://www.archlinux.org/packages/extra/x86_64/hplip/

#### hp-setup でプリンターが自動的に見つかったがテストページを印刷しようとするとすぐ "Unable to communicate with device" と表示する

This at least happens to hplip 3.13.5-2 for HP Officejet 6500A through local network connection. To solve the problem, specify the IP address of the HP printer for hp-setup to locate the printer.

#### hp-toolbox がエラーを送信する, "Unable to communicate with device"

hp-toolbox を通常のユーザーとして実行すると以下のようなメッセージが表示される場合:

    # hp-toolbox
    # error: Unable to communicate with device (code=12): hp:/usb/printer id

おそらくユーザーを lp と sys グループに追加する必要があります。

This can also be caused by printers such as the P1102 that provide a virtual cd-rom drive for MS-Windows drivers. The lp dev appears and then disappears. In that case try the usb-modeswitch and usb-modeswitch-data packages, that lets one switch off the "Smart Drive" (udev rules included in said packages).

This can also occur with network attached printers if the avahi-daemon is not running. Another possiblility is the specification of the printer's IP address in hp-setup fails to locate the printer because the IP address of the the printer changed due to DHCP.

#### HP プリンターで CUPS が '"foomatic-rip" not available/stopped with status 3' と返す

If receiving any of the following error messages in `/var/log/cups/error_log` while using a HP printer, with jobs appearing to be processed while they all end up not being completed with their status set to 'stopped':

    Filter "foomatic-rip" for printer printer_name not available: No such file or director

or:

    PID 5771 (/usr/lib/cups/filter/foomatic-rip) stopped with status 3!

make sure hplip has been installed, in addition to the packages mentioned above. See this forum post for more information.

#### unauthorised エラーで印刷が失敗する

If the user has been added to the lp group, and allowed to print (set in `cupsd.conf`), then the problem lies in `/etc/cups/printers.conf`. This line could be the culprit:

    AuthInfoRequired negotiate

Comment it out and restart CUPS.

#### GNOME の印刷ダイアログで印刷ボタンが押せない

  Source: I can't print from gnome applications. - Arch Forums

Be sure the package: libgnomeprint is installed

Edit `/etc/cups/cupsd.conf` and add:

    # HostNameLookups Double

Restart cups.service.

#### Unknown supported format: application/postscript

Comment the lines:

    application/octet-stream        application/vnd.cups-raw        0      -

from `/etc/cups/mime.convs`, and:

    application/octet-stream

in `/etc/cups/mime.types`.

#### Finding URIs for Windows print servers

Sometimes Windows is a little less than forthcoming about exact device URIs (device locations). If having trouble specifying the correct device location in CUPS, run the following command to list all shares available to a certain windows username:

    $ smbtree -U windowsusername

This will list every share available to a certain Windows username on the local area network subnet, as long as Samba is set up and running properly. It should return something like this:

     WORKGROUP
    	\\REGULATOR-PC
    		\\REGULATOR-PC\Z
    		\\REGULATOR-PC\Public
    		\\REGULATOR-PC\print$         	Printer Drivers
    		\\REGULATOR-PC\G
    		\\REGULATOR-PC\EPSON Stylus CX8400 Series	EPSON Stylus CX8400 Series

What is needed here is first part of the last line, the resource matching the printer description. So to print to the EPSON Stylus printer, one would enter:

    smb://username.password@REGULATOR-PC/EPSON Stylus CX8400 Series

as the URI into CUPS. Notice that whitespaces are allowed in URIs, whereas backslashes get replaced with forward slashes. If it won't work try '%20' instead of spaces.

#### Print-Job client-error-document-format-not-supported

foomatic パッケージをインストールして foomatic ドライバーを使ってみて下さい。

#### /usr/lib/cups/backend/hp failed

Change:

     SystemGroup sys root

to:

     SystemGroup lp root

in `/etc/cups/cupsd.conf`

Following steps 1-3 in the Alternative CUPS interfaces below may be a better solution, since newer versions of cups will not allow the same group for both normal and admin operation.

#### Unable to get list of printer drivers

- Check your ServerName in /etc/cups/client.conf is written without http://

    ServerName localhost:631

- Try to remove Foomatic drivers or refer to #HP_Printer for a workaround.

#### lp: Error - Scheduler Not Responding

If you get this error when printing a document using:

    $ lp document-to-print

Try setting the CUPS_SERVER environment variable:

    $ export CUPS_SERVER=localhost

If this solves your problem, make the solution permanent by adding the export line above to ~/.bash_profile.

#### CUPS prints only an empty and an error-message page on HP LaserJet

There is a bug that causes CUPS to fail when printing images on HP LaserJet (in my case 3380). The bug has been reported and fixed by Ubuntu. The first page is empty, the second page contains the following error message:

     ERROR:
     invalidaccess
     OFFENDING COMMAND:
     filter
     STACK:
     /SubFileDecode
     endstream
     ...

In order to fix the issue, use the following command (as superuser):

     lpadmin -p printer -o pdftops-renderer-default=pdftops

#### "Using invalid Host" エラーメッセージ

Try to add "ServerAlias *" into cupsd.conf

#### プリンターが印刷をせず CUP ウェブインターフェイスには "Filter failed" メッセージが残る (HP プリンター)

プリンターの USB ポートのパーミッションを変更してください:

lsusb からバスとデバイスの番号を取得し、次のようにしてパーミッションを設定してください:

    chmod 0666 /dev/bus/usb/bus number/device number

パーミッションの変更を永続化するため、コンピューターが起動する度に自動的に変更されるようにするには、以下の行を追加してください。

    /etc/udev/rules.d/10-local.rules

    SUBSYSTEM=="usb", ATTRS{idVendor}=="Printer_idVendor", ATTRS{idProduct}=="Printer_idProduct", GROUP="lp", MODE:="666"

`lsusb` コマンドで適切な情報を取得し、`Printer_idVendor` と `Printer_idProduct` をそれぞれ適切な値で置き換えるのを忘れないで下さい。

    Bus 002 Device 002: ID xxxx:yyyy Hewlett-Packard DeskJet D1360

xxxx が Printer_idVendor で yyyy が Printer_idProduct になります。

システムによって変わるので、udev (日本語)#デバイスの属性を一覧する のページを見て下さい。

#### Printer doesn't print with an "Filter failed" message on CUPS web interface (HP printer connected over network)

Start, enable and restart the avahi-daemon.

#### HPLIP 3.13: Plugin is installed, but HP Device Manager complains it is not

The issue might have to do with the file permission change that had been made to `/var/lib/hp/hplip.state`. To correct the issue, a simple `chmod 644 /var/lib/hp/hplip.state` and `chmod 755 /var/lib/hp` should be sufficient. For further information, please read this link.

#### プリンターが CUPS から認識されない

If your printer is not listed in the "Add Printers" page of the CUPS web interface, nor by lpinfo -v, try the following (suggested in this thread):

- Remove `usblp` from blacklist
- Load `usblp` module

    modprobe usblp

- Stop cups
- Add the following udev rule in a new rule file:

    /etc/udev/rules.d/10-cups_device_link.rules

    KERNEL=="lp[0-9]", SYMLINK+="%k", GROUP="lp"

- Reload udev rules:

    # udevadm control --reload-rules

- Unplug and re-plug the printer.
- Wait a few seconds and then start cups again.

#### Can't load /etc/samba/smb.conf

If you're printing to a remote printer over SMB and get this error message: "Can't load /etc/samba/smb.conf - run testparm to debug it", then create an empty smb.conf:

    # mkdir /etc/samba
    # touch /etc/samba/smb.conf

and restart cupsd.

#### CUPS の systemd サービスが有効になっているのに起動しない

The systemd .service file provided by CUPS uses socket activation, meaning the service is only started when an application connects to CUPS' socket. However, the systemd .socket file provided by cups only works for the local `/var/run/cups/cups.sock` socket.

In order to have cupsd start when initiating a print job over the network, create the following file:

    /etc/systemd/system/cups.socket

    .include /usr/lib/systemd/system/cups.socket

    [Socket]
    ListenStream=0.0.0.0:631
    ListenDatagram=0.0.0.0:631
    BindIPv6Only=ipv6-only

Then reload systemd:

    # systemctl --system daemon-reload

Confirm that everything is working correctly:

    # systemctl is-enabled cups.service || systemctl enable cups.service
    # systemctl status cups.socket
    cups.socket - CUPS Printing Service Sockets
             Loaded: loaded (/etc/systemd/system/cups.socket; enabled)
             Active: inactive (dead)
             Listen: /var/run/cups/cups.sock (Stream)
                     0.0.0.0:631 (Stream)
                     0.0.0.0:631 (Datagram)

CUPS should now start automatically when printing locally or over the network.

## 参照

- 公式 CUPS ドキュメント, ローカルにインストールされたドキュメント
- 公式 CUPS ウェブサイト
- Linux Printing, The Linux Foundation
- Gentoo の印刷ガイド, Gentoo Documentation resources
- Arch Linux ユーザーフォーラム
- Install HP printers easy way

Category:

- Printers (日本語)