filter(7)


NAME

   filter - cups file conversion filter interface

SYNOPSIS

   filter job user title num-copies options [ filename ]

   #include <cups/cups.h>

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

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

   #include <cups/ppd.h>

   const char *cupsGetOption(const char *name, int num_options,
                    cups_option_t *options);

   int cupsMarkOptions(ppd_file_t *ppd, int num_options,
                       cups_option_t *options);

   int cupsParseOptions(const char *arg, int num_options,
                        cups_option_t **options);

   ppd_choice_t *ppdFindMarkedChoice(ppd_file_t *ppd, const char *keyword);

   void ppdMarkDefaults(ppd_file_t *ppd);

   ppd_file_t *ppdOpenFile(const char *filename);

DESCRIPTION

   The CUPS filter interface provides a standard method for adding support
   for new document types or printers to CUPS.  Each filter is capable  of
   converting  from  one  or more input formats to another format that can
   either be printed directly or piped into another filter to get it to  a
   printable format.

   Filters  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 file format.  All output MUST be sent to the
   standard output.  Filters MUST NOT attempt to communicate directly with
   the printer, other processes, or other services.

   The  command  name  (argv[0])  is  set  to  the name of the destination
   printer but is also available in the PRINTER environment variable.

OPTIONS

   Options are passed in argv[5] and are encoded  from  the  corresponding
   IPP   attributes   used   when   the   job   was   submitted.  Use  the
   cupsParseOptions() function to load the options  into  a  cups_option_t
   array  and  the cupsGetOption() function to get the value of a specific
   attribute.  Be careful to look for common  aliases  of  IPP  attributes
   such as "landscape" for the IPP "orientation-requested" attribute.

   Options passed on the command-line typically do not include the default
   choices  the  printer's  PPD  file.  Use  the   ppdMarkDefaults()   and
   cupsMarkOptions() functions in the CUPS library to apply the options to
   the PPD defaults and map any IPP attributes to  the  corresponding  PPD
   options.  Use ppdFindMarkedChoice() to get the user-selected choice for
   a PPD option. For example, a filter might use  the  following  code  to
   determine the current value of the Duplex PPD option:

       ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
       cups_option_t *options = NULL;
       int num_options = cupsParseOptions(argv[5], 0, &options);

       ppdMarkDefaults(ppd);
       cupsMarkOptions(ppd, num_options, options);

       ppd_choice_t *choice = ppdFindMarkedChoice(ppd, "Duplex");

   Raster  filters  should  use option choices set through the raster page
   header, as those reflect the  options  in  effect  for  a  given  page.
   Options  specified on the command-line determine the default values for
   the entire job, which can be overridden on a per-page basis.

