EPSONプリンタ+gsフィルタ+printcap

プリントアウトすると癖になるからプリンタ要らん、紙の無駄じゃ! だったが、 最近校正作業がちょこちょこ必要になったので安いことだし買ってみた。

こんなときはLinuxドライバを標準で出してくれている、それもGPLで 配付しているEPSONのを買うに決まってるのだ。きっとBSDでも使えるじゃ呂。 てことでPM-D770というのを導入。最近のプリンタにはメモリカードスロットが ついてるのでそこから画像をダイレクトにプリントアウトできてPC要らず。 ちょべんり。デジカメ画像を光沢紙にプリントアウトして配る程度なら なーんも悩まんで良くて楽ですな。そのうちPDFがダイレクトプリントできる ようになって、全面的にPCが要らなくなりそう。ま、それは置いといて、 文書の印刷をするにゃどうしたら良いか、だ。

さてさて、i-love-epsonからPIPSというドライバを ……………‥‥‥、うーん、色々な個人事情がからみ合って、うまくいかん。 ばっさり省略。

結論を書くとGhostscript(gs)のドライバでプリントアウトできた。 大まかな流れは

  1. stcolorデバイスドライバ付でgsをインストール
  2. gsを呼んでPostScriptをESC/Pに変換するスクリプトを作る
  3. そのスクリプトをインプットフィルタにするprintcapを記述
  4. lpdを起動

となる。はまった点は

「最近のEPSONプリンタは電源ON後、モードを切り替えないとPCからプリントア ウトできない」

という点で、最初データを流し込んでもうんともすんとも言わなくて悩んだ。 gimp-printの資料のページに書いてあった。それをヒントにして、 行ってみよう。

  1. 【stcolor込みでgs入れる】

    gs -h」と起動するとドライバ一覧が出てくる。 一覧にstcolorがなければ入れる。古くからあるドライバなのでgsの バージョンは多少古くて良い。gsのソースのディレクトリに行って Makefileをみると DEVICE_DEVS* という行がたっぷり 並んでいるところがあるので、適当なところに以下のような感じで 追加。

    DEVICE_DEVS17=$(DD)stcolor.dev
  2. 【変換スクリプト作成】

    標準入力を読んで、PostScriptならESC/Pにして標準出力に 書き出すスクリプトを作る。スクリプトの名前を ps2stcolorとしよう(末尾に載せた)。

  3. printcapを書く】

    インプットフィルタとしてps2stcolorを呼ぶように記述する。 こんな感じ。

    lp|epson escp printer:\ :lp=/dev/ulpt0:sh:sd=/var/spool/output/epson:\ :if=/usr/local/etc/ps2stcolor: :mx#0:

    行頭の空白はTAB文字。プリンタの名前は何でも良いが、デフォルト プリンタにするならlpという名前も付ける。USBプリンタの1台目なら デバイス名は /dev/ulpt0 とする。インプットフィルタ の置き場所は適当に。

  4. 【lpd起動】

    /etc/rc.confにFreeBSDなら

    lpd_enable=YES

    NetBSDなら

    lpd=YES

    と書く。その場で起動するなら

    # /etc/rc.d/lpd start

    する。テストデータを送っておしまい。

さて、肝心のフィルタスクリプト。変換したデータの前に プリンタのモード切り替えデータを送る部分を追加。printfコマンドを利用して いる。

#!/bin/sh
# lpd input filter with gdevstcolor
#
setoffset() {
cat<<_EOF_
<<
%% /PageOffset [0.0 00.00]
/.HWMargins [0 0 0 0]
>>
setpagedevice
_EOF_
}

PATH=/usr/local/gs/bin:$PATH
read firstline
case "$firstline" in
  %!*)
	printf '\000\000\000\033\001@EJL 1284.4\n@EJL     \n\033@'
	(echo "$firstline"; setoffset; cat) | \
	  gs -sDEVICE=stcolor -sOutputFile=- -dNOPAUSE -q -sBATCH -
	;;
  *)
	(echo "$firstline"; cat) && exit 0 ;;
esac
exit 2

最初の1行が %! で始まっていたらPostScriptと判断してgsで変換処理、 そうでなければそのまま流し込む。ただし、%! で始まっていない PostScriptファイルも(手書きのものには)あるのでちうい。

また、setoffset関数でページのマージンなどの設定を ちょこちょこと調整。最近のインクジェットプリンタは縁なし印刷とかが できるように作られているのでハードウェアマージンが0でもおっけ。 印刷部分をずらしたいなら /PageOffset もいじる。どちらも 単位は1/72inch。/PageOffset のほうは[左からのオフセット 上からのオフセット]の順、/.HWMargins のほうは [左マージン 下マージン 右マージン 上マージン]の順。


んで、速度や品質など

「EPSON謹製のPIPSドライバじゃなくて平気なの?」ってのが 気になってたが、総合的に見ると平気。気になる印字品質は、 ドライバの性能よりもむしろ、「インクジェット+普通紙」という組み合わせの 限界の方が低いのでEPSON純正ドライバで出してもgsのstcolorドライバで出して も同じ(Mac OS Xで印刷したのと比べた)。

ちょっと違うのは印字速度。A4いっぱいいっぱいに書いた文章を出すのに 「約50秒が約40秒程度になる」と言った程度。確かに速くなるが1ページに そんなにかかるんだと、「出掛ける直前に出そう」とかは端っから諦めるので どうでも良い速度向上。

てことで、個人的にはgsのstcolorドライバでじうぶんだな。 提出するときは共用のレーザープリンタで刷るし。

しかしまあ、上の設定とは別でお試しで写真を印刷してみたんだけど (メモリーカードから)、すごい時代やなあ。 「プリンターで印刷しやがったな?」と疑いの目で念入りに見ないと分からない 程度にきれいに写真が出てしまう。じっっっくりと見れば確かにプリンタの ラインらしきものが見えるけど、写真印画の品質にこだわりを持つ人でなければ 全然気にならんレベル。実際「これで十分すぎるじゃん」と思っちゃった。


叱咤激励感想ツッコミはゲストブック

Generated with mkdiary.rb
yuuji@example.org
Fingerprint16 = FF F9 FF CC E0 FE 5C F7 19 97 28 24 EC 5D 39 BA
HIROSE Yuuji - ASTROLOGY / BIKE / EPO / GUEST BOOK / YaTeX [Tweet]