FreeBSD DTP/印刷ソフト紹介

Last Update (2001/11/13 06:50:37)

ミラーサイト [www.ceres.dti.ne.jp] [yk.rim.or.jp]

[ホームページ] [日記] [読んでいる日記] [秋葉原価格] [FreeBSD] [FreeBSD LINK] [検索] [高速検索]

DTP/印刷ソフト紹介

ja-vfghostscript-5.10 FreeBSD 2.2.7R 〜 2.2.8R
ja-vfghostscript-5.50 FreeBSD 3.1R
ja-vfghostscript-5.50a_2 FreeBSD 4.4R
Post ScriptファイルやPDFファイルを変換して、画面に表示したりプリンタに出力したりするソフトの日本語対応版。
ghostscriptは、解釈可能なファイルを実際の出力デバイス(たとえば、ディスプレイとかプリンタなど)特有の表現形式に変換するソフトだ。 変換するだけでなく、実際に画面に出力したり、プリンタに印刷できたりもする。

ghostscriptという名前で呼ばれるのが普通だが、タイプするときに長い名前は面倒なためか、実行ファイル名は gs となっている。

gs -h と入力すると、サポートされているデバイス名の一覧などが表示されるので、自分の使用したいデバイス名が表示されているのを確認しよう。 パッケージによっては、極端にサポートデバイスを削ってコンパイルされているものがある。 もし、自分の望むデバイスが表示されなかった場合は、再コンパイルか、標準配布に含まれていない新しいドライバがあるかどうかの情報収集が必要になる。 プリンタの利用からリンクしている「ghostscriptでサポートされているデバイス一覧」のページは英語だが、最新情報もよくフォローしているので要チェックだ。