LOG MESSAGES

   Messages sent to  the  standard  error  are  generally  stored  in  the
   printer's  "printer-state-message"  attribute  and the current ErrorLog
   file.  Each line begins with a standard prefix:

   ALERT: message
        Sets the "printer-state-message" attribute and adds the  specified
        message to the current ErrorLog using the "alert" log level.

   ATTR: attribute=value [ ... attribute=value]
        Sets  the  named  job  or  printer attribute(s). The following job
        attributes can be set: "job-media-progress". The following printer
        attributes  can  be  set:  "auth-info-required",  "marker-colors",
        "marker-high-levels",    "marker-levels",     "marker-low-levels",
        "marker-message", "marker-names", "marker-types", "printer-alert",
        and "printer-alert-description".

   CRIT: message
        Sets the "printer-state-message" attribute and adds the  specified
        message to the current ErrorLog using the "critical" log level.

   DEBUG: message
        Adds  the  specified  message  to  the  current ErrorLog using the
        "debug" log  level.   DEBUG  messages  are  never  stored  in  the
        "printer-state-message" attribute.

   DEBUG2: message
        Adds  the  specified  message  to  the  current ErrorLog using the
        "debug2" log level.  DEBUG2  messages  are  never  stored  in  the
        "printer-state-message" attribute.

   EMERG: message
        Sets  the "printer-state-message" attribute and adds the specified
        message to the current ErrorLog using the "emergency" log level.

   ERROR: message
        Sets the "printer-state-message" attribute and adds the  specified
        message to the current ErrorLog using the "error" log level.

   INFO: message
        Sets   the   "printer-state-message"  attribute.  If  the  current
        LogLevel is set to "debug2", also adds the  specified  message  to
        the current ErrorLog using the "info" log level.

   NOTICE: message
        Sets  the "printer-state-message" attribute and adds the specified
        message to the current ErrorLog using the "notice" log level.

   PAGE: page-number #-copies

   PAGE: total #-pages
        Adds an entry to the current PageLog. The first form adds #-copies
        to  the  "job-media-sheets-completed"  attribute.  The second form
        sets the "job-media-sheets-completed" attribute to #-pages.

   PPD: Keyword=Value [ ... KeywordN=Value ]
        Sets the named  keywords  in  the  printer's  PPD  file.  This  is
        typically   used   to  update  default  option  keywords  such  as
        DefaultPageSize and the various installable  options  in  the  PPD
        file.

   STATE: printer-state-reason [ ... printer-state-reason ]

   STATE: + printer-state-reason [ ... printer-state-reason ]

   STATE: - printer-state-reason [ ... printer-state-reason ]
        Sets,  adds,  or  removes  "printer-state-reason" keywords for the
        current queue. Typically this is used to indicate media, ink,  and
        toner conditions on a printer.

   WARNING: message
        Sets  the "printer-state-message" attribute and adds the specified
        message to the current ErrorLog using the "warning" log level.

ENVIRONMENT VARIABLES

   The following environment variables are defined by the CUPS server when
   executing the filter:

   CHARSET
        The default text character set, typically "utf-8".

   CLASS
        When  a  job is submitted to a printer class, contains the name of
        the destination printer class. Otherwise this environment variable
        will not be set.

   CONTENT_TYPE
        The  MIME  media  type associated with the submitted job file, for
        example "application/postscript".

   CUPS_CACHEDIR
        The directory where semi-persistent cache files can be  found  and
        stored.

   CUPS_DATADIR
        The directory where data files can be found.

   CUPS_FILETYPE
        The  type of file being printed: "job-sheet" for a banner page and
        "document" for a regular print file.

   CUPS_MAX_MESSAGE
        The maximum size of  a  message  sent  to  stderr,  including  any
        leading prefix and the trailing newline.

   CUPS_SERVERROOT
        The root directory of the server.

   FINAL_CONTENT_TYPE
        The  MIME  media  type associated with the output destined for the
        printer, for example "application/vnd.cups-postscript".

   LANG The default language locale (typically C or en).

   PATH The standard execution path for external programs that may be  run
        by the filter.

   PPD  The full pathname of the PostScript Printer Description (PPD) file
        for this printer.

   PRINTER
        The name of the printer.

   RIP_CACHE
        The  recommended  amount  of  memory  to  use  for  Raster   Image
        Processors (RIPs).

   SOFTWARE
        The   name   and   version   number   of   the  server  (typically
        CUPS/major.minor).

   TZ   The timezone of the server.

   USER The user executing the filter, typically "lp" or  "root";  consult
        the cups-files.conf file for the current setting.

CONFORMING TO

   While  the  filter  interface  is  compatible  with  System V interface
   scripts, CUPS does not support System V interface scripts.

NOTES

   CUPS filters are not meant to be run directly by the user.  Aside  from
   the  legacy  System  V  interface issues (argv[0] is the printer name),
   CUPS filters  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.   Unless  you  are  a
   developer  and  know  what  you  are  doing,  please do not run filters
   directly.   Instead,  use  the  cupsfilter(8)  program   to   use   the
   appropriate filters to do the conversions you need.

SEE ALSO

   backend(7), cups(1), cups-files.conf(5), cupsd(8), cupsfilter(8),
   CUPS Online Help (http://localhost:631/help)

COPYRIGHT

   Copyright  2007-2016 by Apple Inc.





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.