次のページ 前のページ 目次へ



                     Japanese Printing mini HOWTO
                              Rel.0.0.1a
                              1996/08/22

                              はね ひでや
                       wing@aries.bekkoame.or.jp

  このドキュメントは、Linux 上で日本語を印字する方法について説明します。
英語版の Printing HOWTO とは無関係に記述したものです。


目次

1 プリンタ使用の基礎知識
1.1 テキストファイルの種類
1.2 プリンタの種類

2 lpr システム
2.1 lpr システムとは
2.2 lpr システムの仕組み

3 lpr によるテキストファイルの印字方法
3.1 /etc/printcap の設定
3.2 スプールディレクトリの作成
3.3 デーモンの起動
3.4 印字テスト

4 PostScript の使用
4.1 PostScript とは
4.2 GhostScript とは
4.3 GhostScipt の動作
4.4 GhostScript + lpr による印字

5 終わりに



1 プリンタ使用の基礎知識
  まず始めに、プリンタを扱う上で、知っておいた方が良いことをまとめました。 

1.1 テキストファイルの種類
  テキストファイルの種類と言うと大げさですが、テキストファイルには、通称
で SJIS, JIS, EUC の3種類の漢字コードがあります。 
┌──┬───────────────────────────────┐
│SJIS│別名 MS 漢字、別名のとおり DOS/Windows 等で主に使用されます。 │
│JIS │Internet 上のメールやニュースで主に使用されます。             │
│EUC │UNIX マシン上での使用を考えてつくられたコード体系です。       │
└──┴───────────────────────────────┘
  これは全て互換性はありませんので、それぞれについて処理する必要がありま
す。JE では、EUC を前提としています。

1.2 プリンタの種類
  よく、テキストファイルを

        cat file > /dev/lp1

  等とやって、英数字は出るが漢字が出ません、と言った質問を目にします。こ
れは、ファイル上の漢字コードをプリンタが理解できないために起こります。
  例えば、EUC でエンコードされたファイルは、最上位ビットが立っていれば漢
字となりますが(正確にはチョッチ違いますので、興味がある方は調べて見て下
さい)、それをプリンタが理解できないわけです。そこで、プリンタが理解でき
るようにテキストファイルを変換しなければなりません。
  変換は、プリンタ制御コードの埋め込みと漢字コードの変換等の処理を行ない
ますが、これらはプリンタが、どの制御コードをサポートしているかにより異な
ります。次に、国内の主要なプリンタ制御コードを示します。
┌────────┬─────────────────────────┐
│ESC/P           │EPSON が開発したドットプリンタ用の制御コード体系  │
│ESC/Page        │EPSON が開発したページプリンタ用の制御コード体系  │
│                │ESC/Pとは互換性は無い                             │
│LIPS II,II+,III │Canon のページプリンタ用制御コード体系            │
│PCPR201         │NEC PC 型番プリンタの制御コード体系               │
│NM              │NEC N 型番プリンタ用の制御コード                  │
└────────┴─────────────────────────┘
  実際の変換は、次の章で説明する lpr のフィルタが行なってくれますから、
普段は意識する必要はありませんが、所有のプリンタが、どの制御コードを持っ
ているかは*必ず*把握しておかねばなりません。

■重要■重要■重要■重要■重要■重要■重要■重要■重要■重要■重要■重要■
  また、ESC/P スーパー(ESC/PS)と言うモードがあるプリンタがあります。これ
は ESC/P, ESC/Page(ページプリンタのみ), PCPR201 を自動的に区別するモード
となっています。しかし、実際には区別するのでなく、ソフトウェアからモード
移行の制御コードを発行しているのです(希に自動的に区別する場合もあります
が)。
  ですから、ESC/PS に対応したフィルタを使用しない場合は、プリンタのモー
ドを手動で切り替える必要があります。
■重要■重要■重要■重要■重要■重要■重要■重要■重要■重要■重要■重要■

