#!/bin/sh -x # # $NetBSD: smbprint,v 1.1 2007/06/09 11:33:52 dsieger Exp $ # # ( PATH=/usr/local/bin:/usr/pkg/sbin:/usr/pkg/bin:/usr/sbin:/usr/bin:/bin:/sbin # このスクリプトは unix マシンから印刷する printcap 用の入力フィルター # です。smbclient プログラムを使い、指定された smb ベースのサーバーと # サービスでファイルの印刷をおこないます。 # 例えば、以下のようなエントリーを printcap に定義している場合、 # #lp|lufer|hplj4:\ # :mx#0:sh:lp=/dev/null:sd=/var/spool/lpd/lufer:\ # :af=/etc/lpd/lufer/acct:if=/usr/local/bin/smbprint: # # # 上のエントリーは、このスクリプトを使い印刷をおこなう unix プリンター # 「lp」、「lufer」、「hplj4」を定義しています。適切なパーミッションと # オーナーでスプールディレクトリー /var/spool/lpd/lufer を作成する必要 # があります。 # # これを動作させるために、いくつかのプリンター関連の情報を # /etc/lpd/lufer/config に設定する必要があります。以下は、私の設定です: # # server=lufer # service=hp # password= # device=ljet4 # gs_options=-r300x300 # # 意味: # # "server" - プリンターが接続されているマシンの smb 名。マシンの IP アドレス # を調べるために nmblookup にわたされます。したがって、マシンが # DHCP を使用するように設定されていても問題ありません。特に設定 # していなければ、nmblookup は、ブロードキャスト WINS パケット # だけを使用するので、マシンは同じサブネット上に存在しなければ # ならない事に注意してください。 # # "service" - リモートマシン上のプリンターサービスの名前。 # # "password" - 通常は設定する必要がありませんが、パスワードが必要なシステムも # あるかもしれません。 # # "device" - GhostScript のデバイスドライバーが使用するデバイス。入力は # ポストスクリプトだと仮定されています。もし、device= を設定 # しない、あるいは ps を指定した場合は、変換はおこなわれません。 # (プリンターが本当の PostScrip デバイスの場合、あるいは ASCII # テキストをそのままプリンターに送信したい場合に役に立ちます) # # "gs_options" - その他の GhostScript のオプション。私の場合、強制的に # 300x300 の解像度を指定する必要があります。これは、ljet4 # デバイスドライバーのデフォルトが 600x600 なのに、私の # Laserjet 4L が 300x300 の解像度しかサポートしていないからです。 # # # ログファイルのデバッグをおこなう時は、/dev/null を適当なファイルに # 変更してください。うまく動作しない時には役に立ちます。 # logfile=/tmp/smb-print.log #logfile=/dev/null echo $0 $* # # このフィルターにわたされる最後のパラメーターは、アカウンティング # ファイル名です。ファイル名からディレクトリー名をとりだします。 # 設定ファイルを取得するために、それと /config を連結します。 # eval acct_file=\$$# spool_dir=`dirname $acct_file` config_file=$spool_dir/config # 以下の変数を設定ファイルから読みこむ必要があります: # server # service # password # device (GhostScript用。未指定、又は「ps」の場合、GhostScript を使いません) # gs_options (その他の gs オプション、例えば -r300x300 のような) eval `cat $config_file` echo "server $server, echo server IP $sIP service $service device $device options $gs_options" ( # 注意 印刷時に自動的に CR/LF の変換をおこないたい場合は、「echo translate」 # という行を追加してください。 # echo translate if [ "$device" = "" -o "$device" = "ps" ] then cat else echo Command: gs -q -sDEVICE=$device $gs_options -sOutputFile=- - -c quit >> $logfile gs -q -sDEVICE=$device $gs_options -sOutputFile=- - -c quit fi ) | smbclient "\\\\$server\\$service" $password -U $server -N -c 'print -' >> $logfile # 便利なセッションログを保存したくない場合は、以下のファイル名を /dev/null # に変更してください。このファイルは問題のデバッグに役に立ちますし、 # ディスク容量もそれほど必要としません。 ) >/tmp/smb-print.log 2>&1