私が持っているインクジェットプリンタのHP DeskJet 880Cはデバイス名 cdj550 でモノクロ、カラー印刷ともに可能だった。 基本的な設定方法はFreeBSD Handbook(プリンタ編)に譲るが、簡単に設定方法を以下に示す。

  1. /etc/rc.confの編集
    lpd_enable="NO" になっている部分を、lpd_enable="YES"にする。 もし、rc.conf内部にて、lpd_enable="NO"になっており、リブートするのが面倒な場合は、 root 権限で lpd と入力すれば、プリンタデーモンが起動する。
  2. /etc/printcapの編集
    とりあえず、以下のようにしてみた。
    #
    # Simple entry for HP Desktop 880C with gs
    #
    dj|deskjet880c|lp|local line printer:\
    	:sd=/var/spool/output/dj:\
    	:mx#0:\
    	:ct#0:\
    	:sh:\
    	:lp=/dev/lpt0:\
    	:lf=/var/log/lpd-errs:\
    	:if=/usr/local/libexec/hpif:\
    	:vf=/usr/local/libexec/hpvf:
    # Banner pages are now suppressed by default.  Remove the :sh:
    # capability to turn them back on.
    #
    #lp|local line printer:\
    #	:sh:\
    #	:lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:
    #
    	    
    上記設定ファイルのうちプリンタ名が書いてある行以外は、行の先頭がTABで始まっている必要があるらしい(未確認)。 ブラウザからカット&ペーストしたり、/usr/bin/eeを使うとタブがスペースに変換されてしまうので注意が必要だ。

    各種アプリケーションからデフォルトのプリンタとして使われるプリンタ名は「lp」なので、DeskJetを意味する「dj」「deskjet880c」という名前に加えて「lp」という名前でも定義している。 かわりに、標準で定義されている「lp」「local line printer」をコメントアウトする。 lprは同じ名前のエントリの存在、または、違う名前のエントリが同じスプールディレクトリを使用すること)を許さないので、標準状態で書き込まれているlpを放置しておくとエラーになる。 英単語2文字で表現される機能の意味は以下の通り。

    sd=/var/spool/output/dj
    プリントスプールに使用するディレクトリ名を/var/spool/output/djに設定する。 ここで指定したディレクトリは、後で作成する必要がある。
    mx#0
    プリントアウトするデータのサイズ制限を解除し、無制限サイズまで印刷可能にする。 画像を含んだファイルなどは、印刷すると意外なほど大きなサイズになってしまい、デフォルトのデータサイズ制限(1MB(?))を簡単に突破してしまうのでリミッターを解除しておく。
    ct#0
    TCP によるコネクションのタイムアウトリミットを解除する。
    デフォルトは120秒。 超巨大画像イメージなどを印刷する場合、120秒では終わらない場合があるらしいので、こちらも制限を解除しておいた。 もっとも、私の環境の場合は外部マシンからの印刷なんてやらない予定なんだけど。
    sh
    本文の前に、印刷ヘッダページ(印刷したユーザ名など)を印刷しないように設定する。 複数の人が利用するプリンタでは、誰が印刷したものなのかを区別しやすくするため、印刷文書の前に1ページの印刷ヘッダをつける習わしがあるらしい。 私の場合は個人所有プリンタなので、印刷ヘッダページはたんなる紙の無駄だ。
    lp=/dev/lpt0
    プリンタが接続されているポートを指定する。 私の場合はプリンタポート0にパラレルケーブルで接続しているので上記のように設定した。
    lf=/var/log/lpd-errs
    エラーが発生した場合などのログ記録を/var/log/lpd-errsに保存するように設定。
    if=/usr/local/libexec/hpif
    lpr filename とタイプした時、デフォルトで使用されるフィルタコマンドを指定する。 後で紹介する hpif というシェルスクリプトを指定している。
    vf=/usr/local/libexec/hpvf
    lpr -v で印刷したときに使用するフィルタコマンドを指定する。
  3. mkdir /var/spool/output/dj としてスプールディレクトリを作成する。
  4. chown daemon.daemon /var/spool/output/dj ; chmod 770 /var/spool/output/dj などとして、他のユーザーから印刷中のドキュメントの内容を見えなくする。
  5. /usr/local/libexec/hpifというファイル名で、以下のようなシェルスクリプトを作成して実行属性をつけておく。 以下のスクリプトは、テキストフィルタと呼ばれるものだ。
    (ファイルで拾う場合はこちら hpif 1KB)
    #!/bin/sh
    #
    #  ifhp - Print Ghostscript-simulated PostScript on a DeskJet 500
    #  Installed in /usr/local/libexec/hpif
    
    #
    #  Treat LF as CR+LF:
    #
    printf "\033&k2G" || exit 2
    
    #
    #  Read first two characters of the file
    #
    read first_line
    first_two_chars=`expr "$first_line" : '\(..\)'`
    
    if [ "$first_two_chars" = "%!" ]; then
        #
        #  It is PostScript; use Ghostscript to scan-convert and print it
        #
        /usr/local/bin/gs -sOutputFile=/dev/fd3 \
                          -dSAFER -dNOPAUSE -q -sDEVICE=cdj550 \
                          -dBitsPerPixel=24 \
                          3>&1 >&2 && exit 0
    
    else
        #
        #  Plain text or HP/PCL, so just print it directly; print a form
        #  at the end to eject the last page.
        #
        echo "$first_line" && cat && printf "\f" && exit 0
    fi
    
    exit 2
    	    
    色々と書いてあるが、印刷ファイルの先頭2文字が %! ならば PostScript ファイルとみなして印刷し、そうでなければプリンタに直接送るという動作をおこなっている。
    余談だが、すべてのPSファイルが %! から始まっているわけではないので、この条件ではしばしば誤動作する(苦笑)。 ja-vfghostscript-5.10に付属のサンプルPSファイルは /usr/local/share/ghostscript/5.10vflib/examples/ 以下に置いてある。 この中で、 %! から始まっていないPSファイルは、alphabet.ps waterfal.ps と2つある。
    もう一つチェックポイント。 gs(ghostscript)で、なぜ -sOutputFile=-を使うべきでないかによれば、PostScriptには標準出力へ文字列を出力するコマンドがあるらしい。 また、とあるドライバによって作成されるPostScriptには、標準出力に現在印刷中のページ番号を出力するものがあるようだ。 よって、ghostscriptのオプションで -sOutputfile=- などとして、単純に変換結果を標準出力に出力すると、PostScript内部で出力されるページ番号出力と混ざってしまってうまく印刷できないことがある模様。
  6. rootになってからlpc restart all として、lprを再起動し、設定した /etc/printcap を読み込ませる。
    うまく行っている場合は、以下のようなメッセージが表示されるはずだ。
    root@magi /home/george #lpc restart all
    dj:
            no daemon to abort
    dj:
            daemon started
    	    
    ここでなんらかのエラーが発生した場合は、 FreeBSD Q and A が助けになるはずだ。
  7. cd /usr/local/share/ghostscript/5.10vflib/examples として、ja-vfghostscriptパッケージに含まれているサンプルのPostScriptファイルがおいてあるディレクトリに移動。
    余談だが、ghostscriptのパッケージの種類は沢山ある。 それぞれのパッケージごとに、サンプルのPostScriptファイルが入っているディレクトリが異なっている場合がある。 上記のディレクトリにサンプルファイルが入っているとは限らないので注意。 一般に、pkg_add でインストールされたファイルは /var/db/pkg/[パッケージ名]/+CONTENTS というファイル内部に保存されている。 どこに tiger.ps がインストールされたか分からない場合は、/var/db/pkg/ja-vfghostscript-5.10/+CONTENTS の内容をチェックしよう。 さらに、ちなみに、+CONTENTS内部に書いてあるディレクトリ名は、先頭の /usr/local を省略してあるか、 X11アプリケーションならば /usr/X11R6 を省略してある。 そのままでは利用できないが、どこにインストールしたかの見当をつけたい時に有効だと思う。
  8. lpr tiger.ps として、印刷開始。
    以上の操作で、虎が印刷できたら成功だ。
  9. cd /usr/local/share/ghostscript/5.10vflib として、ja-vfghostscriptパッケージに含まれているサンプルのPostScriptファイルがおいてあるディレクトリに移動。
    上の虎が置いてあるディレクトリの一つ上だ。
  10. lpr testpage.psとして、テストページを印刷。 このページを印刷すると、ghostscriptに認識されているプリンタデバイスの情報が印字される。 本来なら、こちらを先に印刷すべき所だが、私の趣味で最初に虎を印刷してしまっている。

