  Linux Print2Win mini-HOWTO
  Harish Pillay, <h.pillay@ieee.org>
  June 7 1996
  吉峯 幸郎, <yoshimin@ms.civilnet.com.tw>
  May 24 1997

  簡単！− Linix から Windows 95/Windows NT プリント共有への印刷方法

  1.  はじめに

  著者の環境：

  o  最新版カーネル（pre-2.0.12)

  o  SAMBA

  o  標準 lpr ユーティリティー

  o  プリンター 2台

     o  LexMark Optra C PS (カラー)

     o  LexMark Optra R + PS (白黒)

  2.  設定と使い方

  2.1.  概要

  以下の2つの方法で印刷可能：

  o  標準 lpr コマンドを使用

  o  SAMBA の smbclient のプリント機能を使用

  2.2.  /etc/printcap

  どちらも以下のように作成された /etc/printcap ファイルを使用します。

  /etc/printcap:

  #
  # lpr コマンドを使用したい場合は、PRINTER 環境変数を PRINTER=eng
  # または PRINTER=colour、PRINTER=optrac、PRINTER=optrar の何れか
  # に設定する。あるいは lpr -P でファイルへの印刷も可能。
  #                               Harish Pillay (h.pillay@ieee.org)
  # //gaia/lexENG1 に smbprint 経由で印刷
  #
  eng|lp:\
          :cm=LexMark Optra R+ PostScript Printer:\
          :lp=/dev/eng:\
          :sd=/var/spool/lpd/eng:\
          :af=/var/spool/lpd/eng/acct:\
          :mx#0:\
          :if=/usr/local/samba/bin/smbprint:
  #
  # //gaia/lexTRG1 に smbprint 経由で印刷
  #
  colour|lpcolour:\
          :cm=LexMark Optra C PostScript Printer:\
          :lp=/dev/colour:\
          :sd=/var/spool/lpd/colour:\
          :af=/var/spool/lpd/colour/acct:\
          :mx#0:\
          :if=/usr/local/samba/bin/smbprint:
  #
  # lpr を使用して Optra R+ Postscript (白黒) に直接印刷
  #
  optrar:\
          :cm=LexMark Optra R+ PostScript Printer:\
          :sd=/usr/spool/lpd:\
          :lf=/usr/spool/lpd/errors:\
          :rp=optrar.dom.ain:\
          :rm=optrar.dom.ain:\
          :sh:\
          :sf:
  #
  # lpr を使用して Optra R+ Postscript (カラー) に直接印刷
  #
  optrac:\
          :cm=LexMark Optra C PostScript Printer:\
          :sd=/usr/spool/lpd:\
          :lf=/usr/spool/lpd/errors:\
          :rp=optrac.dom.ain:\
          :rm=optrac.dom.ain:\
          :sh:\
          :sf:

  # /etc/printcap ファイルの終わり

  2.3.  使い方

  手順：

  o  lpd を起動します（ /etc/rc.d/rc.M と /etc/rc.d/rc.inet2 を確認 )。

  o  lpd に対応しているプリンターであれば lpr で直接印刷できます。

  o  lpd に対応していないプリンタを Windows 95 や Windows NT のプリンタ
     共有機能を通して利用する場合は SAMBA が必要です。

  o  SAMBA が正しく動作していることを確認した後、smbprint（SAMBA に付
     属）スクリプトを使用して印刷します。
     (http://www.nijenrode.nl/ steven/ldp/Printing-HOWTO.html参照)

  2.4.  smbprint  スクリプト

  以下は若干の変更を施した著者の smbprint スクリプトです：

  /usr/local/samba/bin/smbprint:

  #!/bin/sh -x

  # このスクリプトは UNIX マシンで printcap を使用して印刷するための
  # 入力フィルタで、smbclient プログラムを使用して指定した smb サーバー
  # またはサービスにファイルを印刷します。
  # 例えば以下のような printcap エントリを設定すれば、このスクリプトを
  # 使用して印刷できる smb という名のプリンターを生成できます。
  #
  # smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
  #
  # この時、スプール用にシステムに対し適切なアクセス権限とオーナーに設定
  # された /usr/spool/smb ディレクトリの作成が必要です。
  #
  # hamiltom@ecnz.co.nz (Michael Hamilton)が改良し、サーバーやサービス、
  # パスワードを /usr/var/spool/lpd/PRINTNAME/.config から見れるようした
  # スクリプトです。
  #
  # さらに h.pillay@ieee.org (Harish Pillay)が変更し、ユーザー変数を追加
  # したスクリプトです。
  #
  # これを動作させるには /etc/printcap エントリにアカウンティング
  # ファイル（af=...）が含まれていなければなりません。
  #
  #   cdcolour:\
  #       :cm=CD IBM Colorjet on 6th:\
  #       :sd=/var/spool/lpd/cdcolour:\
  #       :af=/var/spool/lpd/cdcolour/acct:\
  #       :if=/usr/local/etc/smbprint:\
  #       :mx=0:\
  #       :lp=/dev/null:
  #
  # /usr/var/spool/lpd/PRINTNAME/.config ファイルは以下を含んで
  # いなければなりません：
  #   server=PC_SERVER
  #   service=PR_SHARENAME
  #   password="password"
  #   user=USERNAME          (h.pillay@ieee.org により追加)
  #
  # 例：
  #   server=PAULS_PC
  #   service=CJET_371
  #   password=""
  #   user=HARISH          (h.pillay@ieee.org により追加)

  #
  # デバッグ用のログファイル。必要なければ /dev/null に変更。
  #
  logfile=/tmp/smb-print.log
  # logfile=/dev/null

  #
  # フィルタへの最後のパラメータはアカウンティング・ファイル名です。
  #   ファイル名からディレクトリ名を取り出します。
  #   これに /.config をつけて config ファイルとします。
  #
  eval acct_file=\$$#
  spool_dir=`dirname $acct_file`
  config_file=$spool_dir/.config

  # 設定ファイルに以下の変数が設定されていなければなりません：
  #   server
  #   service
  #   password
  #   user               (h.pillay@ieee.org により追加)
  eval `cat $config_file`
  #
  # デバッグ用のヘルプ。 大きさを変えたくなければ >> を > に変更。
  #
  echo "server $server, service $service" >> $logfile

  (
  # 注 印刷時に自動 CR/LF 変換が必要であれば `echo translate' の行を追加。
          echo translate
          echo "print -"
          cat
  ) | /usr/local/samba/bin/smbclient "\\\\$server\\$service" $password
  -U $user -N -P >> $logfile

  # /usr/local/samba/bin/smbprint の終わり

  2.5.  tip

     Rick Bressler からのヒントです:
        とても良い tip ですね。私もほとんど同様に使っています。さて私か
        らも tip を一つ。以下のような設定はあまり良くありません：

          :lp=/dev/null:\

     lpr は lp= として指定したファイルを '排他的' にオープンします。これ
     はマルチプロセスがプリンターへ同時に印刷しようとするのを避けるため
     です。

     この副作用としてあなたの環境では、eng と colour は同時に印刷できま
     せん（（lpr 経由のは）あっという間に印刷されますし、（smbclient 経
     由のは）気づかないうちにキューされちゃいますから、通るように見える
     でしょうけど。）しかし、/dev/null に書き込もうとする他のプロセスは
     すべて中断してしまいます。

     シングルユーザーシステムでは大きな問題にはならないでしょう。わたし
     の所には 50 を超えるプリンターを接続したシステムがあります。この環
     境では問題となります。

     解決策はそれぞれにダミープリンターを作成することです。例：touch
     /dev/eng

  著者は Rick の教えに従い、上記の printcap ファイルの lp エントリを変更
  し、以下のようにしました：

       #touch /dev/eng
       #touch /dev/colour

  最前線からの tip をありがとう、Rick！

  3.  あとがき

  成功への道：

  lpr で直接印刷するのと smbprint を経由して印刷するのが printcap で統一
  的に扱えてしまうのが非常に驚きです。また、カラー印刷が一発で成功してし
  まったのが最高に嬉しいです。一流プログラマー達に賞賛を！

  質問？メールを私に送って下さい。

  3.1.  日本語訳について

  [協力：Linux-JF プロジェクト] [翻訳：吉峯 幸郎,
  yoshimin@ms.civilnet.com.tw]