2 lpr システム
  lpr の概要について説明します。lpr は Linux 独自のものではないので、
UNIX 一般の書籍も参考になるでしょう。また、システムの設定は root(スーパー
ユーザ)で行うことを忘れないでください。

2.1 lpr システムとは
  lpr は、BSD 系の UNIX 上で開発されたプリントジョブの管理システムです。
これを使うことにより、複数のユーザから、印字要求の受け付け/キャンセル/出
力状況の確認などが出来ます。
  もし lpr を使わなかったら、デバイスの取り合いになり複数のプリントジョ
ブを効率良く処理することは出来ないでしょう。

2.2 lpr システムの仕組み
  lpr は、デーモンの lpd と、lpd に要求を出すコマンド群から構成されてい
ます(図が汚いのは勘弁してね:-)。

            プリンタ(スペシャルファイル)
                         ^
                         │
                      フィルタ
                         │キューから一つづつ印字
                         │
  コマンド群 <────> lpd ─────────> spool
              出力要求      要求のキューイング
              要求取消      印字内容の取り出し
              出力状況      要求の削除

  実際にユーザが使用するのは、コマンド群だけです。しかし、Linux では、ユー 
ザ = システム管理者の場合が多いので、lpd 等の設定を行なう必要があります。
  この他の特徴として、ネットワーク上での使用も考えられており、他のマシン
の lpd と連携して、リモートプリンタに出力することも可能です。(本ドキュメ
ントでは、これには触れません。)
  プリンタの違いは、フィルタが吸収する仕組みになっています。
  次の章からは、この lpr を使用しての印字法を説明します。


3 lpr によるテキストファイルの印字方法
  lpr を使い、テキストファイルを印字ための設定方法を説明します。2 章で説
明したとおり、ここでポイントとなるのは、印字しようとするテキストファイル
の種類と、プリンタの種類です。プリンタは BJ10VLite を想定していますが、
ESC/P の制御コードを持つものなら同様です。

3.1 /etc/printcap の設定
  使用するフィルタ、スプール等の定義を、/etc/printcap ファイルで行ないま
す。printcap の記述例を示します。記述するとき、既に lp があった場合には、
削除するか、# でコメントアウトしておいて下さい。

  1     lp| ESC/P filter :\
  2             :lp=/dev/lp1:\
  3             :sh:\
  4             :if=/usr/lib/escpf:\
  5             :of=/usr/lib/escpf:\
  6             :sd=/var/spool/lpr/lp:\
  7             :pw#90:pl#66:\
  8             :mx#0:\
  9             :lf=/var/spool/lpr/lp/lpr-error:

これらは次のような意味になっています。

  1 lp は lpr システム上のプリンタ名(エントリ)です。また、lp は、プリン
    タ名を指定しなかった場合にデフォルトで使用されます。| 以降はコメント
    です。 
  2 スペシャルファイルを指定します。プリンタポートの I/O アドレスによっ
    て、0x3bc:/dev/lp0  0x378:/dev/lp1  0x278:/dev/lp2  となります。
  3 カバーシート(出力したホスト名やユーザ名が印字される)の出力を抑制しま
    す。
  4 Input Filter です。文字通り入力データのフィルタです。例えば課金情報
    等を処理する場合に使用されます。ここでは JE に含まれる ESC/P 用のフィ
    ルタを指定していますが、特別何もしていません。
  5 Output Filter です。出力データのフィルタです。ここで 1.2 節で説明し
    た変換などをおこないます。JE に含まれる ESC/P 用のフィルタを指定して
    いますが、特別何もしていません。 
  6 スプールディレクトリを指定します。これは 1 のプリンタ名毎に作成しま
    す。
  7 pw が印字桁数、pl が印字行数の指定です。この指定は、escpf フィルタに
    おける A4 でぎりぎりのサイズです。
  8 スプールする最大ファイルサイズの指定です。0 を指定すると無制限になり
    ます。
  9 ログファイルの指定です。エラー発生時に記録するファイルです。

  書式の詳細は、man printcap で表示されます。

  使用したフィルタ、escpf は、EUC と JIS コードのファイルを、ESC/P の制
