Newbie lpd printing
Malcolm Kay
Malcolm.Kay at internode.on.net
Thu Apr 24 08:02:18 PDT 2003
On Thu, 24 Apr 2003 11:13, Gary Schenk wrote:
> On Wednesday 23 April 2003 12:55 am, Malcolm Kay wrote:
> > Until now I thought you had solved your printer problem. Some more
> > information would probably help:
> > Which Epson printer do you have -- is it an inkjet? -- which particular
> > model.
>
> That Epson was an old junker that was just for experimenting. The quality
> was very poor, and I've replaced it with a HP 6122.
>
> > Do you have ghostscript installed? Aladdin or Gnu?
>
> Gnu.
>
> > With this information we can possibly fix the filter script for you.
> >
> > A relatively simple filter switching between plain text and postscript
> > should be fairly simple to implement if your printer is supported by
> > ghostscript.
>
> That was the impression I got from my research. The script befuddles me, as
> I got it from two very good sources. I realize that I need to learn shell
> programming, and I am working on that, but I have a real need to print
> now.
>
You might find it worthwhile to look at:
http://www.linuxprinting.org/show_printer.cgi?recnum=HP-DeskJet_6122
The site is written with linux in mind but most applies just as well to
FreeBSD.
It would seem that the simplest way to get something out from a postscript
source is to use (more or less) the script you found in the handbook with
some change in the options for 'gs'. The simplest seems to be to set
-sDEVICE=cdj970
The appears to be an error in the version in the hand book ->
#!/bin/sh
#
# ifhp - Print Ghostscript-simulated PostScript on a DESKJET 6122
# Installed in /usr/local/libexec/hpif
#
# Treat LF as CR+LF:
# (I don't know whether this works or needed for the 6122)
printf "\033&k2G" || exit 2
#
# Read first two characters of the file
#
read first_line
first_two_chars=`expr "$first_line" : '\(..\)'`
if [ "$first_two_chars" = "%!" ]; then
#
# It is PostScript; use Ghostscript to scan-convert and print it.
#
# Note that PostScript files are actually interpreted programs,
# and those programs are allowed to write to stdout, which will
# mess up the printed output. So, we redirect stdout to stderr
# and then make descriptor 3 go to stdout, and have Ghostscript
# write its output there. Exercise for the clever reader:
# capture the stderr output from Ghostscript and mail it back to
# the user originating the print job.
#
exec 3>&1 1>&2
/usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=cdj970 \
-sOutputFile=/dev/fd/3 - && exit 0
# The next line seems to have been retained in error
# /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=cdj970 \
# -sOutputFile=- - && exit 0
else
#
# Plain text or HP/PCL, so just print it directly; print a form feed
# at the end to eject the last page.
# (the FF code may not be correct for this printer)
# (The code "\014" is more nearly universal)
echo $first_line && cat && printf "\033&l0H" &&
exit 0
fi
exit 2
I don't know what the default resolution will be -- if it is high the
ghostscript conversion and data transfer could be quite slow and you
may like to try a resolution reduction with the option -r600 or -r300
although just what effect this will have depends somewhat on the device
and I have no experience with the 6122.
For better results you should use -sDEVICE=ijs but then you'll need to specify
a number of other options. Take a look at ->
file://localhost/usr/local/share/ghostscript/6.52/hpijs/hpijs_readme.html
using your favourite browser. I think you'll find hpijs is already installed
in /usr/local/bin.
You might note that outputs passed directly from stdout to the print queue
are rejected by default if they get to be too big -- which is not unlikely if
pictures are included. This can be avoided by adding ':mx#0' to the printcap
entry for the printer.
Malcolm
More information about the freebsd-questions
mailing list