[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:08288] Re: printersetup について。



山口@富山大学 です。

<3A5F187F.3FF7B5E0@fox.zero.ad.jp>において
zap91867@fox.zero.ad.jpさんは言いました。

>  土壇場で何とかなったのはみなさまのおかげです。
>  sambaの設定は、SWATからですのでそれほど難しくはありませんでした。
>  Windows98からのテスト印字にも反応だけはしました。

何とかなってよかったです。
もしよろしかったら(暇ができたら)どうやってうまくいったのか
教えてください。
# 提示した情報が正しかったかどうか知りたいので

>  しかし、やはり困った問題が発生しました。Plamo上からの lpr test.txtでは
> 正常なテキスト文字列が出力されるのですが、Windows98からのテスト印字は意
> 味のない文字の羅列で、完全に化けてしまっているのです。

これは、

  * PS プリンタでないプリンタに PS のデータを送る
  * PS プリンタに PS でないデータを送る

となりますね。

>  並列で稼働しているBSD系では、もちろんテスト印字は正常に出力されます。

Plamo で使用されている lpr と FreeBSD で使われている lpr の
バージョンの違いだと思うのですが(パッチなのかな?)、Plamo の方では、

  * ネットワーク上のプリンタ(/dev/lp? でない)の設定では
    入力フィルタが設定されていても使われない

ようになっています(少なくとも Plamo 2.0 までは)。

>  プリンタはキヤノンLBP-720。モノクロですが、LIPS 4のプリンタなので、
> printersetupの設定はそれを使ったのですが‥‥

/etc/printcap を見れば printersetup でどういう設定がされたか分かるの
ですが、上記のような問題があるので Samba と併用する場合一筋縄では
行きません。そこで、

  * lpr を新しいものにして ghostscript の設定をして Windows からは PS
    プリンタとして利用する
  * lpr と Linux 用のプリンタ設定はそのままにして Samba 用の設定を
    追加し、Windows からは当該機種のプリンタとして利用する。

のどちらかをしなければいけないのですが、後者の方が簡単かと思われ
ますので、そちらの方法を説明します。

この方法では、プリンタキューを 2 つ作り、Linux 側からは ghostscript を
使って PS プリンタとして動作させ、Windows 側からは普通に当該機種の
プリンタとして動作させようとするものです。

まず、キューを 2 個用意します。例えば /etc/printcap は次のように
なります。

---- /etc/printcap ----
epsonc|EPSON InterColor(LP-8000C):\
        :lp=/dev/null:\
        :if=/usr/local/lib/gsf-lp8000:\
        :sd=/var/spool/lpd/epsonc:\
        :lf=/var/log/lpd-errs:\
        :mx#0:
epsonc-raw|EPSON InterColor(LP-8000C) filtered job:\
        :lp=/dev/null:\
        :rm=iijima:\
        :rp=raw:\
        :sd=/var/spool/lpd/epsonc-raw:\
        :lf=/var/log/lpd-errs:\
        :mx#0:
---- /etc/printcap ----

# 上記は EPSON InterColor(LP-8000C) 用の設定ですので適宜名前をつけかえて
# ください
上のキュー(epsonc)は Linux 用のもので、

  lp: /dev/null なのでネットワークプリンタ
  if: 入力フィルタとして /usr/local/lib/gsf-lp8000 を使用
  sd: スプールディレクトリは /var/spool/lpd/epsonc
  lf: エラーログファイルは /var/log/lpd-errs
  mx: ファイルサイズの制限はしない(0)

という設定です。

入力フィルタは自分で手で書いたもので、これは PS データを ESC/P(EPSON の
プリンタ制御コード)に変換して下のキュー(epsonc-raw)に流すものです。これ
は sh スクリプトで、プリンタを使用できる権限のあるユーザに対して実行権
を設定してあります。

こんな感じになっています。

---- /usr/local/lib/gsf-lp8000 ----
#!/bin/sh
#
#   gsf-lp8000 - Ghostscript filter for EPSON LP-8000C
#

/usr/local/bin/gs -q -dNOPAUSE -sDEVICE=epag300 -sPAPERSIZE=a4 -sOutputFile=- - 
| lpr -Pepsonc-raw
exit 0

# End of Script
---- /usr/local/lib/gsf-lp8000 ----

パイプで 2 段に区切られていますが、前半が PS データを ESC/P に変換する
作業、後半が下のキュー(epsonc-raw)に流す作業です。

gs の場所はお使いの環境によってちがいますので確かめて正しく設定して
ください。
# 多分 /usr/bin/gs だと思います

-q オプションは -sOutputFile=- を指定する際に必要で、普通標準出力に出る
メッセージを抑制し、標準出力にデータだけが出力されるようにします。

-dNOPAUSE オプションは、gs コマンドを非対話形式で動作させます。つまり、
実行されると同時に仕事を開始します。

-sDEVICE=epag300 オプションはどのプリンタ制御コードに変換するかを設定
します。上記の場合は ESC/P で 300dpi で出力する epag300 を指定して
います。LBP-720 の場合は lips4 になるかと思われます。
詳しくは "gs -h" としてみてどういう指定が可能か調べてください。

-sPAPERSIZE=a4 は用紙のサイズです。適宜設定してください。この場合は
A4 サイズの設定です。

-sOutputFile=- は出力をどこにするかという設定で、標準出力(-) に出力する
ようにしますこれをパイプで渡します。

後半は普通に lpr でプリンタキューを指定しているだけなので問題ないと
思います。

さて、下のキュー(epsonc-raw)は、PS プリンタのようにフィルタをかまさ
ない設定にします。

  lp: ネットワークプリンタなので /dev/null
  rm: リモートのプリンタ名(ここでは iijima)
  rp: リモートプリンタ名引数(ここでは raw)
  sd: スプールディレクトリは /var/spool/lpd/epsonc-raw
  lf: エラーログファイルは /var/log/lpd-errs
  mx: ファイルサイズ制限はしない(0)

あとは、実際にスプールディレクトリを作成し、所有者とグループを設定した
うえで root で、

  # lpc restart all

とすればキューが有効となります。
# lpd が立ち上がっていればですが

Linux 側では上のキュー(epsonc)を用います。

  % lpr -Pepsonc hogehoge.ps

Windows 側では epsonc-raw に対して LBP-720 のドライバをインストール
します。
# epsonc に対して PS のドライバを入れれば PS プリンタとして利用
# できます

長くなりましたが、これでいかがでしょうか。
+--------+--------+--------+--------+--------+--------+--------+
富山大学大学院理工学研究科
電子情報工学専攻 知能システム工学第3講座
山口 真悟(Shingo YAMAGUCHI)  shingo@kip.iis.toyama-u.ac.jp



References
[plamo:08286] Re: printersetup について。, zero

[検索ページ] [メール一覧]
Plamo ML 公開システム