Re: Drucken unter FreeBSD

From: J Wunsch <j(at)uriah.heep.sax.de>
Date: Sun, 15 Mar 1998 21:31:12 +0100

As Dominik Brettnacher wrote:

> Wie sieht es eigentlich mir Drucken unter FreeBSD aus? Ich hab einen
> uralten Epson LQ-850, was kann ich mit dem anfangen?

Postscript ausdrucken, was sonst? :-)

Im Ernst, ich habe meinen LQ-850 erst vor kurzem in den Ruhestand
geschickt. Angesichts seiner Grafikgeschwindigkeit würde ich nicht
unbedingt dazu raten, alles via Postscript und apsfilter abzuwickeln,
wie man das bei allen modernen Druckern problemlos empfehlen kann.

Ich hatte für den LQ-850 einen Sack voll logischer Drucker. Einen für
raw stuff (1:1 Filter), einen für Postscript (ghostscript in der Pipe
mit den entsprechenden Parametern), und ein halbes Dutzend, die zuvor
verschiedene ESC-Folgen an den Drucker geschickt haben für die
Schriftarteinstellung. Die hießen dann lp10, lp12, lp15 und lp20
(10/12/15/20 dpi). Ich glaube, einen für LQ hatte ich auch noch, kann
aber auch sein, daß der lp10 das automatisch mit gemacht hat.

Mit dem lp20 konnte man zusammen mit ``pr -2 ...'' auch mühelos
zweispaltig drucken.

Hier sind meine alten lpr-Filter und die alte /etc/printcap. Wie Du
siehst, werden die Parameter des Textfilters über pl# und pw#
gesteuert. Vorsicht, da stehen ESC's direkt als Steuerzeichen in der
Mail. (Ich werde sie daher lieber als quoted-unreadable schicken.)

lp|lp12|Standard line printer 12 cpi:\
        :if=/usr/local/libexec/lpr/textfilter:lf=/var/log/lpd-errs:\
        :vf=/bin/cat:\
        :sh:lp=/dev/lp:sd=/var/spool/lpd/lp12:pl#96:pw#96:px#1440:py#2100:mx#0:
lq|Letter quality printer (180 dpi grafx):\
        :if=/usr/local/libexec/lpr/textfilter:lf=/var/log/lpd-errs:\
        :vf=/bin/cat:\
        :sh:lp=/dev/lp:sd=/var/spool/lpd/lq:pl#72:pw#80:px#1440:py#2100:mx#0:
lp15|Draft printer 15cpi:\
        :if=/usr/local/libexec/lpr/textfilter:lf=/var/log/lpd-errs:\
        :vf=/bin/cat:\
        :sh:lp=/dev/lp:sd=/var/spool/lpd/lp15:pl#96:pw#120:px#1440:py#2100:mx#0:
lp10|Draft printer 10cpi:\
        :if=/usr/local/libexec/lpr/textfilter:lf=/var/log/lpd-errs:\
        :vf=/bin/cat:\
        :sh:lp=/dev/lp:sd=/var/spool/lpd/lp10:pl#96:pw#80:px#1440:py#2100:mx#0:
lp20|Draft printer 20cpi:\
        :if=/usr/local/libexec/lpr/textfilter:lf=/var/log/lpd-errs:\
        :vf=/bin/cat:\
        :sh:lp=/dev/lp:sd=/var/spool/lpd/lp20:pl#96:pw#160:px#1440:py#2100:mx#0:
PS|ps|PostScript printer:\
        :if=/usr/local/libexec/lpr/psfilter:\
        :sh:lp=/dev/lp:sd=/var/spool/lpd/ps:pl#72:pw#80:px#1440:py#2100:mx#0:
raw|Raw printer:\
        :if=/bin/cat:\
        :sh:lp=/dev/lp:sd=/var/spool/lpd/raw:pl#72:pw#80:px#1440:py#2100:mx#0:

/usr/local/libexec/lpr/textfilter:

#!/bin/sh
#
# Textfilter (`if' printcap entry) for lpd service
#
PATH=/bin:/usr/bin

