#!/bin/sh -x # # $NetBSD: smbprint,v 1.1 2001/06/08 21:19:18 dent Exp $ ( PATH=/usr/local/bin:/usr/pkg/sbin:/usr/pkg/bin:/usr/sbin:/usr/bin:/bin:/sbin # Ce script est un filtre pour l'impression printcap sur une machine Unix. # Il utilise le programme smbclient pour imprimer le fichier sur le # serveur et service smb specifie. # L'entree printcap peut ressembler a ceci : # # lp|lufer|hplj4:\ # :mx#0:sh:lp=/dev/null:sd=/var/spool/lpd/lufer:\ # :af=/etc/lpd/lufer/acct:if=/usr/local/bin/smbprint: # # # c'est ˆ dire une imprimante Unix appelee "lp", "lufer" et "hplj4" # qui imprime grace au present script. Vous devrez creer le repertoire # /var/spool/lpd/lufer avec les permissions et proprietaire appropries. # # Vous devrez, pour que cela fonctionne, ajouter des informations sur # l'imprimante dans /etc/lpd/lufer/config. Voici ce que contient le mien : # # server=lufer # service=hp # password= # device=ljet4 # gs_options=-r300x300 # # C'est a dire : # # "server" - le nom smb de l'ordinateur connecte a l'imprimante. Il sera # donne a nslookup pour trouver l'adresse IP correspondante. # la machine peut ainsi etre configuree par DHCP. Notez qu'elle # doit etre sur le meme sous reseau puisque nslookup n'utilise # que les paquets WINS broadcast, sans indication differente. # # "service" - nom du service d'impression sur la machine distante. # # "password" - generalement vide. Certains systemes demandent un mot de # passe. # # "device" - le pilote GostScript a utiliser. Les impressions doivent donc # se faire en PostScript. Si vous ne donnez pas device= ou si # vous donnez "ps", aucune transformation ne sera effectuee # (utile si l'imprimante est reellement PostScript ou si vous # voulez directement envoyer de l'ASCII). # # "gs_options" - Toute autre option a donner a GhostScript. Dans mon cas, # je force la resolution a 300x300, au lieu de 600x600 par defaut # que donne le pilote ljet4 car ma Laserjet 4L ne gere pas plus. # # # Fichier de debogage. Mettez /dev/null si vous preferez. Utile quand les # choses ne se passent pas correctement. # logfile=/tmp/smb-print.log #logfile=/dev/null echo $0 $* # # Le dernier param du filtre est le fichier de gestion. Extraction # du repertoire a partir de son nom. # Concatenation avec /config pour avoir le fichier de config. # eval acct_file=\$$# spool_dir=`dirname $acct_file` config_file=$spool_dir/config # On y lit les variables suivantes : # server # service # password # device (pour GhostScript. Si vide ou "ps", ne pas utiliser GhostScript) # gs_options (options gs supplementaires, par ex -r300x300) eval `cat $config_file` echo "serveur $server, echo IP serveur $sIP service $service peripherique $device options $gs_options" ( # NOTE vous pouvez ajouter "echo transformation" si vous voulez une # transformation CR/LF automatique lors de l'impression. # echo transformation if [ "$device" = "" -o "$device" = "ps" ] then cat else echo Commande: 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 # Mettez le nom de fichier ci-dessous a /dev/null si vous ne voulez pas # surcharger le fichier log. C'est utile pour resoudre les problemes # et ca ne prend pas trop de place. ) >/tmp/smb-print.log 2>&1