最終回

 本誌 2002/3 月号の本連載で USB プリンタについて触れたが、今回は、StarSuite 
 特集と連動し、安価なインクジェット・プリンタを利用した印刷環境をSolaris 上
 に構築する方法を解説する。

・Solaris の印刷環境

 Solaris 上で印刷環境を構築するには、Postscript プリンタを利用して実現するとい
  う手法であり、この方法が定着し、ほとんど変化がないといっていいだろう。
  しかし、Postscript プリンタも一昔前に比べて身近にはなったものの、多数の安価な
  インクジェット・プリンタが市場に溢れている。
 そこで、今回は、Postscript エンジンのghostscript を用い、安価なインクジェット
  プリンタを PS プリンタとして用いる方法を解説する。
  Ghostscript は、Postscript をエミュレーションするものの完全ではない。
 印刷の精度などを求める場合は、Adobe 純正の PostScript エンジンを搭載した PS プ
  リンタに頼る必要があることに注意して頂きたい。


・USB プリンタ

  その前に、Solaris で利用可能なプリンタについて触れておく。
  Sun Blade 100 では、USB インターフェースが用意されているが、Solaris 8 10/00 
  以降をインストールしているならば、USB プリンタを接続して利用することが可能と
 なっている。
 これは、Solaris 8 10/00 で、usbprn ドライバ(USB printer class driver) が提供
  されたためである。
  では、接続可能なプリンタは、どのようなものがあるのだろうか?
 現在、市場に出回っている安価なインクジェット・プリンタのほとんどが、USB 接続
 可能なものであるが、全てが接続可能とは、保証できない。
 仮に、Solaris がプリンタを認識したとしても、プリンタが印字可能なデータに変換
  する肝心の部分、つまり ghostscript に対応するドライバが含まれているかどうかも
 重要な鍵となる。
  ということは、まずは、ghostscript がどのようなプリンタをサポートするドライバ
 を持っているのか、確認し、そこから利用可能なプリンターを見極める必要がある。
  そこで、登場するのが Gimp-Print である。

	Gimp-Print Printer Drivers
	http://gimp-print.sourceforge.net

 Gimp-Print は、その名が示すとおり、高機能なレタッチソフトウェアである Gimp 
 ( http://www.gimp.org) の印刷用プラグインとして作成されたが、現在は、それとは
  別に、ghostscript などのドライバも提供されている。
  サポートされるプリンタは、各自で確認して欲しいが、比較的新しいもの、特にエプ
  ソン製品に関しては、積極的である。
  
	gimp-print Supported Printers
	http://gimp-print.sourceforge.net/p_Supported_Printers.php3
	
  唯一の問題は、サポートリストに上げられているプリンタは、海外での製品名であり
 国内での製品名との対応を両製品の仕様を、Web サイトで照らし合わせばながら、
  調べなければいけないという点だろう。
  そこで、筆者は、国内では、Carario PM-890C として販売されている製品を選択した。
 このプリンタの仕様にもっとも近かったのが、EPSON Stylus Photo 890 であり、その
 選択は、間違いではなかったようである。

	Carario PM-890C
	http://www.i-love-epson.co.jp/products/printer/inkjet/pm890c/pm890c1.htm

 本稿では、エプソン販売(株)の製品である、Carario PM-890C を例に ghostscript で
 印刷を可能にする方法解説してゆく。
 また、ghostscript と各社のプリンタに関しては、次の URL が参考になる。

	LinuxPrinting.org
	http://www.linuxprinting.org/

・USB プリンタの接続

 プリンタを接続すると、次のようなデバイスが作成され、prtconf コマンドに printer
 エントリが作成される。

        /dev/usb/printer
        /dev/printers/1
        ( 0 は、/dev/ecpp0 のリンク)


prtconf -D の出力
--
           usb, instance #0 (driver name: ohci)
                printer, instance #0 (driver name: usbprn)
--

  また、USB プリンタを接続すると、次のようなメッセージがコンソールおよび 
  /var/adm/messages ファイルに出力される。
 

dmesg の出力
--
Aug  4 15:03:12 blade usba: [ID 855233 kern.info] USB-device: printer@2, usbprn0
at bus address 2
Aug  4 15:03:12 blade usba: [ID 593373 kern.info]        EPSON USB Printer HBOLL
0
202252237490
Aug  4 15:03:12 blade genunix: [ID 936769 kern.info] usbprn0 is /pci@1f,4000/pci
@
2/usb@9/printer@2
Aug  4 15:03:13 blade genunix: [ID 408114 kern.info] /pci@1f,4000/pci@2/usb@9/pr
i
nter@2 (usbprn0) online
--

 このように認識できていれば、接続に関しては問題ない。
 しかし、ここで注意しなければならないのは、usbprn が提供する機能は、プリンタへ
  データを送信する機能のみに止まり、接続されたプリンタが印字可能なデータへの変換
  はおこなわない。いわゆる、データの垂れ流しのみを可能とする。
  これは、パラレルポートに接続した場合と同様である。


・Ghostscript 

  現在、Ghostscript には、AFPL (Aladdin Free Public License) と GPL (GNU Public
  License) のライセンスが適用された、2つのアーカイブが配布されている。
 AFPL ライセンスが適用されたものは、商用目的の配布が禁止されているが、
 AFPL ghostscript の最新版がリリースされると、一つ前の AFPL ghostscript に対し
 て、新たに GPL ライセンスを適用しなおしたものが、GNU ghostscript として配布さ
  れる。
 しかし、現在、AFPL ghostscript の最新バージョンが 7.04 なのにたいし、GNU
 ghostscript は、7.05 と、AFPL 版より新しくなっている。
 なお、最新版は、AFPL Ghostscript 7.22 developer  release となっている。 
  Ghostscript の詳細については、次の URL を参照して頂きたい。

	http://www.ghostscript.com/

 本稿では、GNU ghostscript 7.05 をベースにいくつかのドライバをサポートした
 ESP Ghostsctip 7.05 を例に解説してゆく。

		ESP ghostscript
		http://www.cups.org/ghostscript.html

・CID フォントによる他言語

  一方、最新の Ghostscript での、日本語を扱いも気になるだろう。
  ghostscript-7.05 では、gs-cjk (*) プロジェクトの成果が取り入れられており、
  マルチバイト対応である CID (Character Identifier Keyed font) フォントを利用
  することができる他、既存の TruType Font を CID フォントとして利用可能な機構が
  組み込まれている。
  gs_cjk プロジェクトについては、次の URL を参照して頂きたい。

	gs-cjk
	http://www.gyve.org/gs-cjk/index-j.html

・ソースコードの入手

  ghostscript をインストールするには、次のアーカイブを入手する必要がある。

	ftp://ftp.cups.org/pub/ghostscript/espgs-7.05.4-source.tar.gz
	ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/3rdparty/jpegsrc.v6b.tar.gz
	ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/3rdparty/libpng-1.2.2.tar.gz
	ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/3rdparty/zlib-1.1.4.tar.gz

	ftp://ftp.easysw.com/pub/ghostscript/gnu-gs-fonts-other-6.0.tar.gz
        ftp://ftp.easysw.com/pub/ghostscript/gnu-gs-fonts-std-6.0.tar.gz

	ftp://ftp.gyve.org/pub/gs-cjk/acro5-cmaps-2001.tar.gz
	ftp://ftp.gyve.org/pub/gs-cjk/adobe-cmaps-200204.tar.gz

  また、Gimp-Print は、次の URL から入手する必要がある。
  本稿では、STABLE RELEASE の最新版である gimp-print-4.2.2-rc1 を利用する。

	http://gimp-print.sourceforge.net/
	http://sourceforge.net/projects/gimp-print/


・Ghostscript のインストール

  本稿では、入手したアーカイブを /usr/tmp/gs ディレクトリに配置した場合を例に
  解説してゆく。
  まず、ghostscript に stp ドライバを組み込むために、gimp-print をインストールす
 る必要がある。

	$ gzip -cd gimp-print-4.2.2-rc1.tar.gz | tar xvf -
	$ cd gimp-print-4.2.2-rc1/
	$ env CFLAGS=-O configure --prefix=/opt/sfw/lib
	$ make
	# make install

  ライブラリを ghostscript ビルド時にみつけられるように、/opt/sfw/lib を
 環境変数 LD_LIBRARY_PATH および LD_RUN_PATH に設定しておく。

  次に、ghostscript のビルドに必要なアーカイブを展開する。
  なお、ghostscript 以外のライブラリは、別途、コンパイルする必要はなく、
  espgs-7.05.4/ ディレクトリにアーカイブを展開しておくだけで、自動的に利用され
 る。

	$ cd /usr/tmp/gs
        $ gzip -cd espgs-7.05.4-source.tar.gz | tar xvf -
        $ cd espgs-7.05.4
        $ gzip -cd ../jpegsrc.v6b.tar.gz | tar xvf -
        $ gzip -cd ../libpng-1.2.2.tar.gz | tar xvf -
        $ gzip -cd ../zlib-1.1.4.tar.gz | tar xvf -

 本稿では、/opt/espgs-7.05.4 をインストール先ディレクトリとする。
  また、configure 時に /opt/sfw/include/gimp-print を明示的に、指定する必要が
 あるため、CPPFLAGS をこのように記述する必要がある。

	$ env CPPFLAGS=-I/opt/sfw/include \
		 configure --prefix=/opt/espgs-7.05.4 \
		--with-ijs --with-gimp-print
	$ gmake 
	# gmake install 

  インストールが完了したならば、/usr/tmp/ghostscript/ghostscript-7/05/bin/gs -h
  を実行し、出力される Available devices: 欄に stp ドライバの名前があるか確認す
 る。

  なお、以降の表記を簡略化するため、インストールディレクトリに次のようなリンク
  を張っておく。

	# ln -s /opt/espgs-7.05.4 /opt/espgs
    
   コンパイルが無事に終了したら、次は、フォント関連のインストールをおこなう。 

	# cd /opt/espgs/share/ghostscript
	# gzip -cd /usr/tmp/gs/gnu-gs-fonts-other-6.0.tar.gz | tar xvf -
	# gzip -cd /usr/tmp/gs/gnu-gs-fonts-std-6.0.tar.gz	 | tar xvf -
	# mkdir Resource
	# cd Resource
	# gzip -cd /usr/tmp/gs/acro5-cmaps-2001.tar.gz | tar xvf -
	# gzip -cd /usr/tmp/gs/adobe-cmaps-200204.tar.gz | tar xvf -

  デフォルトで、/Resource ディレクトリ配下にフォント情報が置かれていることを想定
 しているため、次のようなリンクを張っておく。

	# ln -s /opt/espgs/share/ghostscript/Resource /

  なお、/ ディレクトリに Resource ディレクトリへのリンクを作成したくない場合は、
  以下に示すファイル内のエントリを変更することで、任意のディレクトリを指定する
  ことができる。

	/opt/espgs/share/ghostscript/7.05/lib/gs_res.ps

例: /opt/espgs/share/ghostscript/ ディレクトリを参照する設定
--
248 /FontResourceDir (/Resource/Font) readonly .forcedef
249 /GenericResourceDir (/Resource/) readonly .forcedef
		
			↓

/FontResourceDir (/opt/espgs/share/ghostscript/Resource/Font/) readonly .forcedef
/GenericResourceDir (/opt/espgs/share/ghostscript/Resource/) readonly .forcedef
--

  日本語を扱うために、CID フォントの元となる、TrueType フォントを用意しなければ
 ならないが、幸い、Solaris には、TrueType フォントが付属している。
 この TrueType フォントを利用するために、次のエントリを 
  /opt/ghostscript/share/ghostscript/7.05/lib/CIDFnmap ファイルの最下行に追加
  する。

--
/Ryumin-Light  (/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf);
/GothicBBB-Medium  (/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-GothicB.ttf);
/HeiseiMin-W3      (/usr/openwin/lib/locale/ja/X11/fonts/TT/HeiseiMin-W3H.ttf);
/HeiseiKakuGo-W5        /GothicBBB-Medium ;
/HeiseiMin-W3-Acro      /Ryumin-Light     ;
/HeiseiKaKuGo-W5-Acro   /GothicBBB-Medium ;

* この設定は、必要最低限のものであるため、扱う PS ファイルによっては、
 フォント名の追加をしなければならない場合がある。
--

  インストールが完了したならば、同梱されるサンプルファイルを表示してみる。

	$ /opt/espgs/bin/gs \
		/opt/espgs/share/ghostscript/7.05/examples/tiger.ps

  次に、日本語を含んだ適当なテキストファイルを Postscript ファイルに変換したもの
 を用意し、正常に表示されるか確認する。
  テキストファイルを PS ファイルに変換するには、jtops コマンドを利用する。

	$ jtops sample.txt > sample.ps

		01_tiger.ps.tiff

	$ /opt/espgs/bin/gs sample.ps

		02_japanese_sample.ps.tiff

  また、画面上に表示される字体の品質に、少しがっかりするかもしれないが、
  次のようなオプションを指定することでアンチエイリアス処理された出力を得ること
  が可能となる。

	$ /opt/espgs/bin/gs -sDEVICE=x11alpha test.ps

		03_japanese_sample.ps.tiff

  プリンタのデバイスファイルに直接データを送り込むことで、印刷も可能である。
 -sDEVICE=stp も指定されている、stp が Gimp-Print の ghostscript ドライバであ
  る。その後に続く、-sModel= オプションで、モデル名のすなわち、PM-890C を指定
 している。
  -sDEVICE= と -sModel= に格納される値は、プリンタによって異なる。
 詳しくは、Gimp-Print アーカイブの gimp-print-4.2.2-rc1/src/ghost/README ファ
  イルを参照して頂きたい。 

	# /opt/espgs/bin/gs -q -dNOPAUSE -sDEVICE=stp -sModel=escp2-890  \
		-sOutputFile=/dev/printers/1 test.ps




・LP システムへの登録

  最後に lp コマンドで印刷が可能になるよう設定をする。
 lp コマンドでこのデバイスを利用できるようにするには、次のような手順を踏む必要
 がある。

  次のような、スクリプトを /usr/lib/lp/model/epson ファイルとして用意する。
 このスクリプトは、LP システムのインターフェース・スクリプトとして利用される。
  (あくまで、インターフェーススクリプトの例である。)
--
#/bin/sh
DEVICE_TYPE=stp
DEVICE_MODEL=escp2-890
DEVICE_DEV=-
GS=/opt/espgs/bin/gs
shift 5
files="$*"

        for file in $files
        do
                $GS \
                        -sOUTPUTFILE=$DEVICE_DEV \
                        -sDEVICE=$DEVICE_TYPE -sModel=$DEVICE_MODEL \
                        -sNOPAUSE -q $file \
                        /opt/espgs/share/ghostscript/7.05/lib/quit.ps \
                        < /dev/null | /usr/lib/lp/bin/lp.cat
        done
exit 0
--

  プリンタ名を epson とし、先に作成したインターフェース・スクリプトを利用するよ
  う登録する。

	# lpadmin -p epson -v /dev/printers/1 -I postscript -T ps \
		-i /usr/lib/lp/model/epson2

  次に、フィルターテーブルを作成する。
  
	# cd /etc/lp/fd ; for filter in *.fd ; do
	> name=`basename $filter .fd`
	> lpfilter -f $name -F $filter
	> done

  最後に、印刷要求の受付と印刷を可能にするために次のコマンドを実行する。

	# accept epson
	# enable epson

  以上で、プリンタの登録は完了である。
  登録したプリンタは、lpstat コマンドで確認できる。

--
$ lpstat -l -t
scheduler is running
no system default destination
device for epson: /dev/printers/1
epson accepting requests since 2002年08月22日 (木) 13時06分17秒 JST
printer epson is idle. enabled since 2002年08月22日 (木) 13時06分21秒 JST. available.
        Form mounted: 
        Content types: postscript
        Printer types: ps
        Description: 
        Connection: direct
        Interface: /usr/lib/lp/model/epson
        After fault: continue
        Users allowed:
                (all)
        Forms allowed:
                (none)
        Banner required
        Character sets:
                (none)
        Default pitch:
        Default page size: 80 wide 24 long
        Default port settings:  
--  


・印刷

 印刷を行うには、lp コマンドを利用する。
  
	$ lp -d epson sample.ps

  作成したインターフェース・スクリプトに問題がなければ印刷を開始するはずだ。
  本稿では、簡易的な設定手順のみ解説したため、こまかなところで不都合等がでてく
  ると思われれるが、ご了承願いたい。

・最後に

  このように、Solaris 上の印刷環境を安価なインクジェット・プリンタなどで、整えよ
  うとした場合、一筋縄ではいかないのが現状である。
  だが、先頃、このような現状を打破するために、UNIX 上の印刷環境の標準化を推進す
  る、OpenPrinting プロジェクトも発足している。
  今後に期待したい。

	OpenPrinting
	http://www.freestandards.org/openprinting/