USAGE="usage: textfilter [-c] -w width -l length -i indent -n login -h host [acctfile]"
COPT=0
WIDTH=-1
LENGTH=-1
INDENT=-1
LOGIN=""
HOST=""
ACCTFILE=""
phase="opts"
remjob="false"

###echo "$*" 1>&2

set -- `getopt cw:l:i:n:h: $*`

if [ $? != 0 ] ; then
        echo $USAGE 1>&2
        exit 2
fi

for i in $*
do
        case $i in
        -c)
                COPT=1
                shift
                ;;

        -w)
                WIDTH=$2
                shift 2
                ;;

        -l)
                LENGTH=$2
                shift 2
                ;;

        -i)
                INDENT=$2
                shift 2
                ;;

        -n)
                LOGIN="$2"
                shift 2
                ;;

        -h)
                HOST="$2"
                shift 2
                ;;

        --)
                phase="posargs"
                shift
                ;;

        esac
done

if [ -z "$LOGIN" -o -z "$HOST" -o $phase != posargs -o $# -gt 1 ] ; then
        echo $USAGE 1>&2
        exit 2
fi

if [ $# -eq 1 ] ; then
        ACCTFILE=$*
fi

if [ $COPT -eq 1 ] ; then
        # simply shortcut it
        cat
else
        echo -n "@"
        if [ -n "$INDENT" -a $INDENT -ne 0 ] ; then
                awk 'BEGIN {printf "\033l%c", '$INDENT'; exit}'
        fi

        if [ -n "$LENGTH" ] ; then
                if [ $LENGTH -le 72 ] ; then
                        echo -n "2"
                        # assume user wants to pretty-print
                        echo -n "Pk0x1"
                else
                        echo -n "x0"
                        if [ $LENGTH -le 96 ] ; then
                                echo -n "0"
                        fi
                fi
        else
                # default: 8 lpi
                echo -n "0"
        fi
        if [ -n "$WIDTH" ] ; then
                if [ $WIDTH -le 80 ] ; then
                        # 10 cpi
                        echo -n "P"
                elif [ $WIDTH -le 96 ] ; then
                        # 12 cpi
                        echo -n "M"
                elif [ $WIDTH -le 120 ] ; then
                        # 15 cpi
                        echo -n "g"
                else
                        # 20 cpi
                        echo -n "M"
                fi
        else
                # default: 12 cpi
                echo -n "M"
        fi

        # iso8859 ==> ibm437
        #iso2ibm
        tr '\344\366\374\304\326\334\337\361\321\341\351\355\363\372\277\241' \
           '\204\224\201\216\231\232\341\244\245\240\202\241\242\243\250\255'
fi

/usr/local/libexec/lpr/psfilter:

#!/bin/sh
#
# postscript filter (`tf' printcap entry) for lpd service
#
PATH=/bin:/usr/bin:/usr/local/bin

USAGE="usage: psfilter -xwidth -ylength -n login -h host [acctfile]"
WIDTH=1440
LENGTH=-1
LOGIN=""
HOST=""
ACCTFILE=""
phase="opts"
remjob="false"

###echo "$*" 1>&2

set -- `getopt cw:l:i:x:y:n:h: $*`

if [ $? != 0 ] ; then
        echo $USAGE 1>&2
        exit 2
fi

for i in $*
do
        case $i in
        -x)
                WIDTH=$2
                shift 2
                ;;

        -y)
                LENGTH=$2
                shift 2
                ;;

        -n)
                LOGIN="$2"
                shift 2
                ;;

        -h)
                HOST="$2"
                shift 2
                ;;

        # dummies
        -w) shift 2 ;;
        -l) shift 2 ;;
        -i) shift 2 ;;
        -c) shift ;;

        --)
                phase="posargs"
                shift
                ;;

        esac
done

if [ -z "$LOGIN" -o -z "$HOST" -o $phase != posargs -o $# -gt 1 ] ; then
        echo $USAGE 1>&2
        exit 2
fi

if [ $# -eq 1 ] ; then
        ACCTFILE=$*
fi

gs -sOUTPUTFILE=- -sDEVICE=stcolor -dQUIET -dNOPAUSE -dSAFER - quit.ps

-- 
cheers, J"org
joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Received on Sun 15 Mar 1998 - 21:51:58 CET

search this site