<!doctype linuxdoctr system>
<article>
<title>Linux Print2Win mini-HOWTO</title>
<author>Harish Pillay, &lt;h.pillay@ieee.org&gt;</author>
<date>June 7 1996</date>
<trans>吉峯 幸郎, &lt;yoshimin@ms.civilnet.com.tw&gt;</trans>
<tdate>May 24 1997</tdate>

<![IGNORE[
Linux-Print2Win-mini-HOWTO
==========================
Harish Pillay, h.pillay@ieee.org
1996-06-07

&lsqb;翻訳：吉峯 幸郎, yoshimin@ms.civilnet.com.tw&rsqb;
&lsqb;翻訳日：1997/05/24&rsqb;
--------------------------------------------------------------------
]]>


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

<sect>はじめに
<p>
著者の環境：
<itemize>
<item>最新版カーネル（pre-2.0.12)
<item>SAMBA
<item>標準 lpr ユーティリティー
<item>プリンター 2台 
  <itemize>
  <item>LexMark Optra C PS (カラー)
  <item>LexMark Optra R + PS (白黒)
  </itemize>
</itemize>


<sect>設定と使い方
<p>

<sect1>概要
<p>
以下の2つの方法で印刷可能：
<itemize>
<item>標準 <tt>lpr</tt> コマンドを使用
<item>SAMBA の <tt>smbclient</tt> のプリント機能を使用
</itemize>

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

<tt>/etc/printcap:</tt>
<tscreen><verb>
#
# 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 ファイルの終わり
</verb></tscreen>


<sect1>使い方
<p>

手順：
<itemize>
<item><tt>lpd</tt> を起動します
（ <tt>/etc/rc.d/rc.M</tt> と <tt>/etc/rc.d/rc.inet2</tt> を確認 )。
<item>lpd に対応しているプリンターであれば <tt>lpr</tt> で直接印刷できます。
<item>lpd に対応していないプリンタを Windows 95 や Windows NT のプリンタ
共有機能を通して利用する場合は SAMBA が必要です。
<item>SAMBA が正しく動作していることを確認した後、<tt>smbprint</tt>（SAMBA
に付属）スクリプトを使用して印刷します。
(http://www.nijenrode.nl/~steven/ldp/Printing-HOWTO.html参照)
</itemize>


<sect1><tt>smbprint</tt> スクリプト
<p>
以下は若干の変更を施した著者の <tt>smbprint</tt> スクリプトです：

<tt>/usr/local/samba/bin/smbprint</tt>:

<tscreen><verb>
#!/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`

#
# デバッグ用のヘルプ。 大きさを変えたくなければ &gt;&gt; を &gt; に変更。
#
echo "server $server, service $service" &gt;&gt; $logfile

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

# /usr/local/samba/bin/smbprint の終わり
</verb></tscreen>


<sect1>tip
<p>
<descrip>   
<tag>Rick Bressler からのヒントです:</tag>

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

<tscreen><verb>
:lp=/dev/null:\
</verb></tscreen>

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

この副作用としてあなたの環境では、<tt>eng</tt> と <tt>colour</tt> は同時に
印刷できません（（<tt>lpr</tt> 経由のは）あっという間に印刷されますし、
（<tt>smbclient</tt> 経由のは）気づかないうちにキューされちゃいますから、
通るように見えるでしょうけど。）しかし、<tt>/dev/null</tt> に書き込もうとする
他のプロセスはすべて中断してしまいます。
   
シングルユーザーシステムでは大きな問題にはならないでしょう。わたしの所
には 50 を超えるプリンターを接続したシステムがあります。この環境では問
題となります。

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

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

<tscreen><verb> 
#touch /dev/eng
#touch /dev/colour
</verb></tscreen>

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

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

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


<sect1>日本語訳について
<p>
&lsqb;協力：Linux-JF プロジェクト&rsqb;
&lsqb;翻訳：吉峯 幸郎, yoshimin@ms.civilnet.com.tw&rsqb;

</article>
