backend(7)



NAME

   backend - cups backend transmission interfaces

SYNOPSIS

   backend
   backend job user title num-copies options [ filename ]

   #include <cups/cups.h>

   const char *cupsBackendDeviceURI(char **argv);

   void cupsBackendReport(const char *device_scheme,
                          const char *device_uri,
                          const char *device_make_and_model,
                          const char *device_info,
                          const char *device_id,
                          const char *device_location);

   ssize_t cupsBackChannelWrite(const char *buffer,
                                size_t bytes, double timeout);

   int cupsSideChannelRead(cups_sc_command_t *command,
                           cups_sc_status_t *status, char *data,
                           int *datalen, double timeout);

   int cupsSideChannelWrite(cups_sc_command_t command,
                            cups_sc_status_t status, const char *data,
                            int datalen, double timeout);

DESCRIPTION

   Backends  are  a  special type of filter(7) which is used to send print
   data to and discover different devices on the system.

   Like filters, backends must be capable of reading from  a  filename  on
   the command-line or from the standard input, copying the standard input
   to a temporary file as required by the physical interface.

   The command name (argv[0]) is set to the device URI of the  destination
   printer.  Authentication  information in argv[0] is removed, so backend
   developers  are  urged  to  use  the  DEVICE_URI  environment  variable
   whenever     authentication     information     is     required.    The
   cupsBackendDeviceURI() function may be used  to  retrieve  the  correct
   device URI.

   Back-channel  data from the device should be relayed to the job filters
   using the cupsBackChannelWrite function.

   Backends are responsible for reading side-channel  requests  using  the
   cupsSideChannelRead()     function     and    responding    with    the
   cupsSideChannelWrite() function. The CUPS_SC_FD  constant  defines  the
   file descriptor that should be monitored for incoming requests.

   DEVICE DISCOVERY
   When  run  with  no  arguments, the backend should list the devices and
   schemes it supports or is  advertising  to  the  standard  output.  The
   output  consists  of  zero  or  more  lines  consisting  of  any of the
   following forms:

       device-class scheme "Unknown" "device-info"
       device-class device-uri "device-make-and-model" "device-info"
       device-class device-uri "device-make-and-model" "device-info" "device-id"
       device-class device-uri "device-make-and-model" "device-info" "device-id" "device-location"

   The cupsBackendReport() function can be used to  generate  these  lines
   and handle any necessary escaping of characters in the various strings.

   The device-class field is one of the following values:

   direct
        The  device-uri  refers to a specific direct-access device with no
        options, such as a parallel, USB, or SCSI device.

   file The device-uri refers to a file on disk.

   network
        The device-uri refers to a networked device and  conforms  to  the
        general form for network URIs.

   serial
        The  device-uri  refers  to a serial device with configurable baud
        rate and other options. If the device-uri contains a  baud  value,
        it represents the maximum baud rate supported by the device.

   The  scheme  field  provides  the  URI  scheme that is supported by the
   backend. Backends should use this form only when the  backend  supports
   any  URI using that scheme. The device-uri field specifies the full URI
   to use when communicating with the device.

   The device-make-and-model field specifies the make  and  model  of  the
   device, e.g. "Example Foojet 2000". If the make and model is not known,
   you must report "Unknown".

   The  device-info  field  specifies  additional  information  about  the
   device.  Typically this includes the make and model along with the port
   number or network address, e.g. "Example Foojet 2000 USB #1".

   The optional device-id field specifies the IEEE-1284 device  ID  string
   for the device, which is used to select a matching driver.

   The  optional  device-location field specifies the physical location of
   the device, which is often used to  pre-populate  the  printer-location
   attribute when adding a printer.

   PERMISSIONS
   Backends without world read and execute permissions are run as the root
   user. Otherwise, the backend is run using an unprivileged user account,
   typically "lp".

EXIT STATUS

   The following exit codes are defined for backends:

   CUPS_BACKEND_OK
        The  print  file  was  successfully  transmitted  to the device or
        remote server.

   CUPS_BACKEND_FAILED
        The print file was not successfully transmitted to the  device  or
        remote server. The scheduler will respond to this by canceling the
        job, retrying the job, or stopping  the  queue  depending  on  the
        state of the printer-error-policy attribute.

   CUPS_BACKEND_AUTH_REQUIRED
        The  print  file  was  not  successfully transmitted because valid
        authentication information is required. The scheduler will respond
        to  this  by  holding  the  job  and  adding  the  'cups-held-for-
        authentication'  keyword  to  the  "job-reasons"  Job  Description
        attribute.

   CUPS_BACKEND_HOLD
        The  print file was not successfully transmitted because it cannot
        be printed at this time. The scheduler will  respond  to  this  by
        holding the job.

   CUPS_BACKEND_STOP
        The  print file was not successfully transmitted because it cannot
        be printed at this time. The scheduler will  respond  to  this  by
        stopping the queue.

   CUPS_BACKEND_CANCEL
        The  print  file  was  not successfully transmitted because one or
        more attributes are not supported or the job was canceled  at  the
        printer. The scheduler will respond to this by canceling the job.

   CUPS_BACKEND_RETRY
        The  print  file  was  not  successfully  transmitted because of a
        temporary issue. The scheduler will retry the job at a future time
        - other jobs may print before this one.

   CUPS_BACKEND_RETRY_CURRENT
        The  print  file  was  not  successfully  transmitted because of a
        temporary issue. The scheduler  will  retry  the  job  immediately
        without allowing intervening jobs.

   All other exit code values are reserved.

ENVIRONMENT

   In  addition  to  the  environment  variables  listed  in  cups(1)  and
   filter(7), CUPS backends can expect the following environment variable:

   DEVICE_URI
        The device URI associated with the printer.

FILES

   /etc/cups/cups-files.conf

NOTES

   CUPS backends are not generally designed to  be  run  directly  by  the
   user.  Aside  from  the  device  URI  issue  (  argv[0]  and DEVICE_URI
   environment variable contain the device URI), CUPS backends also expect
   specific  environment variables and file descriptors, and typically run
   in a user session that (on  macOS)  has  additional  restrictions  that
   affect  how  it  runs.  Backends  can also be installed with restricted
   permissions (0500 or 0700) that tell the scheduler to run them  as  the
   "root"  user  instead  of  an unprivileged user (typically "lp") on the
   system.

   Unless you are a developer and know what you are doing, please  do  not
   run  backends  directly.  Instead,  use the lp(1) or lpr(1) programs to
   send print jobs or lpinfo(8) to query for available printers using  the
   backend.  The  one exception is the SNMP backend - see cups-snmp(8) for
   more information.

SEE ALSO

   cups(1), cups-files.conf(5), cups-snmp(8), cupsd(8), filter(7),  lp(1),
   lpinfo(8), lpr(1),
   CUPS Online Help (http://localhost:631/help)

COPYRIGHT

   Copyright  2007-2016 by Apple Inc.




Free and Open Source Software


Free Software Video

Useful Programs

Free Online Courses

Open Opportunity

Open Business