御コードに変換します。
  escpf は PCPR201 を処理できないので、同じく JE に含まれる pf コマンド
を利用して、次のようなシェルスクリプトをフィルタにすると良いでしょう。

        #!/bin/sh
        /usr/bin/pf -DPCPR -IEUC
        exit 0

  * 最近の NEC プリンタは、ESC/P をサポートするものも発売されており、
    PCPR201 を使う機会は減ってきているでしょう。

3.2 スプールディレクトリの作成
  スプールディレクトリを作成します。単純に mkdir で作成するだけです。

  # mkdir /var/spool/lpr
  # mkdir /var/spool/lpr/lp

 ┌─────────────────────────────────┐
 │注意) 以前は、作成後 chown root.lp と chmod 775 等としていたのです│
 │が、Slackware-3.0 では特に必要ないようです。                      │
 │                                                                  │
 │    # chown root.lp /var/spool/lpr/lp                             │
 │    # chmod 775 /var/spool/lpr/lp                                 │
 └─────────────────────────────────┘

3.3 デーモンの起動
  Slackware では、デフォルトで lpd が起動するようになっているので、特に
作業する必要はありません。ps コマンドで確認し、もし lpd が起動していない
ようであれば、/etc/rc.d/rc.inet2 の $IN_SERV を確認して下さい。
IN_SERV="lpd" となっていれば大丈夫の筈です。
  lpd が起動していることを確認したら、lpc コマンドで次のようにします。

        # lpc
        lpc> restart all
        lp:
                no daemon to abort
        lp:
                daemon started
        lpc> quit
        #

  このとき、ロックファイルがオープンできないと言うメッセージが出るかも知
れませんが、無視して構いません。

3.4 印字テスト
  それでは、準備が出来たので早速印字してみましょう。印字には、次のコマン
ド群を使用します。

 ■lpr  印字要求
    印字要求を lpr システムに発行します。

        lpr プリンタ名 印字ファイル

   例
   # lpr EUC_file

    前述のとおり、プリンタ名は lp ですから省略できます。よって、上記のよ
  うになります。
    もしも印字されない場合、次のことを確認します。

    ・printcap の記述(フィルタやスプールディレクトリはちゃんと存在するか?)
    ・lpd が起動しているか?(psコマンドで確認)
    ・印字しようとしたファイルは EUC か JIS のどちらかか?
    ・ESC/Pスーパー機能つきプリンタの場合、ちゃんと解除されているか?

 ■lpq  印字待ちの表示
    現在キューイングされている印字ジョブを表示します。

        lpq プリンタ名

   例
   # lpq -Plp
   lp is ready and printing
   Rank   Owner      Job  Files                                 Total Size
   active wing       1    JPrinting-mini-HOWTO.jis              7470 bytes
   1st    wing       2    JPrinting-mini-HOWTO.jis              7470 bytes
   2nd    wing       3    JPrinting-mini-HOWTO.jis              7470 bytes
   #    

 ■lprm  印字要求の取消
     印字要求を取り消します。もちろん取り消せるのは、自分のジョブだけで
   す。

        lprm プリンタ名 ジョブ番号

   例
   # lprm -Plp 1
   dfA001Aa00918 dequeued
   cfA001Aa00918 dequeued
   #


4.PostScript の使用

4.1 PostScript とは
  PostScript とは、アドビが開発したページ記述言語です。一般の制御コード
が(紙面上)シーケンシャルに制御コードを処理していくのに対して、紙面上のど
こに何を置くと言うように処理します。置くものは、文字に限らず、図形やビッ
トマップも可能です。
  詳しく知りたい方は、工学書のコーナーに電話帳級の本が2冊置いてあるので
すぐにわかるでしょう。通常は、PostScript プリンタに対して使用します。

