Hallo, On Oct 17 11:50 Jens Strohschnitter wrote:
zweck der ganzen Übung ist, dass ein Druckjob vor dem Ausdruck von einem Skript angepasst und dann auf einem anderen System (HP-UX) gedruckt werden soll.
Klingt sehr abenteuerlich, aber bis Dato war es so, dass wir einen Ausdruck aus SAP, dass auf einem SuSE SLES8 lief mittels LPRng erzeugten, die erzeugten Spooldateien dann aus dem lpd-Verzeichnis auf die HP-UX-Maschine übertragen und dort dann nach der Anpassung ausgedruckt haben.
Nachdem wir das SuSE SLES8 auf SLES10 migriert hatten, wurde CUPS statt LPRng verwendet. Und dort klappte der beschriebene Weg nicht mehr.
D.h. das was von SAP kommt, wird nur mit dem Script für HP-UX angepasst (also ohne die normalerweise übliche CUPS Filterkette) und dann an HP-UX geschickt. Das Script ist also etwas, was men bei LPRng als "if" (Input Filter) in /etc/printcap eingetragen hätte. Der passende Ersatz dafür bei CUPS ist das sog. "System V style interface script", siehe "man filter", "man lpadmin" und http://de.opensuse.org/SDB:Selbst_erstellte_Filter_zum_Ausdruck_mit_CUPS Jegliche Filter bei CUPS (also auch ein "System V style interface script") müssen die Kommandozeilenparameter gemäß "man filter" verarbeiten können. Insbes. ist argv[6] entweder leer, dann kommt die Eingabe via stdin oder es ist nicht leer, dann enthält es den Namen der (Spool)-Datei von wo die Eingabe gelesen werden muß. Die Weiterleitung der fertig angepassten Daten an HP-UX macht das sog. CUPS "Backend". Je nachdem wie HP-UX Daten annehmen kann, nimmt man normalerweise eines der fertigen Backends, siehe http://de.opensuse.org/SDB:CUPS_in_aller_K%C3%BCrze "Die Backends" oder für Spezialfälle kann man sich auch eines selbermachen, siehe "man backend", z.B. wie aus einer anderen Mail vor mir: ======================================================================== Here a very simple example for a selfmade "LP0" backend for the parallel port whith everything hardcoded in the backend and a possible (but unlikely) race condition: ---------------------------------------------------------------------- #! /bin/bash # see the "CUPS Software Programmers Manual": # "Writing Filters" and "Writing Backends" # and see the man page "man backend". # debug info in /var/log/cups/error_log set -x # output "Device Discovery" information on stdout if test "$#" = "0" then echo 'direct LP0:/dev/lp0 "Unknown" "lp0 device"' exit 0 fi # have the input at fd0 (stdin) in any case if test -n "$6" then exec <"$6" fi # infinite retries to access the device until cat /dev/null >/dev/lp0 do echo 'INFO: cannot access /dev/lp0 - retry in 30 seconds' 1>&2 sleep 30 done echo 'INFO: sending the data to /dev/lp0' 1>&2 # forward the data from stdin to the device if cat - >/dev/lp0 then echo 'INFO:' 1>&2 exit 0 else echo 'ERROR: failed to send the data to /dev/lp0' 1>&2 exit 1 fi ---------------------------------------------------------------------- Place it with file name "LP0" (i.e. what the "Device Discovery" information shows) in the directory where the other backends are with same owner, group and permissions as the other backends. Restart cupsd and verify with "lpinfo -v" that the cupsd has recognized the new backend "LP0". ======================================================================== Gruß Johannes Meixner -- SUSE LINUX Products GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany AG Nuernberg, HRB 16746, GF: Markus Rex