home FreeBSD Bike Misc Memorandum About

Epson PM with lpd on pips

Postscriptプリンタなぞ買えない

 基本的にUnix環境はハードコピーの出力先をPostscriptプリンタとして想定していると思います。Postscriptプリンタは高価なので自宅で所有しているひとはあまりいないと思います。それでは、FreeBSDからプリントアウトできないのか、というとGhostscriptを利用することで可能です。Ghostsciptは任意のPSファイルを出力対象とするプリンタのデータ方式に変換することができます。つまり以下のような図式になり、全体の系としてはPSプリンタとして見なせることができるわけです。

 ところで、これを実現するためにはGhostsciptが当該プリンタのデータ形式を知っていなければいけません。EpsonのPMシリーズの場合、ESC/Pラスターのコマンド非公開となっていますので手も足も出ません。そこで、EPSON KOWA社が公開しているLinuxむけのデバイスドライバPIPSの登場になります。

PIPSとは

 PIPSとは「Photo Image Print System」の略で、Linux上で「pngファイル」からPMシリーズのプリンタへの出力を可能にしたものです。「なんだ、png形式に変換しないといけないのか」という風に思われているかもしれません。ここに肝があるわけです。pipsにはfilter???,gsconfig???というフィルタが同梱されています。???にはPMシリーズの機種名です。FreeBSDからプリントアウトするには伝統的なlpdを利用するわけですが、当該プリンタに出力するときに任意のフィルタを設定することができます。fileter???はシェルスクリプトで、その中でgsconfig???が呼び出されています。gsconfig???はpsファイル→pngファイルに変換するものです。

 ここまでを整理すると、lpdを使って、pipsをフィルタにし、PMプリンタに出力にするには、

実際の設定

 さて、実際の設定に移りましょう。まずは、lpdの設定を適切にすることです。標準ではlpdデーモンは起動していないはずです。rootになって、lpdと入力するだけで立ち上がりますが、再起動するたびに自動的に立ち上がるように/etc/rc.confにlpd_enable="YES"を設定しておくと良いでしょう。

/etc/printcapの設定

 まずは、FreeBSD Handbook Chap.11 プリンタの利用を熟読をお勧めします。まずは今回の/etc/printcapの最終形をお見せします。

prn|lp|Epson PM-760C:\
--------:sh:sd=/var/spool/lpd/prn: \
--------:lp=:rm=prn.f-bell.net:rp=lp:\
--------:if=/usr/local/libexec/pips760/filter760: \
--------:lf=/var/log/lpd-errs:\
--------:mx#0:

 まず注意することとして、エントリの最初の行は左端のカラムから始まります。それに続く行はTABひとつ分だけ字下げします。最後の行以外のすべての行は、行末にバックスラッシュを記述します。お気をつけください。

  1. プリンタの名前をつける(prn|lp|Epson PM-760C)
    エントリの一行目はプリンタの名前です。気をつけることとして"lp"という名前のプリンタは少なくともひとつはなくてはなりません。 また、"|"を使って別名をことも可能です。上の設定では、"prn","lp","Epson PM-760C"という3つの名前がつけられていることになります。プリンタ名の最後にプリンタの機種名をつけるのは慣例のようです。

  2. ヘッダのプリンタを抑制する(sh)
    デフォルトではジョブを要求したユーザ名、ジョブを送ったホスト名、ジョブ名を区別できるようなヘッダページをプリントします。これは、多くのユーザが利用しているシステムでは誰がプリントアウトしたのか区別するために有用ですが、個人で使っている場合は不要です。これはshを指定することで抑制することが可能です。

  3. スプールディレクトリを設定する(sd=/var/spool/lpd/prn)
    プリンタに送られるジョブは, その印字が終了するまでこのディレクトリに置かれます。このディレクトリは慣例上以下のように設定されます。

    # mkdir /var/spool/printername

    ネットワーク上に使用可能なプリンタがたく さんあるなら、LPDで印字するための専用のディレクトリに スプーリングディレクトリを置きたいと思うかもしれません。この場合は/var/spool/lpdというディレクトリを作成し、その下にプリンタ名のディレクトリを用意することが一般的なようです。

    # mkdir /var/spool/lpd
    # mkdir /var/spool/lpd/prn


  4. デバイスの設定をする(lp=:rm=prn.f-bell.net:rp=lp)
    ここはプリンタが直接つながっているか(また、パラレルか、シリアルか)、リモートなものなのか、で設定が違います。直接そのマシンにつながっている場合、いずれかのデバイスで認識されていると思うので、そのデバイスをlpで設定します。例えば、USBで認識されている場合は以下の設定がexampleです 。

    lp=/dev/ulpt0

    リモートプリンタの場合、rmにリモートプリンタ名(dnsで設定されている名前)を設定します。その他、lpとrpも設定します。

    lp=:rm=prn.f-bell.net:rp=lp


  5. フィルタの設定をする
    さて、このフィルタの設定が肝となります。まず、ここで想定しているpsファイルを印刷するためのフィルターを設定してみます。pipsをインストールすると/usr/local/libexec/pips???/filter???としてフィルタ用のシェルスクリプトが用意されています。これをフィルタとして利用するには、以下のように設定します。テキストファイルを印刷するための設定は後述します。

    if=/usr/local/libexec/pips760/filter760


  6. その他雑多な設定をする
    エラーログの設定をlfでします。デフォルトではコンソールに出力されます。

    lf=/var/log/lpd-errs

    最大ファイルサイズの設定をします。mxで設定をし、0は制限無しです。

    mx#0


以上でとりあえず設定はおしまいです。lpdが起動していることを確認し、適当なpsファイルをプリントしてみましょう。

$ lpr -Plp tiger.ps

lprコマンドは-Pオプションでプリンタ名を指定します。省略すると、デフォルトのlpを指定します。どうでしたか?印刷できましたか?

印刷できない場合はprintcapを見直し、先にあげたドキュメントを参照してください。また、エラーログも見てみましょう。今回はpsファイルをできるようになったので、次回はテキストファイルを印刷できるようにします。

説明

FreeBSD4.6-Release

EpsonのPMプリンタにFreeBSDからプリントアウトする方法をまとめてあります。FreeBSD Handbook Chap.11 プリンタの利用を熟読し、自分の環境に応じ設定していきましょう。

ここでは、EPSON KOWA社が公開しているLinux用のPMプリンタドライバを用いて、Postscriptファイル、テキストファイルに関わらず印刷できるようにした記録を公開してあります。

2002/07/20

Creative Commons License
This work is licensed under a Creative Commons License.