4.2 GhostScript とは
  GhostScript とは、man ページから言葉を借りれば PostScript のエミュレー
タです。PostScript とて、結局はビットイメージに展開しているだけですから、
ビットイメージが印字できるプリンタ(普通出来ないプリンタは無いでしょう)な
らエミュレートが可能なわけです。例えば ESC/P を PCPR201 にエミュレートす
ることも勿論可能ですが、それをやらないのはメリットが無いからです。逆に言
うと、わざわざエミュレートをすると言うのは、それだけ価値があるということ
です。 
  その価値とは、TeX 等の印字や価格面等だと思います。TeX では dvi 形式の
ファイルから印字することも可能ですが、EPS 等を取り込んでいる場合には、や
はり PostScript で印字するほうが便利です。価格面でも、PostScript プリン
タを買うのに比べ、はるかに安い価格で環境を構築できます。特に Color
PostScript は非常に高価ですが、Canon や EPSON 等のインクジェットと組み合
わせることにより、非常に安価に Color PostScript を実現できます。 

4.3 GhostScipt の動作
  GhostScript の動作は単純です。

                      PostScript
                          ↓
                 GhostScript にて処理
                          ↓
    各種プリンタ制御コード/画像フォーマットに変換

  これだけなのです。面倒なのは、各種プリンタ制御コード/画像フォーマット
に変換に変換する時の設定/指定です(設定/指定は次の節でやります)。
  JE-0.9.7z に収録された GhostScript の、主な出力デバイスを次に示します。
これらは、gs -h で確認できます。

  静的に組み込まれたもの
    x11         S X Window System
    dmprt       P dviprt 用のコンフィグレーションファイルを利用した印字

  動的に組み込まれたもの
    bj10v       P Canon BJ10系
    bjc600j     P Canon BJC600 用カラー対応(610 の 720dpi は不明)
    dj505j      P HP Desk Jet 505
    epag        P EPSON ESC/Page
    linux       S linux console
    lips        P Canon LIPS
    lips2       P Canon LIPS II
    lips3       P Canon LIPS III
    mjc180      P EPSON MJ800C/700V2C/900C/5000C 等のカラー 180dpi
    mjc360      P EPSON MJ800C/700V2C/900C/5000C 等のカラー 360dpi
    mjc720      P EPSON MJ800C/700V2C/900C/5000C 等のカラー 720dpi
    pr150       P PC-PR150
    tiffg3      S TIFF G3 FAX

  dmprt が使用できるので、ほとんどのプリンタは使用できると思います。

4.4 GhostScript + lpr による印字
  GhostScript は、プリンタが即理解できるコードを生成しますから、直接スペ
シャルファイルに入力しても印字は出来ます。しかし、これではスプーリングも
できませんし効率良く使用できないと思います。ですから、GhostScript を lpr
のフィルタとして使用します。
  ここでは、True Type フォントを用いて、BJ10VLite + dmprt と LP1700 +
epag で印字する例を紹介します。なお、GhostScript は JE-0.9.7z に収録され
たものを使用します。
  共通設定(その一)→BJ10 or LP1700の設定→共通設定(その二) の順で作業し
ます。

■共通設定(その一)
  まず共通設定として、GhostScript が使用する日本語フォントの設定を行ない
ます。

・kconfig.ps の設定
  GhostScript は kconfig.ps により、どの日本語フォントを使用するか決定し
ます。kconfig.ps は、/usr/local/lib/ghostscript/kanji 以下に作成するシン
ボリックリンクです(もちろんコピーしても構いませんが、それはださいですよ
ね:-)。/usr/local/lib/ghostscript/kanji 以下には、zeit.ps や vflib.ps 等
のファイルがあり、使用するものにリンクを張ります。
  ここでは、vflib.ps を使用します。vflib.ps とは、広島大学の角川さんが作
成された、ベクトルフォントをビットマップデータに変換するライブラリ VFlib
を使用するものです。
  よって、次のようにシンボリックリンクを張ります。

   # cd /usr/local/lib/ghostscript/kanji
   # ln -s vflib.ps kconfig.ps

