/tea4cups

clone of svn repo. cups backend for pre and post processing of jobs

Primary LanguagePythonGNU General Public License v2.0GPL-2.0

# $Id$

Tea4CUPS : Tee for CUPS

(c) 2005-2009 Jerome Alet <alet@librelogiciel.com>
(c) 2005 Peter Stuge <stuge-tea4cups@cdy.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

=============================================================================

Tea4CUPS resembles the *nix command 'tee', but is a CUPS backend.

Tea4CUPS behaves just like any other CUPS backend, but allows you to
modify print jobs' datas as they pass through it and to transparently
send them to any number of outputs : other CUPS backends, files or pipes.

This for example allows you to output the same print job on several
printers at the same time, which is not possible with CUPS.

Another possibility would be for example to send the same document to
a printer, a PDF generator, a Fax, and as an attachment to an email
message, all of this by printing it a single time.

Tea4CUPS allows this by permitting you to easily plug your own
commands into the very last stage of CUPS' filtering chain.

Tea4CUPS provides three ways to launch commands :

        - filters : A filter can modify the input datas before they
                    are sent to the printer or made available to
                    the pre and post hooks defined below.
                    Currently a single filter can be defined
                    per print queue.

        - prehooks : these are guaranteed to be launched before the
                     print job is sent to the real printer.
                     Any prehook which exits -1 can cancel the
                     print job. Any number of prehooks can be
                     defined for a particular print queue.

        - posthooks : these are guaranteed to be launched after the
                      print job has been sent to the real printer,
                      unless the job was previously cancelled by a
                      prehook. Any number of posthooks can be
                      defined for a particular print queue.

To help your own commands, Tea4CUPS makes available as part of the
environment several variables which can be used from the
commands you use in pre and post hooks :

        TEAPRINTERNAME : The print queue name.
        TEADIRECTORY : Tea4CUPS output directory.
        TEADATAFILE : Full name of Tea4CUPS work file (in $TEADIRECTORY).
        TEAJOBSIZE : Job's size in bytes.
        TEAMD5SUM : MD5 sum of the job's datas.
        TEACLIENTHOST : Client's hostname or IP address.
        TEAJOBID : Job's Id.
        TEAUSERNAME : Name of the user who launched the print job.
        TEATITLE : Job's title.
        TEACOPIES : Number of copies requested.
        TEAOPTIONS : Options of the print job.
        TEAINPUTFILE : Print job's data file or empty when job read from stdin.
        TEABILLING : Job's billing code (lp -o job-billing=SomeCode file.ps)
        TEACONTROLFILE : Job's IPP message file (usually /var/spool/cups/c?????)
        TEASTATUS : Original CUPS backend's exit code : ONLY AVAILABLE FROM
                    posthooks, obviously.

        None of these environment variables is available to filters.

NB : Tea4CUPS requires a version of Python >= 2.3

=============================================================================

Installation :
--------------

  0 - Download Tea4CUPS from :

        http://www.pykota.com/software/tea4cups

      and extract it :

        $ tar -zxf tea4cups-x.yy.tar.gz

        where x.yy is Tea4CUPS' version number.

  1 - Copy the 'tea4cups' command into CUPS' backend directory,
      for example :

        $ cp tea4cups /usr/lib/cups/backend

      If you use CUPS v1.2 or higher you must do this as well :

        $ chown root.root /usr/lib/cups/backend/tea4cups
        $ chmod 700 /usr/lib/cups/backend/tea4cups

  2 - Restart CUPS in order for this new backend to be detected.
      NB : For this to work you need CUPS 1.1.15 or higher.
      You can use Tea4CUPS with older versions if you want, but
      without autodetection.

  3 - Either from CUPS' web interface, add new printers with
      'Tea4CUPS managed' in front of the device's name.

      Or by directly modifying CUPS' printers.conf file, or with
      the lpadmin command line tool, just prepend each DeviceURI
      value with 'tea4cups://'. If you modified printers.conf
      directly instead of using lpadmin then don't forget to
      restart CUPS.
      (Use this last method if autodetection doesn't work because
      the version of CUPS you use is too old)

  4 - Copy tea4cups.conf into CUPS' configuration directory (where
      cupsd.conf resides) :

        $ cp tea4cups.conf /etc/cups/

  5 - Modify tea4cups.conf to suit your needs. Several examples
      are included.

  6 - There's no 6 !

=============================================================================

Troubleshooting :
-----------------

  1 - Set "LogLevel debug2" and "MaxLogSize 0" in CUPS' cupsd.conf

  2 - Restart CUPS.

  3 - Set "debug: yes" in the [global] section of tea4cups.conf

  4 - Print something on a print queue managed
      by Tea4CUPS.

  5 - Look at CUPS' error_log file for diagnostic and error messages.

=============================================================================

CUPS (Common UNIX(r) Printing System) is trademark property of Easy Software
Products.

You can download CUPS from :

        http://www.cups.org

=============================================================================

Please report any problem to the bug tracker at http://trac.pykota.com