ghostscript+sambaでWindowsマシンのプリンタから印刷

ja-vfghostscript-5.50 + ja-samba-2.0.10.j1.1 FreeBSD 4.4R
ここでは、FreeBSD ---(ネットワーク)--- Windowsマシン ---(USBまたはプリンタケーブル)--- プリンタという具合に、FreeBSDマシンからWindowsマシン経由で印刷する方法を紹介する。 基本的な解説は上記のja-vfghostscriptの部分を参照して欲しい。 ほとんど同じ設定内容となる。
  1. /etc/rc.confの編集 - 同上
  2. /etc/printcapの編集
    #
    # Simple entry for HP Desktop 880C with gs via samba
    #
    dj|lp|local line printer:\
            :sh:\
            :mx#0:\
            :ct#0:\
            :sd=/var/spool/output/dj:\
            :lp=/dev/null:\
            :if=/usr/local/libexec/hpif-samba:\
            :vf=/usr/local/libexec/hpvf:\
            :lf=/var/log/lpd-errs:
    
    ここで、唯一上の設定と異なるのがif=で指定されているデフォルトフィルタの部分だ。 ここでは、 hpif-samba を指定している。 このフィルタ内部でWindowsマシンにプリント内容を転送するように設定するわけだ。
  3. mkdir /var/spool/output/dj - 同上
  4. chown daemon.daemon /var/spool/output/dj ; chmod 770 /var/spool/output/dj - 同上
  5. /usr/local/libexec/hpif-sambaというファイル名で、以下のようなシェルスクリプトを作成して実行属性をつけておく。
    (ファイルで拾う場合はこちら hpif-samba 1KB)
    #!/bin/sh
    #
    #  hpif-samba - Print Ghostscript-simulated PostScript on a DeskJet 880c
    #  Installed in /usr/local/libexec/hpif-samba
    
    #
    #  Treat LF as CR+LF:
    #
    printf "\033&k2G" || exit 2
    
    #
    #  Read first two characters of the file
    #
    read first_line
    first_two_chars=`expr "$first_line" : '\(..\)'`
    
    if [ "$first_two_chars" = "%!" ]; then
        #
        #  It is PostScript; use Ghostscript to scan-convert and print it
        #
        /usr/local/bin/gs -sOutputFile=/dev/fd/3 \
                          -dSAFER -dNOPAUSE -q -sDEVICE=cdj880 \
                          3>&1 >&2 | /usr/local/bin/smbclient //casper/hp880c -U george -N -c 'print -'  > /dev/null && exit 0
    else
        #
        #  Plain text or HP/PCL, so just print it directly; print a form
        #  at the end to eject the last page.
        #
        exit 2
    fi
    
    exit 2
    
    印刷ファイルの先頭2文字が %! ならば PostScript ファイルとみなしてgsで処理し、パイプでsmbclientに流し込んでいる。 smbclientのオプションでgeorgeというのがWindows98SE上での私のログイン名、casperというのがWindows98SEが動作しているマシン名、hp880cという名前でプリンタをパスワード無しで公開共有している設定となっている。
  6. smbclient //casper/hp880c -N -c 'printmode' などとして、smbclientでプリンタのモード取得が行えるか確認する。
    うちの環境では、実行後以下のような表示となった。
    the printmode is now graphics
    
  7. rootになってからlpc restart all を実行 - 同上
  8. cd /usr/local/share/ghostscript/5.50vflib/ - 同上
  9. lpr testpage.psとして、テストページを印刷。 - 同上