・vfontcap の設定
  VFlib を使用することを設定したので、こんどは VFlib が使用するフォント
の設定をします。つまり、

            GhostScript → VFlib → 各種ベクトルフォント

のようになっていて、GhostScript がみているのは VFlib だけなのです。
  さて、VFlib が使用するフォントは、/etc/vfontcap ファイルで設定します。
vfontcap の 70 行目付近の ff を次のように修正します。この例では、フォン
トが /home/sys/fonts2/ 以下にある場合ですから、各自の環境にあわせてパス
を設定して下さい。

        ### TRUETYPE FONT (Windows fonts)
        r-microsoft-mincho|MicroSoft mincho:\
                :ft=truetype:\
                :ff=/home/sys/fonts2/msmincho:  ← ここと
        r-microsoft-gothic|Microsoft gothic:\
                :ft=truetype:\
                :ff=/home/sys/fonts2/msgothic:  ← ここね

  さらに、TrueType フォントの場合にはインデックスファイルが必要になりま
す。フォントが存在するパス(例では /home/sys/fonts2/ )に移動したら、

        # ttindex msmincho.ttc
        # ttindex msgothic.ttc

を実行してインデックスファイルを作成します。フォントが Windows3.1 の場合
には、拡張子が ttc ではなく、ttf になります。
  次に、160 行目付近の次の部分をコメントアウトします。

        # zeit-maru
        min|min5|min6|min7|min8|min9|min10|min12|min17|Mincho Font:\
                :fc=zeit-mincho:
        goth|goth5||goth6|goth7|goth8|goth9|goth10|goth12|goth17|Gothic Font:\
                :fc=zeit-gothicMH:
        tmin|tmin5|tmin6|tmin7|tmin8|tmin9|tmin10|tmin12|tmin17|Mincho Font:\
                :fc=zeit-mincho:
        tgoth|tgoth5||tgoth6|tgoth7|tgoth8|tgoth9|tgoth10|tgoth12|tgoth17|Gothic Font:\
                :fc=zeit-gothicMH:
        bmin:\
                :fc=zeit-mincho:
        bgoth:\
                :fc=zeit-gothicMH:

  こんどは、209 行目付近の # TrueType から*次の行以降*のコメントを外しま
す。

        # TrueType
        #min|min5|min6|min7|min8|min9|min10|min12|min17|Mincho Font:\
        #       :fc=microsoft-mincho:
        #goth|goth5||goth6|goth7|goth8|goth9|goth10|goth12|goth17|Gothic Font:\
        #       :fc=microsoft-gothic:
        #tmin|tmin5|tmin6|tmin7|tmin8|tmin9|tmin10|tmin12|tmin17|Mincho Font:\
        #       :fc=microsoft-mincho:
        #tgoth|tgoth5||tgoth6|tgoth7|tgoth8|tgoth9|tgoth10|tgoth12|tgoth17|Gothic Font:\
        #       :fc=microsoft-gothic:
        #bmin:\
        #       :fc=microsoft-mincho:
        #bgoth:\
        #       :fc=microsoft-gothic:

  以上で共通設定(その一)は完了です。ここでテストをしてみましょう。
/usr/local/lib/ghostscript 以下に移動して、次のコマンドを実行してみて下
さい。

        X Window System の場合
          gs article9.ps

        Linux のコンソールの場合
          gslx article9.ps

画面上に日本国憲法が表示されればOKです。もしうまく行かない場合、which gs
として、どこの gs を実行しているかチェックして下さい。JE の gs は、
/usr/local/bin/gs(gslx) です。

■Canon BJ10VLite + dmprt driver
  dmprt は dviprt の設定ファイルを利用するドライバです。この設定ファイル
