連載
» 2008年11月04日 00時00分 公開

Linux印刷システムの仕組みと設定実践でも役立つLPICドリル(7)(2/4 ページ)

[大竹龍史,ナレッジデザイン]

今回のディストリビューション: CentOS 5.2

問題を解く鍵 【2】

【2】新しい印刷システムCUPSの仕組みと設定手順を把握しておく

 CUPSは多様なプリンタ、多様なファイル形式に対して標準的なインターフェイスを持ち、モジュール化された印刷システムです。標準の印刷プロトコルは新しいIPP(Internet Printing Protocol)ですが、LPDやSMBもサポートしています。

 コマンドラインインターフェイスとして、BSD系やSystem V系とほぼ同等なコマンドラインインターフェイスを提供しています。米Easy Software Productsによって開発され、GPLで配布されています。

 テキストファイルが非PostScriptプリンタに送られるまでの処理は次のようになります。

テキストファイル
ファイルのMIMEタイプに対応したフィルタ(CUPSフィルタあるいはCUPS対応GhostScript。PPDファイルを参照して処理を行う)
CUPSバックエンド
プリンタ
PPD(Postscript Printer Description)は、プリンタの機能記述ファイルです。非PostScriptプリンタであっても、CUPSフィルタあるいはCUPS対応GhostScriptから参照されます

(注)CentOS 5.2のGhotsScript8.15.2は米Easy Software ProductsからリリースされたCUPS対応のGhostScriptです


 CUPSバックエンドはフィルタプログラムによって加工されたファイルをプリンタに送る作業を行います。バックエンドプログラムには、http、ipp、lpd、parallel、serial、smb、socket、usbなどがあります。

設定ファイル: /etc/cups/printers.conf、/etc/cups/cupsd.conf

(注)/etc/printcapもlpd対応アプリケーションのために生成されます
サーバプロセス:  cupsd
スプールディレクトリ: /var/spool/cups

フィルタディレクトリ:

/usr/lib/cups/filter
model(PPD)ディレクトリ: /usr/share/cups/model
バックエンドディレクトリ: /usr/lib/cups/backend
ログファイル: /var/log/cups/access_log、/var/log/cups/error_log
管理コマンド: CUPSコマンド:cupsenable、cupsdisable、lpinfo、lpoptions
BSD系:lpc、lpq、lprm
System V系:lpadmin、lpstat、accept、reject、cancel
プリントコマンド: BSD系:lpr
System V系:lp


 CUPSのサーバは/usr/sbin/cupsdです。次のようにして起動します。

/etc/init.d/cups start
(注)CentOS5.2では、hal-cups-utilsに含まれていたcups-config-daemonはありません。


1.プリンタの設定

 プリンタの設定と管理には、Webブラウザベースの設定、GUIツール、lpadminコマンド(System V系)の3通りの方法があります。

(1)Webブラウザベースの設定

 Webブラウザを立ち上げ、http://localhost:631/にアクセスします(図1)。

図1 図1(※クリックで拡大)

(2)GUIツールによる設定

 メニューから、[システム] ⇒[管理] ⇒ [印刷]を選択します(図2)。

図2 図2(※クリックで拡大)

(3)lpadminコマンドによる設定

主なオプション
-p 作成するプリンタ名を指定する
-E プリンタジョブの受け付けを開始する
-v デバイスURIを指定する
-m modelディレクトリ/usr/share/cups/modelの下のPPDファイル名を指定する。(「lpinfo -m」でPPDファイルの一覧表示)
-P PPDファイル名を指定する


 PostScript対応プリンタであるネットワークプリンタ(ホスト名netprint)へ出力する、ローカルなCUPSサーバとして設定します。バックエンドにlpdを使用します。

 # lpadmin -p lp1 -E -v lpd://netprint/lp1 \
-P /usr/share/cups/model/postscript.ppd.gz


 PostScript対応プリンタであるネットワークプリンタ(ホスト名netprint)へ出力する、ローカルなCUPSサーバとして設定します。バックエンドにsocketを使用します。

# lpadmin -p lp2 -E -v socket://netprint/9100 \
-P /usr/share/cups/model/postscript.ppd.gz


 ローカルなファイル/dev/printerへ出力する、ローカ ルなCUPSサーバとして設定します。

# lpadmin -p lp3 -E -v file:///dev/printer \
-P /usr/share/cups/model/postscript.ppd.gz


 PPDファイル名の一覧は、lpinfo -mで表示できます。この中から使用するプリンタに合ったPPDファイルを選びます。標準的なPostScriptプリンタのドライバは次のようにして探すとよいでしょう。

# lpinfo -m | grep ^postscript
postscript.ppd.gz  Generic postscript printer


 -Pで指定したPPDファイルは解凍され、-pで指定したプリンタ名をファイル名として、/etc/cups/ppdディレクトリの下に置かれます。-Pの代わりに、modelディレクトリの下のPPDファイルを、-m postscript.ppd.gzのように指定することもできます。

 以下のように設定ファイルが更新されます。

設定ファイル /etc/cups/printers.conf(抜粋)

<DefaultPrinter lp1>
Info lp1
DeviceURI lpd://netprint/lp1
</Printer>