gv-3.5.8 FreeBSD 2.2.7R
ghostscriptで解釈可能なファイル(PostScriptファイルや、PDFファイルなど)を画面上に表示して閲覧するソフト。
ghostscriptは、解釈可能なファイルを実際の出力デバイス(たとえば、ディスプレイやプリンタ)特有の表現に変換するソフトだ。 gvは、下請としてghostscriptにファイルの解釈をやらせて、画面表示部分の操作性を高めたソフトになっている。 ghostscriptをインストールしたら、ついでにgvもインストールすると何かと便利だ。
lpr, lpc, lpq, lprm (, lpd )
プリントキュー管理、プリントデーモン関連コマンド。
上の4つのコマンドは、プリントデーモンが管理しているプリントキュー(プリント待ち行列)を制御したり、表示したりするコマンド群。 BSD系UNIXに特有のコマンドらしい。
lpr システム標準
プリントキューにファイルを登録する。 早い話が印刷開始だ。 lprに渡すオプションで「このファイルは〜形式です」という指定や「〜というプリンタで印刷してくれ」という指定を行う。
lpc システム標準
プリントデーモン制御コマンド。 lpc restart all とすると、すでにプリントキューに入っている印刷予定ファイルを全部クリアし、プリントデーモン(プリントキュー)の状態を初期化する。 lpcコマンドには他にも色々な機能があるが、私は restart all くらいしか使ったことがない。
lpq システム標準
現在プリントキューに入っている印刷予定一覧を表示する。
lprm システム標準
プリントキューに入っている印刷予定ファイルを削除する。 印刷をやめたい場合などに使用できる。 しかし、私の場合、印刷を途中でやめたい場合などは lpc restart allを使ってしまうことが多い。
lpd
プリントデーモン。 デーモンと言っても悪魔の方ではなくて、どちらかというと妖精というニュアンスらしい。 CPUが暇なとき、すこしずつデータをプリンタに送る役目を果たしている。 lpr, lpc, lpq, lprmの4コマンドは lpd に対して指令を送るコマンドである。
jp-ptex-1.7.0.9f.tgz FreeBSD 2.1.0R 〜 2.1.5R
日本語縦書き対応TeX。 版下作成支援システムのTeXの日本語対応版で、縦書きにも対応している。 impressのTeX for WINより、遥かに高速に動作する(というよりは、TeX for WINが遅すぎるのだが...)。 TeXを使うならお勧め。
jp-xdvi-17.tgz FreeBSD 2.1.0R 〜 2.1.5R
X Window Systemで動作する dvi ビュアー。 TeXでコンパイル(?)された文書は、dviというファイルに変換されるのだが、そのdviファイルを画面に表示するソフト。 フォントのデータはこのパッケージには含まれていないので、jp-ghostscript-2.6.1.4.tgz もpkg_addする必要がある。 TeXを使うならお勧め。
jp-ghostscript-2.6.1.4.tgz FreeBSD 2.1.0R 〜 2.1.5R
Post Scriptファイルを画面上で表示するソフト。 主にレーザープリンタの制御言語として有名なPost Scriptを画面上に表示するためのソフト。 このソフトが無いと、印刷結果をプリンタに印刷する前に画面で確認できないという恐ろしいことになる。 また、xdviが使うフォントのデータもjp-ghostscriptのパッケージ内部に含まれているため、ほぼ必須のアプリケーションであろう。 インストールする際の注意点は、pkg_add するのにテンポラリー(/var/tmp)の容量が約102Mバイト必要なことだ。 pkg_add は、環境変数 PKG_TMPDIR で利用するテンポラリのパスを指定できるので、この機能のお世話になる事だろう。
FreeBSDページの目次に戻る
Copyright(c) 1996,97,98,99,2000,01 George(小濱 純). All rights reserved.
私の作成したページは全部リンクフリーです。
このページに間違いや要望などがありましたら george@yk.rim.or.jp まで御連絡ください。

[ホームページ] [日記] [読んでいる日記] [秋葉原価格] [FreeBSD] [FreeBSD LINK] [検索] [高速検索]

home: <george@yk.rim.or.jp> or <george@ceres.dti.ne.jp>