Printserver

Der Rechner ist zunächst einmal Printserver.

Auf dem Nameserver wird ein cname Record für "!printserver" eingerichtet, welcher auf diesen separaten Rechner zeigt.

ScanStation

Der Rechner fungiert gleichzeitig als Scan-Station. Dazu wurde er mit Sane eingerichtet.

Auf dem Nameserver wird ein cname Record für "ScanStation" eingerichtet, welcher auf diesen separaten Rechner zeigt.

CopyCenter

Das CopyCenter stellt folgende Dienste zur Verfügung: Scannen, Kopieren, Faxen, Scan als E-Mail weiterleiten.

Das CopyCenter wird so eingerichtet, dass es beim Starten der Maschine automatisch verfügbar ist und auf Tastatureingaben wartet. Tastatureingaben sind soz. "polnisch" notiert: Erst kommen die Werte und dann der Operator in Form einer kurzen (i.d.R. einbuchstabigen) Zeichenkette.

Das Startscript in /etc/init.d/copycenter

case "$1" in
  start)
        /usr/local/bin/copycenter >/dev/tty1 </dev/tty1 2>&1 &
        ;;
  stop|reload|restart|force-reload)
        ;;
  *)
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

Dazu muss in /etc/inittab das erste Terminal entfernt werden:

....

#1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

....

Und hier nun /usr/local/bin/copycenter

trap ende 0 15

FAXSAMMELDIR=/var/tmp/copycenter.$$

RESOL=200
SCANCNT=0
SCANMODE=lineart
SCANCMD="scanimage -d umax:/dev/scanner --format tiff -l 0 -t 0 -x 215.9 -y 297.18 --resolution $RESOL --mode"
TOPSCMD="convert -density $RESOL tiff:- ps:-"

sw_copy() {
    SCANMODE=lineart
    $SCANCMD $SCANMODE | $TOPSCMD | lp -d canon
}

col_copy() {
    SCANMODE=color
    $SCANCMD $SCANMODE | $TOPSCMD | lp -d canon_farbe
}

stop_printing() {
    for j in `lpstat -o | awk '{print $1}'`; do
        cancel $j
    done
}

sammelfax() {
    SCANMODE=lineart
    $SCANCMD $SCANMODE | $TOPSCMD >$FAXSAMMELDIR/cc.$SCANCNT.ps
    SCANCNT=`expr $SCANCNT + 1`
}

checksammelfax() {
    test $SCANCNT -eq 0 && sammelfax
}

mail_it() {
    checksammelfax
    gs -dNOPAUSE -dBATCH -q -sDEVICE=pdfwrite -sOutputFile=- $FAXSAMMELDIR/*.ps | \
    cat >$FAXSAMMELDIR/cc.pdf
    echo "Mail vom CopyCenter - viele Gruesse  " | \
    mutt -a $FAXSAMMELDIR/cc.pdf -s "CopyCenter-Mail" `expr $1 : '\(.*\)m'`
    mksammeldir
    SCANCNT=0
}

print_it() {
    checksammelfax
    gs -dNOPAUSE -dBATCH -q -sDEVICE=pswrite -sOutputFile=- $FAXSAMMELDIR/*.ps | \
    lp -d canon
    mksammeldir
    SCANCNT=0
}

fax_it() {
    checksammelfax
    gs -dNOPAUSE -dBATCH -q -sDEVICE=pswrite -sOutputFile=- $FAXSAMMELDIR/*.ps | \
    sendfax -h faxserver -f faxmaster -n -D -i CopyCenter-Fax -d `expr $1 : '\([0-9]*\)f'`
    mksammeldir
    SCANCNT=0
}

hilfe() {
    grep ";; [#]" $0 | sed 's|[^*]*\*\([^)]*\)).*;;.*#\(.*\)|\1\t\2|' | sed 's|\[[A-Z]\([a-z]\)\]|\1|g'
}

printercleaning() {
    /usr/local/bin/tpconfig.input4cleaning >/dev/null
}

mksammeldir() {
    test -d $FAXSAMMELDIR || mkdir $FAXSAMMELDIR
    for file in $FAXSAMMELDIR/*; do
        rm -f $file
    done
}

ende() {
    test -d $FAXSAMMELDIR && rm -rf $FAXSAMMELDIR
}

mksammeldir

while read inp; do
        case $inp in
                *[Cc][Cc])  col_copy ;; # Farbkopie
                *[Cc])      sw_copy ;; # Schwarzweiss-Kopie
                *[Dd][Pp])  printercleaning ;; # Druckkopf reinigen
                *[Ff][Kk])  col_copy ;; # Farbkopie
                *[Ff])      fax_it $inp ;; # Fax an Nummer 01234567
                *[Hh])      hilfe ;; # diese Hilfe
                *[Kk])      sw_copy ;; # Schwarzweiss-Kopie
                *[Mm])      mail_it $inp ;; # verschicke Mail
                *[Pp])      print_it $inp ;; # drucke die Scansammlung
                *[Qq])      halt ;; # Rechner herunterfahren
                *[Rr])      reboot ;; # Rechner neu starten
                *[Ss][Pp])  stop_printing ;; # alle Druckauftraege stoppen
                *[Ss])      sammelfax ;; # scannen und zum Faxen ablegen
                *[Xx])      ;; # Kommando nicht ausfuehren
        esac
done

Einige Punkte sind deutlich installationsspezifisch (Scankommando, Druckkopfreinigung, ...). Direkt adaptierbar ist die Chose also nicht für beliebige Konfigurationen, aber als Ideenlieferant vielleicht brauchbar.

Wenn man "h" (wie Hilfe) drückt, dann gibt das CopyCenter folgende Informationen aus:

cc       Farbkopie
c        Schwarzweiss-Kopie
dp       Druckkopf reinigen
fk       Farbkopie
f        Fax an Nummer 01234567
h        diese Hilfe
k        Schwarzweiss-Kopie
m        verschicke Mail
p        drucke die Scansammlung
q        Rechner herunterfahren
r        Rechner neu starten
sp       alle Druckauftraege stoppen
s        scannen und zum Faxen ablegen
x        Kommando nicht ausfuehren

Nanu? Warum das "x"? Ganz einfach: Ich habe an dem Rechner keinen Monitor dran. Wenn ich also nicht sicher bin, was ich getippt habe, tippe ich "x<return>", alle Eingaben sind vergessen und ich kann von vorne anfangen.

Das Ganze ist noch nicht perfekt, insbesondere scheint mir das I/O-Handling des Shell-Scripts noch nicht sauber zu sein. Jedenfalls bleibt die Kiste das eine oder andere Mal hängen. Auch die Mailfunktionalität ist irgendwie nicht so zuverlässig, obwohl unser Mailserver als relay-Host eingetragen ist.