は、/usr/local/lib/prtcfg/ 以下にあります。cfg と src のサブディレクトリ
がありますが、前者は後者をバイナリ変換したものです。筆者は変換が面倒なの
で、src(ソース)を利用しています。このファイルを利用することは、
/usr/local/lib/ghostscript/dmp_site.ps で設定します。
  dmp_site.ps には、

        /printer (/usr/local/lib/prtcfg/src/bj_10v48.src)

  とだけ書いておけば、一応動きます。しかし、これだけでは大抵印字がずれる
ので、オフセットやマージンも定義します。

        /margin  [ 3.675 mm 12.7 mm 0.0 mm 0.0 mm ]
        /offset  [ 0.0 mm -4.0 mm ]

  ですから、3行もあれば十分でしょう。
  dmp_site.ps が修正できたら、フィルタを作成します。フィルタは
/usr/local/lib/gsf に、次のように作成すると良いでしょう。作成後 chmod
755 とするのを忘れないで下さい。

        #!/bin/sh
        /usr/local/bin/gs -q -dNOPAUSE -sDEVICE=dmprt -r360 \
        -sPAPERSIZE=a4 -sOutputFile=- -
        exit 0

  2 行目の -r360 は、解像度(dpi)ですから、プリンタにあわせて決定します。

■EPSON LP1700 + epag driver
  この組合せでは、GhostScript 組み込まれたドライバがそのまま使用できます
から、次のように /usr/local/lib/gsf でフィルタを作成し、chmod 755 として
おきます。

        #!/bin/sh
        /usr/local/bin/gs -q -dNOPAUSE -sDEVICE=epag -r300 \
        -sPAPERSIZE=a4 -sOutputFile=- -
        exit 0

■共通設定(その二)
  残るは lpr の設定です。3.1, 3.2 章で説明したとおり、printcap とスプー
ルディレクトリを作成します。

・printcap の設定
  /etc/printcap に、次のリストを追加します。記述するとき、既に ps のプリ
ンタ名(エントリ)が無いことも確認して下さい。

  1     ps|gs|GhostScript printer:\
  2             :lp=/dev/lp1:sh:mx#0:\
  3             :if=/usr/local/lib/gsf:\
  4             :sd=/var/spool/lpr/ps:\
  5             :lf=/var/spool/lpr/ps/lpr-error:

・スプールディレクトリの作成
  スプールディレクトリを作成します。

  # mkdir /var/spool/lpr
  # mkdir /var/spool/lpr/ps

  作成したら、3.3 と同様に lpc を実行して下さい。
  
■テスト印字
  全ての設定が終ったので、テスト印字をします。さきほどと同様に 
/usr/local/lib/ghostscript 以下に移動して、次のコマンドを実行してみて下
さい。

  # lpr -Pps article9.ps

これで、共通設定(その一)の画面と同様に、日本国憲法がプリンタから出力され
ます。
  うまく印字されない場合、gs -h を起動して、ドライバーがサポートされてい
るか確認して下さい。JE-0.9.7z の GhostScript では、次のようになります。

Ghostscript version 2.6.2 (4/19/95)
Copyright (C) 1990-1995 Aladdin Enterprises, Menlo Park, CA.
Usage: gs [switches] [file1.ps file2.ps ...]
Available devices:
    x11 dmprt
Dynamic modules:
    bit       bj10v     bj10vh    bjc600j   bjc600jc  bmp16     bmp16m   
    bmp256    bmpmono   cdj560    dj505j    dj505jc   epag      escp     
    escpc     jj100     linux     lips      lips2     lips3     mag16    
    mag256    mjc180    mjc360    mjc720    pbm       pbmraw    pcx16    
    pcx256    pcxgray   pcxmono   pgm       pgmraw    ppm       ppmraw   
    pr150     tiffg3    x11       dfaxhigh  dfaxlow   以下省略

5 終わりに
  本ドキュメントのバグレポート/応用事例は歓迎します。うまくいかないとき
は、使用した環境と設定を明確にして、fj.os.linux 等で質問すると良いでしょ
う。直接質問することは御遠慮ください。

次のページ 前のページ 目次へ