<Printer lp2>
Info lp2
DeviceURI socket://netprint:9100
</Printer>

<Printer lp3>
Info lp3
DeviceURI file:///dev/printer
</Printer>


設定ファイル /etc/cups/cupsd.conf(抜粋)
FileDevice Yes       <= ファイルに出力する場合は追加
Listen localhost:631
Listen 172.16.1.1:631 <= リモートクライアントにサービスするために追加
             (172.16.1.1はサーバのIPアドレスの例)
Listen /var/run/cups/cups.sock

Order allow,deny
# Allow localhost
Allow all <= リモートクライアントにサービスするために変更


設定ファイル /etc/printcap
lp1|lp1:rm=linux0:rp=lp1:
lp2|lp2:rm=linux0:rp=lp2:
lp3|lp3:rm=linux0:rp=lp3:


 LPD印刷システムを利用するアプリケーションとの互換性のために、自動更新されます。CUPSは/etc/printcapは参照しません。

 上記で設定したリモートCUPSサーバlinux0のクライアントに設定します。

# lpadmin -p rlp1 -E -v ipp://linux0/printers/lp1


設定ファイル /etc/cups/printers.conf(抜粋)

<DefaultPrinter lp1>
Info lp1
DeviceURI lpd://netprint/lp1
</Printer>

<Printer lp2>
Info lp2
DeviceURI socket://netprint:9100
</Printer>

<Printer lp3>
Info lp3
DeviceURI file:///dev/printer
</Printer>


2.プリントキューの管理

 BSD系コマンドのlpcは次のような管理ができます。

# lpc
lpc> ?
abort   enable  disable help    restart status  topq    ?
clean   exit    down    quit    start   stop    up
lpc> 
  status  プリンタ名  ・・・ キューの表示
  enable  プリンタ名 ・・・ キューへの入力を許可
  disable プリンタ名 ・・・ キューへの入力を禁止
  start   プリンタ名  ・・・  キューからプリンタへの出力を許可
  stop  プリンタ名 ・・・ キューからプリンタへの出力を禁止


 ただし、CUPSのlpcコマンドにはキューを表示する機能しかありません。

# lpc
lpc> ?
exit    help    quit    status  ?
lpc>
# lpc status lp1
lp1:
        printer is on device 'ipp' speed -1
        queuing is enabled
        printing is disabled
        2 entries
        daemon present
キューの表示:lpq
   # lpq -P lp1
     lp1 is not ready
     
   Rank    Owner   Job     File(s)      Total Size
     1st     root    116     fstab        1024 bytes
     2nd     root    117     inittab      2048 bytes
キュー中のジョブの削除:lprm
     # lprm ジョブ番号


 SystemV系のコマンドでは次のような管理ができます。

キューへの入力の許可:accept
     # accept プリンタ名
キューへの入力の禁止:reject
     # reject プリンタ名
キューからのプリンタへの出力の許可:cupsenable
   # cupsenable プリンタ名
キューからのプリンタへの出力の禁止:cupsdisable
   # cupsdisable プリンタ名
キューの表示:lpstat
   # lpstat
     lp1-116     root       1024   Wed Sep 24 11:54:23 2008
     lp1-117     root       2048   Wed Sep 24 12:02:23 2008
   # lpstat -t
     scheduler is running
     system default destination: lp1
     device for lp1: ipp://linux0/printers/lp
     printer lp1 disabled since Tue Sep 23 23:59:55 2008 -
        Paused
     lp1-116     root       1024   Wed Sep 24 11:54:23 2008
     lp1-117     root       2048   Wed Sep 24 12:02:23 2008
キュー中のジョブの削除:cancel
     # cancel ジョブ番号


3.プリンタへの打ち出し

BSD系:lprコマンド
# lpr ファイル名…… デフォルトプリンタへの打ち出し
# lpr -P lp2 ファイル名…… プリンタlp2への打ち出し
# lpr -#2 ファイル名…… デフォルトプリンタへファイルを2部打ち出し
SystemV系:lpコマンド
# lp ファイル名…… デフォルトプリンタへの打ち出し
# lp -d lp2 ファイル名…… プリンタlp2への打ち出し
# lp -n 2 ファイル名…… デフォルトプリンタへファイルを2部打ち出し
CentOS 5.2のCUPS関連パッケージ(参考)

cups-libs-1.2.4-11.18.el5
CUPSライブラリ

cups-1.2.4-11.18.el5
CUPSソフトウェア本体

hal-cups-utils-0.6.2-5.2.el5
HAL(Hardware Abstraction Layer)を利用してローカルプリンタを検知するCUPSのバックエンド

libgnomecups-0.2.2-8
CUPSをGNOMEに統合するライブラリ

foomatic-3.0.2-38.1.el5
プリンタドライバとPPDファイルのデータベース

ghostscript-8.15.2-9.1.el5_1.1
PostScriptインタプリタであるGhostScriptのパッケージ
/usr/bin/gsに組み込まれているプリンタドライバをCUPSが利用します

system-config-printer-0.7.32.8-1.el5
CUPS設定用のGUIツール


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。