Linux Print2Win mini-HOWTO Harish Pillay, June 7 1996 吉峯 幸郎, 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]