Date: Wed, 1 Jun 2005 09:11:07 +0700 (ICT) From: Olivier Nicole <on@cs.ait.ac.th> To: roldanlg@yahoo.es Cc: freebsd-questions@freebsd.org Subject: Re: printing Message-ID: <200506010211.j512B7uT073953@banyan.cs.ait.ac.th> In-Reply-To: <20050601010854.234.qmail@web25605.mail.ukl.yahoo.com> (message from =?iso-8859-1?q?Rold=E1n?= on Wed, 1 Jun 2005 03:08:54 %2B0200 (CEST)) References: <20050601010854.234.qmail@web25605.mail.ukl.yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> > > how can i print a document in a windows shared > > > > I do that using samba, only samba client is needed. > > > > Olivier > > > can you explaime how? 0) I installed samba from the ports /usr/ports/net/samba 1) I have a shared printer on my windows machine, the printer share is named APPLE, as I use win2k, the printer is accessible to the user "printer", the win2k machine name is "olivier". I set-up a password to protect my win2k printer. For win98, it would be the same, but there is not user. 2) I create an entry in /etc/printcap, the entry is like: # printers attached to users machine (Windows) on-printer:\ :sd=/var/spool/on-printer:\ :mx=0:rs:sh:\ :lp=/dev/null:\ :if=/usr/spool/smb-printer: 3) I create the directory /var/spool/on-printer 4) I create the configuration file /var/spool/on-printer/.config that contains (please put the password as defined in 1): server = olivier service = APPLE password = ******* user = printer domain = olivier Note that server and domain are the same! 5) I installed the script /usr/spool/smb-printer. This script works for win98 and win2k. It does a little bit of file coding, changing CR into CRLF for the files that are not PostScript or PCL. #!/usr/bin/perl require "flush.pl"; ## $logfile="smb-print.log"; ## # or $logfile=/dev/null; $logfile="/dev/null"; ## ## open LOG, ">>$logfile"; ## print LOG `/bin/ls -a`; ## for ($i=0; $i<=$#ARGV; $i++) { ## print LOG "$ARGV[$i]\n"; ## } $loggererr="/usr/bin/logger -i -t print_quota -p lpr.err"; $loggerinfo="/usr/bin/logger -i -t print_quota -p lpr.info"; $mess="SMB print job: -wd ".`pwd`; for ($i=0; $i<=$#ARGV; $i++) { $mess.="$ARGV[$i] "; } # read the config file # the config file should consist of: # # server=servername # service=printername # password=something (be omitted if empty) # open IN, ".config"; $password=""; while (<IN>) { chop; s/\s*//g; @t=split /=/; $ar{$t[0]}=$t[1]; } close IN; #print LOG `ps auwx|grep perl`; # read standard input and try to guess if we have a PCL or PostScript file # or just plain text # in case of plain text, we should translate CR-> CR/LF # and add a ctrl-l at the end # open IN, "-"; $l=<IN>; $t=0; $t=1 unless $l=~/^(\\%.*\@PJL)|(%!PS)/; $l=~s/([^\r])?\n/$1\r\n/g if $t; #print LOG "$t\n"; $command="|/usr/local/bin/smbclient \"//$ar{'server'}/$ar{'service'}\" "; if (exists $ar{user}) { # we are in Win NT world $command.="-U \"$ar{'user'}\%$ar{'password'}\" -W \"$ar{'domain'}\""; } else { # we are in win 9x world $command.="\"$ar{'password'}\""; } $command.=" -N >>$logfile"; #$command.=" -N -P >>$logfile"; # hide the user and password for the LOG $obf=$command; $obf=~s/[\w]+%[\w]+/****%****/; $mess.="$obf"; open SMB, "$command"; print SMB "print -\n"; print SMB $l; while (<IN>) { s/([^\r])?\n/$1\r\n/g if $t; print SMB $_; $last=$_; } print SMB "" if $t && $last!~/\r\n$/; close IN; flush(SMB); close SMB; system "$loggerinfo \'$mess\'";
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200506010211.j512B7uT073953>