#CONTENTSCUPS Interface Design DescriptionCUPS Interface Design Description
CUPS-IDD-1.1
Easy Software Products
Copyright 1997-2005, All Rights Reserved
Table of Contents 
#11 Scope #1_11.1 Identification #1_21.2 System Overview #1_31.3 Document Overview #22 References #2_12.1 CUPS Documentation #2_22.2 Other Documents #33 Internal Interfaces #3_13.1 Character Set Files #3_1_13.1.1 8-Bit Character Set Files #3_1_23.1.2 Unicode Character Set Files #3_23.2 Language Files #3_33.3 MIME Files #3_3_13.3.1 mime.types #3_3_23.3.2 mime.convs #3_43.4 Option Files #3_53.5 PostScript Printer Description Files #3_5_13.5.1 PPD Specification #3_5_23.5.2 CUPS Extensions to PPD Files #3_63.6 Scheduler Configuration Files #3_6_13.6.1 classes.conf #3_6_23.6.2 cupsd.conf #3_6_33.6.3 printers.conf #44 External Interfaces #4_14.1 AppSocket Protocol #4_24.2 CUPS Browsing Protocol #4_34.3 CUPS Form File #4_3_14.3.1 CUPS Form DTD #4_44.4 CUPS PostScript File #4_54.5 CUPS Raster File #4_64.6 CUPS Raw Files #4_74.7 Internet Printing Protocol #4_84.8 Line Printer Daemon Protocol #4_94.9 Server Message Block Protocol #55 Directories #6A Glossary #6_1A.1 Terms #6_2A.2 Acronyms 1 Scope 
1.1 Identification 
This interface design description document provides detailed file
 formats, message formats, and program conventions for the Common UNIX
 Printing System ("CUPS") Version 1.1.
1.2 System Overview 
CUPS provides a portable printing layer for UNIX®-based operating
 systems. It has been developed by 
http://www.easysw.comEasy
 Software Products
 to promote a standard printing solution for all
 UNIX vendors and users. CUPS provides the System V and Berkeley
 command-line interfaces.
CUPS uses the Internet Printing Protocol ("IPP") as the basis for
 managing print jobs and queues. The Line Printer Daemon ("LPD") Server
 Message Block ("SMB"), and AppSocket (a.k.a. JetDirect) protocols are
 also supported with reduced functionality. CUPS adds network printer
 browsing and PostScript Printer Description ("PPD") based printing
 options to support real-world printing under UNIX.
CUPS includes an image file RIP that supports printing of image files
 to non-PostScript printers. A customized version of GNU Ghostscript
 7.05 for CUPS called ESP Ghostscript is available separately to support
 printing of PostScript files within the CUPS driver framework. Sample
 drivers for Dymo, EPSON, HP, and OKIDATA printers are included that use
 these filters.
Drivers for thousands of printers are provided with our ESP Print Pro
 software, available at:
    
http://www.easysw.com/printpro/http://www.easysw.com/printpro/ CUPS is licensed under the GNU General Public License and GNU Library
 General Public License. Please contact Easy Software Products for
 commercial support and "binary distribution" rights.
1.3 Document Overview 
This interface design description document is organized into the
 following sections:
1 - Scope2 - References3 - Internal Interfaces4 - External Interfaces5 - DirectoriesA - Glossary 2 References 
2.1 CUPS Documentation 
The following CUPS documentation is referenced by this document:
CUPS-CMP-1.1: CUPS Configuration Management PlanCUPS-IDD-1.1: CUPS System Interface Design DescriptionCUPS-IPP-1.1: CUPS Implementation of IPPCUPS-SAM-1.1.x: CUPS Software Administrators ManualCUPS-SDD-1.1: CUPS Software Design DescriptionCUPS-SPM-1.1.x: CUPS Software Programming ManualCUPS-SSR-1.1: CUPS Software Security ReportCUPS-STP-1.1: CUPS Software Test PlanCUPS-SUM-1.1.x: CUPS Software Users ManualCUPS-SVD-1.1: CUPS Software Version Description 2.2 Other Documents 
The following non-CUPS documents are referenced by this document:
http://partners.adobe.com/asn/developer/PDFS/TN/5003.PPD_Spec_v4.3.pdfAdobe PostScript Printer Description File Format Specification, Version
 4.3.
http://partners.adobe.com/asn/developer/PDFS/TN/PLRM.pdfAdobe PostScript Language Reference, Third Edition.
IPP/1.1: Implementers Guide http://www.ietf.org/rfc/rfc1179.txtRFC 1179, Line Printer
 Daemon Protocol
http://www.ietf.org/rfc/rfc2396.txtRFC 2396, Uniform
 Resource Identifiers (URI): Generic Syntax
http://www.ietf.org/rfc/rfc2567.txtRFC 2567, Design Goals
 for an Internet Printing Protocol
http://www.ietf.org/rfc/rfc2568.txtRFC 2568, Rationale
 for the Structure of the Model and Protocol for the Internet Printing
 Protocol
http://www.ietf.org/rfc/rfc2569.txtRFC 2569, Mapping
 between LPD and IPP Protocols
http://www.ietf.org/rfc/rfc2616.txtRFC 2616, Hypertext
 Transfer Protocol -- HTTP/1.1
http://www.ietf.org/rfc/rfc2617.txtRFC 2617, HTTP
 Authentication: Basic and Digest Access
 Authentication http://www.ietf.org/rfc/rfc2910.txtRFC 2910, IPP/1.1:
 Encoding and Transport
http://www.ietf.org/rfc/rfc2911.txtRFC 2911, IPP/1.1:
 Model and Semantics
http://www.ietf.org/rfc/rfc3380.txtRFC 3380, IPP: Job and
 Printer Set Operations
3 Internal Interfaces 
3.1 Character Set Files 
The character set files define a mapping between 8-bit characters and
 the Unicode character set, or between Unicode and printer fonts. They
 are named using the IETF charset names defined in RFCnnnn. These files
 are ASCII text, the content of which is described below. Comments can
 be included by using the 
# character in the first column of a
 line.
3.1.1 8-Bit Character Set Files 
8-bit character set files start with a line reading:
charset 8bit
Following this are lines that define the font information:
first last direction width normal bold italic bold-italic
First and last are the first and last glyphs in
 the font mapping that correspond to that font; a maximum of 256
 characters can be mapped within each group, with a maximum of 256
 mappings (this is a PostScript limitation.) The glyph values are
 hexadecimal.
Direction is the string "ltor", "rtol", or "rtola"
 indicating left-to-right, right-to-left, or right-to-left Arabic text.
Width is the string "single" or "double"; double means
 that the glyphs are twice as wide as ASCII characters in the Courier
 typeface.
Normal, bold, italic, and bold-italic are the
 typefaces to use for each presentation. If characters are only
 available in a single style then only one typeface should be listed
 (e.g. "Symbol".) Each font that is listed will be used (and downloaded
 if needed) when printing.
The remaining lines define a character to Unicode glyph mapping for
 the character set. The character and glyph values are hexadecimal:
xx yyyy
3.1.2 Unicode Character Set Files 
Unicode character set files start with a line reading:
charset encoding
Encoding is the encoding to use for the text; currently
 only the string "utf8" is supported.
Following this are lines defining the font information:
first last direction width normal bold italic bold-italic
First and last are the first and last glyphs in
 the font mapping that correspond to that font; a maximum of 256
 characters can be mapped within each group, with a maximum of 256
 mappings (this is a PostScript limitation.) The glyph values are
 hexadecimal.
Direction is the string "ltor", "rtol", or "rtola"
 indicating left-to-right, right-to-left, or right-to-left Arabic text.
Width is the string "single" or "double"; double means
 that the glyphs are twice as wide as ASCII characters in the Courier
 typeface.
Normal, bold, italic, and bold-italic are the
 typefaces to use for each presentation. If characters are only
 available in a single style then only one typeface should be listed
 (e.g. "Symbol".) Each font that is listed will be used (and downloaded
 if needed) when printing.
3.2 Language Files 
The language files define the default character set and a collection
 of text messages in that language. They are named by prefixing the
 string "cups_" to the front of the language specifier (e.g. "cups_en",
 "cups_fr", etc.) Each file consists of two or more lines of ASCII text.
The first line identifies the character set to be used for the
 messages. The currently recognized values are:
iso-8859-1iso-8859-2iso-8859-3iso-8859-4iso-8859-5iso-8859-6iso-8859-7iso-8859-8iso-8859-9iso-8859-10iso-8859-13iso-8859-14iso-8859-15us-asciiutf-8windows-874windows-1250windows-1251windows-1252windows-1253windows-1254windows-1255windows-1256windows-1257windows-1258koi8-rkoi8-uThe second and succeeding lines define text messages. If the message
 text is preceded by a number, then the current message number is
 updated and the text after the number is used.
3.3 MIME Files 
CUPS uses two MIME files in its standard configuration.
3.3.1 mime.types 
The mime.types file defines the recognized file types and consists of
 1 or more lines of ASCII text. Comment lines start with the pound ("#")
 character. The backslash ("\") character can be used at the end of a
 line to continue that line to the next.
Each non-blank line starts with a MIME type identifier ("super/type")
 as registered with the IANA. All text following the MIME type is
 treated as a series of type recognition rules:
mime-type := super "/" type { SP rule }*
super := { "a-z" | "A-Z" }*
type := { "a-z" | "A-Z" | "-" | "." | "0-9" }*
rule := { extension | match | operator | "(" rule ")" }*
extension := { "a-z" | "A-Z" | "0-9" }*
match := "match(" regexp ")" |
         "ascii(" offset "," length ")" |
	 "printable(" offset "," length ")" |
	 "string(" offset "," string ")" |
	 "contains(" offset "," length "," string ")" |
	 "char(" offset "," value ")" |
	 "short(" offset "," value ")" |
	 "int(" offset "," value ")" |
	 "locale(" string ")"
operator := "+" |	[ logical AND ]
            "," | SP    [ logical OR ]
	    "!"         [ unary NOT ]
The int and short rules match look for
 integers in network byte order (a.k.a. big-endian) with the
 most-significant byte first.
3.3.2 mime.convs 
The mime.types file defines the recognized file filters and consists
 of 1 or more lines of ASCII text. Comment lines start with the pound
 ("#") character.
Each non-blank line starts with two MIME type identifiers
 ("super/type") representing the source and destination types. Following
 the MIME types are a cost value (0 to 100) and the filter program to
 use. If the filter program is not specified using the full path then it
 must reside in the CUPS filter directory:
super/type SP super/type2 SP cost SP program
3.4 Option Files 
CUPS maintains user-defined printer and option files for each printer
 and user on the system. The printers and options defined in the system
 option file (
/etc/cups/lpoptions) are loaded first,
 followed by the user option file (
$HOME/.lpoptions).
 Options in the user file replace those defined in the system file for
 the same destination. Each line in the files can be one of the
 following:
Dest name option=value option=value ... option=value
Dest name/instance option=value option=value ... option=value
Default name option=value option=value ... option=value
Default name/instance option=value option=value ... option=value
The line beginning with "Default" indicates the default destination
 for print jobs; a default line in the user option file overrides the
 default defined in the system option file.
Name is the name of a printer known to the local server.
Instance can be any string of letters, numbers, and the
 underscore up to 127 characters in length.
The remainder of the line contains a list of space-separated options
 and their values.
3.5 PostScript Printer Description Files 
PostScript Printer Description ("PPD") files describe the
 capabilities of each printer and are used by CUPS to support
 printer-specific features and intelligent filtering.
3.5.1 PPD Specification 
The PPD file format is described in http://partners.adobe.com/asn/developer/PDFS/TN/5003.PPD_Spec_v4.3.pdf Adobe TechNote #5003: PostScript Printer Description File Format
 Specification Version 4.3
.
3.5.2 CUPS Extensions to PPD Files 
CUPS adds several new attributes that are described below.
3.5.2.1 cupsFax
This optional boolean attributes specifies whether the printer should
 be treated as a facsimile device, where failed jobs should be retried
 according to the 
FaxRetryInterval and FaxRetryLimit directives in the
 cupsd.conf file.
3.5.2.2 cupsFilter
This optional string attribute provides a conversion rule of the
 form:
source/type cost program
The destination type is assumed to the printer's type. If a printer
 supports the source type directly the special filter program "-" may be
 specified.
3.5.2.3 cupsFlipDuplex
This optional boolean attribute notifies the RIP filters that the
 destination printer requires an upside-down image for the back page.
 The default value is false.
3.5.2.4 cupsManualCopies
This optional boolean attribute notifies the RIP filters that the
 destination printer does not support copy generation in hardware. The
 default value is false.
3.5.2.5 cupsModelNumber
This optional integer attribute specifies a printer-specific model
 number. This number can be used by a filter program to adjust the
 output for a specific model of printer.
3.5.2.6 cupsProfile
This optional string attribute specifies a color profile of the form:
resolution/type density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22
The resolution and type values may be "-" to act as a
 wildcard. Otherwise they must match one of the 
Resolution or 
MediaType attributes defined in the PPD file.
The density and gamma values define gamma and density
 adjustment function such that:
f(x) = density * x
gammaThe m00 through m22 values define a 3x3 transformation
 matrix for the CMY color values. The density function is applied
 after
 the CMY transformation.
3.5.2.7 cupsProtocol
This optional attribute describes which binary communication protocol
 to use when printing binary PostScript data. The strings "None", "BCP",
 and "TBCP" are recognized, corresponding to no encoding, BCP, and TBCP
 respectively.
3.5.2.8 cupsVersion
This required attribute describes which version of the CUPS IDD was
 used for the PPD file extensions. Currently it must be the string "1.0"
 or "1.1".
3.6 Scheduler Configuration Files 
The scheduler reads three configuration files that define the
 available printers, classes, and services:
classes.confThis file defines all of the printer classes known to the system.cupsd.confThis file defines the files, directories, passwords, etc. used by
 the scheduler.
printers.confThis file defines all of the printers known to the system. 3.6.1 classes.conf 
The classes.conf file consists of 1 or more lines of ASCII text.
 Comment lines start with the pound ("#") character.
Each non-blank line starts with the name of a configuration directive
 followed by its value. The following directives are understood:
DirectiveDescription <Class name>
 </Class> Surrounds a class definition. <DefaultClass name>
 </Class> Surrounds a class definition for the default
 destination.
Accepting Specifies whether the class is accepting new
 jobs. May be the names "Yes" or "No".
AllowUsers Specifies a list of users that are allowed to
 access the class.
BannerStart Specifies the banner that is printed before
 other files in a job.
BannerEnd Specifies the banner that is printed after
 other files in a job.
DenyUsers Specifies a list of users that are not allowed
 to access the class.
Info A textual description of the class. Location A textual location of the class. Printer Specifies a printer that is a member of the
 class.
State Specifies the initial state of the class; can be
 "Idle" or "Stopped".
StateMessage Specifies a textual message for the current
 class state.
3.6.2 cupsd.conf 
The cupsd.conf file consists of 1 or more lines of ASCII text.
 Comment lines start with the pound ("#") character.
Each non-blank line starts with the name of a configuration directive
 followed by its value. The following directives are understood:
DirectiveDefaultDescription AccessLog access_log Specifies the location of
 the access log file. The special name "syslog" can be used to send
 access log information to the system log.
Allow - Allows connections from the specified
 host, network, or domain.
AuthClass - Specifies what level of
 authentication is required; may be "User", "System", or "Group".
AuthType None Specifies the type of
 authentication to perform; may be "None", "Basic", or "Digest".
BrowseAddress 255.255.255.255 Specifies a
 broadcast address to send CUPS browsing packets to.
BrowseAllow - Specifies hosts or addresses from
 which browsing information should be used.
BrowseDeny - Specifies hosts or addresses from
 which browsing information should not be used.
BrowseInterval 30 Specifies the number of
 seconds between browsing updates. A browse interval of 0 seconds
 disables outgoing packets.
BrowseOrder Allow,Deny Specifies the order of
 BrowseAllow and BrowseDeny directive processing; can be "Deny,Allow" to
 implicitly deny hosts unless they are allowed by a BrowseAllow line, or
 "Allow,Deny" to implicitly allow hosts unless they are denied by a
 BrowseDeny line.
BrowsePoll - Specifies a server to poll for
 available printers and classes.
BrowsePort 631 Specifies the UDP port number to
 use for browse packets.
BrowseRelay - Specifies a source and destination
 address for relaying browser information from one subnet to another.
BrowseShortNames yes Specifies whether or not to
 provide short names (without the "@server" part) for remote printers.
BrowseTimeout 300 Specifies the number of
 seconds to wait until remote destinations are removed from the local
 destination list.
Browsing On Specifies whether or not printer and
 class browsing is enabled; can be "On" or "Off".
DataDir /usr/share/cups Specifies the directory
 where CUPS data files are stored.
DefaultCharset iso-8859-1 Specifies the default
 character set.
DefaultLanguage current locale Specifies the
 default language.
Deny - Refuses connections from the specified
 host, network, or domain.
DocumentRoot /usr/share/doc/cups Specifies the
 document data root directory.
ErrorLog error_log Specifies the error log file
 location. The special name "syslog" can be used to send error log
 information to the system log.
Group root, sys, system Specifies the group name
 or ID that is used when running external programs.
HostNameLookups Off Specifies whether or not to
 perform reverse IP address lookups to get the actual hostname; may be
 "On" or "Off". Hostname lookups can significantly degrade the
 performance of the CUPS server if one or more DNS servers is not
 functioning properly.
ImplicitClasses On Specifies whether or not to
 automatically create printer classes when more than one printer or
 class of the same name is detected on the network; may be "On" or
 "Off".
KeepAlive On Specifies whether or not to use the
 HTTP Keep-Alive feature; may be "On" or "Off".
KeepAliveTimeout 30 Specifies the amount of time
 to keep the HTTP connection alive before closing it.
<Location path>
 </Location> - Specifies a location to restrict
 access to.
LogLevel info Controls the amount of information
 that is logged in the error log file. Can be one of "debug", "info",
 "warn", "error", or "none", in decreasing order or verbosity.
MaxClients 100 Specifies the maximum number of
 simultaneous active clients. This value is internally limited to 1/3 of
 the total number of available file descriptors.
MaxLogSize 0 Specifies the maximum size of the
 access, error, and page log files in bytes. If set to 0 then no maximum
 size is set. Log files are rotated automatically when this size is
 exceeded.
MaxRequestSize 0 Specifies the maximum size of
 HTTP requests in bytes. If set to 0 then there is no maximum.
Order Allow,Deny Specifies the order of Allow
 and Deny directive processing; can be "Deny,Allow" to implicitly deny
 hosts unless they are allowed by an Allow line, or "Allow,Deny" to
 implicitly allow hosts unless they are denied by a Deny line.
PageLog page_log Specifies the location of the
 page log file. The special name "syslog" can be used to send page log
 information to the system log.
Port 631 Specifies a port number to listen to
 for HTTP connections.
Printcap /etc/printcap Specifies the location of
 a Berkeley printcap file to update with a list of current printers and
 classes. If no filename is supplied then this automatic generation is
 disabled.
RequestRoot /var/spool/cups Specifies the
 location of request files.
RIPCache 8m Specifies the size of the memory
 cache in bytes that is used by RIP filters.
ServerAdmin root@ServerName Specifies the person
 to contact with problems.
ServerName hostname Specifies the hostname that
 is supplied to HTTP clients. This is also used to determine the default
 CUPS server for the CUPS IPP client applications.
ServerRoot /etc/cups Specifies the root
 directory for server configuration files.
SystemGroup root, sys, system Specifies the
 group name used for System class authentication.
TempDir /var/tmp Specifies the temporary
 directory to use.
Timeout 300 The timeout in seconds before client
 connections are closed in the middle of a request.
User lp Specifies the user that is used when
 running external programs.
3.6.3 printers.conf 
The printers.conf file consists of 1 or more lines of ASCII text.
 Comment lines start with the pound ("#") character.
Each non-blank line starts with the name of a configuration directive
 followed by its value. The following directives are understood:
DirectiveDescription Accepting Specifies whether the printer is accepting new
 jobs. May be the names "Yes" or "No".
<DefaultPrinter name>
 </Printer> Surrounds the printer definition for a default
 destination.
AllowUsers Specifies a list of users that are allowed to
 access the printer.
BannerStart Specifies the banner that is printed before
 other files in a job.
BannerEnd Specifies the banner that is printed after
 other files in a job.
DenyUsers Specifies a list of users that are not allowed
 to access the printer.
DeviceURI Specifies the device-uri attribute for the
 printer.
Info A textual description of the printer. Location A textual location of the printer. <Printer name>
 </Printer> Surrounds the printer definition. State Specifies the initial state of the printer; can be
 "Idle" or "Stopped".
StateMessage Specifies a textual message for the current
 printer state.
4 External Interfaces 
4.1 AppSocket Protocol 
The AppSocket protocol is an 8-bit clean TCP/IP socket connection.
 The default IP service port is 9100. The URI method name is "socket".
The AppSocket protocol is used by the Hewlett Packard JetDirect
 network interfaces and print servers, as well as many other vendors'
 products. See the CUPS Software Administrators Manual for a list of
 supported products.
4.2 CUPS Browsing Protocol 
The CUPS Browsing Protocol is a UDP/IP-based broadcast service. By
 default this service operates on IP service port 631.
Each broadcast packet describes the state of a single printer or
 class and is an ASCII text string of up to 1450 bytes ending with a
 newline (0x0a). The string is formatted as follows:
type SP state SP uri SP "location" SP "info" SP "make-and-model" NL
State, uri, location, info, and make-and-model,
 correspond to the IPP 
printer-state, printer-uri-supported
, printer-location, printer-info
, and printer-make-and-model attributes.
Type is a hexadecimal number string representing
 capability/type bits:
BitDescription 0 0 = printer
 1 = class 1 0 = local
 1 = remote
 (always 1) 2 1 = can print B&W 3 1 = can print color 4 1 = can duplex 5 1 = can staple 6 1 = can do fast copies 7 1 = can do fast collating 8 1 = can punch holes 9 1 = can cover 10 1 = can bind 11 1 = can sort 12 1 = can print up to 9x14 inches 13 1 = can print up to 18x24 inches 14 1 = can print up to 36x48 inches 15 1 = can print variable sizes 16 1 = is an implicit class (bit 1 must be 0) 17 1 = is the default printer on the network 18 1 = is a fax device 19 1 = printer is rejecting new jobs 
4.3 CUPS Form File 
CUPS Form files are XML files used by the CUPS formtops filter to produce dynamic banner pages and support preprinted forms.
The MIME type for CUPS Form files is application/vnd.cups-form.
4.3.1 CUPS Form DTD 
The following DTD describes the available elements and attributes in
 a CUPS Form file:
<!ENTITY % Angle "CDATA" -- angle in degrees -->
<!ENTITY % Color "CDATA" -- a color using sRGB: #RRGGBB as Hex values -->
<!ENTITY % Length "CDATA" -- nn for pixels or nn% for percentage length -->
<!ENTITY % Lengths "CDATA" -- comma-separated Length values -->
<!ENTITY % Text "CDATA">
<!ENTITY % heading "H1|H2|H3|H4|H5|H6">
<!ENTITY % preformatted "PRE">
<!ENTITY % i18n
 "lang        %LanguageCode; #IMPLIED  -- language code --
  dir         (ltr|rtl)      #IMPLIED  -- direction for weak/neutral text --"
  >
<!ENTITY % attrs "%i18n;">
<!ENTITY % fontstyle
 "B | FONT | I | TT">
<!ENTITY % graphics
 "BOX | RECT | LINE | POLY | ARC | PIE | TEXT">
<!ENTITY % insert
 "IMG | VAR">
<!-- %inline; covers inline or "text-level" elements -->
<!ENTITY % inline "#PCDATA | %fontstyle; | %graphics; | %insert;">
<!ELEMENT (%fontstyle;) - - (%inline;)*>
<!ATTLIST (%fontstyle;)
  %attrs;                              -- %i18n --
  >
<!ELEMENT BR - O EMPTY                 -- forced line break -->
<!ATTLIST BR
  %attrs;                              -- %i18n --
  >
<!ENTITY % block
     "P | %heading; | %preformatted;">
<!ENTITY % flow "%block; | %inline;">
<!ELEMENT PAGE O O (%flow;)+           -- document body -->
<!ATTLIST PAGE
  %attrs;                              -- %i18n --
  align       (left|center|right) #IMPLIED -- horizontal alignment --
  valign      (top|middle|center|bottom) #IMPLIED -- vertical alignment --
  >
<!ELEMENT P - O (%inline;)*            -- paragraph -->
<!ATTLIST P
  %attrs;                              -- %i18n --
  align       (left|center|right) #IMPLIED -- horizontal alignment --
  >
<!ELEMENT (%heading;)  - - (%inline;)* -- heading -->
<!ATTLIST (%heading;)
  %attrs;                              -- %i18n --
  align       (left|center|right) #IMPLIED -- horizontal alignment --
  >
<!ELEMENT PRE - - (%inline;)*          -- preformatted text -->
<!ATTLIST PRE
  %attrs;                              -- %i18n --
  align       (left|center|right) #IMPLIED -- horizontal alignment --
  >
<!ELEMENT BOX - O EMPTY                -- unfilled box -->
<!ATTLIST BOX
  color       %Color;        #IMPLIED  -- override color --
  height      %Length;       #REQUIRED -- height of box --
  thickness   %Length;       #IMPLIED  -- override line thickness --
  width       %Length;       #REQUIRED -- width of box --
  x           %Length;       #REQUIRED -- horizontal position --
  y           %Length;       #REQUIRED -- vertical position --
  >
<!ELEMENT RECT - O EMPTY               -- filled box -->
<!ATTLIST RECT
  color       %Color;        #IMPLIED  -- override color --
  height      %Length;       #REQUIRED -- height of box --
  width       %Length;       #REQUIRED -- width of box --
  x           %Length;       #REQUIRED -- horizontal position --
  y           %Length;       #REQUIRED -- vertical position --
  >
<!ELEMENT LINE - O EMPTY               -- polyline -->
<!ATTLIST LINE
  color       %Color;        #IMPLIED  -- override color --
  thickness   %Length;       #IMPLIED  -- override line thickness --
  x           %Lengths;      #REQUIRED -- horizontal positions --
  y           %Lengths;      #REQUIRED -- vertical positions --
  >
<!ELEMENT POLY - O EMPTY               -- polygon (filled) -->
<!ATTLIST POLY
  color       %Color;        #IMPLIED  -- override color --
  x           %Lengths;      #REQUIRED -- horizontal positions --
  y           %Lengths;      #REQUIRED -- vertical positions --
  >
<!ELEMENT ARC - O EMPTY                -- unfilled arc -->
<!ATTLIST ARC
  color       %Color;        #IMPLIED  -- override color --
  end         %Angle;        #IMPLIED  -- override end angle --
  height      %Length;       #REQUIRED -- height of arc --
  start       %Angle;        #IMPLIED  -- override start angle --
  thickness   %Length;       #IMPLIED  -- override line thickness --
  width       %Length;       #REQUIRED -- width of arc --
  x           %Length;       #REQUIRED -- horizontal position --
  y           %Length;       #REQUIRED -- vertical position --
  >
<!ELEMENT PIE - O EMPTY                -- filled arc -->
<!ATTLIST PIE
  color       %Color;        #IMPLIED  -- override color --
  end         %Angle;        #IMPLIED  -- override end angle --
  height      %Length;       #REQUIRED -- height of arc --
  start       %Angle;        #IMPLIED  -- override start angle --
  width       %Length;       #REQUIRED -- width of arc --
  x           %Length;       #REQUIRED -- horizontal position --
  y           %Length;       #REQUIRED -- vertical position --
  >
<!ELEMENT TEXT - - (%flow;)*           -- text box -->
<!ATTLIST RECT
  align       (left|center|right) #IMPLIED -- horizontal alignment --
  height      %Length;       #REQUIRED -- height of box --
  valign      (top|middle|center|bottom) #IMPLIED -- vertical alignment --
  width       %Length;       #REQUIRED -- width of box --
  x           %Length;       #REQUIRED -- horizontal position --
  y           %Length;       #REQUIRED -- vertical position --
  >
<!ELEMENT IMG - O EMPTY                -- Embedded image -->
<!ATTLIST IMG
  %attrs;                              -- %coreattrs, %i18n, %events --
  src         %URI;          #REQUIRED -- URI of image to embed --
  height      %Length;       #IMPLIED  -- override height --
  width       %Length;       #IMPLIED  -- override width --
  >
<!ELEMENT HEAD O O (DEFVAR)*           -- document head -->
<!ATTLIST HEAD
  %i18n;                               -- lang, dir --
  >
<!ELEMENT DEFVAR - O EMPTY             -- variable definition -->
<!ATTLIST DEFVAR
  name        CDATA          #REQUIRED -- name
  value       CDATA          #REQUIRED -- value
  >
<!ENTITY % html.content "HEAD, PAGE">
<!ELEMENT CUPSFORM - - (HEAD) (PAGE)+  -- document root element -->
<!ATTLIST CUPSFORM
  %i18n;                               -- lang, dir --
  >
4.4 CUPS PostScript File 
CUPS PostScript files are device-dependent Adobe PostScript program
 files. The PostScript language is described in the 
http://partners.adobe.com/asn/developer/PDFS/TN/PLRM.pdf Adobe PostScript Language Reference Manual, Third Edition
.
The MIME type for CUPS PostScript files is application/vnd.cups-postscript
.
4.5 CUPS Raster File 
CUPS raster files are device-dependent raster image files that
 contain a PostScript page device dictionary and device-dependent raster
 imagery for each page in the document. These files are used to transfer
 raster data from the PostScript and image file RIPs to device-dependent
 filters that convert the raster data to a printable format.
A raster file begins with a four byte synchronization word:
 0x52615374 ("RaSt") for big-endian architectures and 0x74536152
 ("tSaR") for little-endian architectures. The writer of the raster file
 will use the native word order, and the reader is responsible for
 detecting a reversed word order file and swapping bytes as needed. The
 CUPS Image Library raster functions perform this function
 automatically.
Following the synchronization word are a series of raster pages. Each
 page starts with a page device dictionary header and is followed
 immediately by the raster data for that page.
BytesDescriptionValues 0-63 MediaClass Nul-terminated ASCII string 64-127 MediaColor Nul-terminated ASCII string 128-191 MediaType Nul-terminated ASCII string 192-255 OutputType Nul-terminated ASCII string 256-259 AdvanceDistance 0 to 232 - 1
 points
260-263 AdvanceMedia 0 = Never advance roll
 1 = Advance roll after file
 2 = Advance roll after job
 3 = Advance roll after set
 4 = Advance roll after page 264-267 Collate 0 = do not collate copies
 1 = collate copies 268-271 CutMedia 0 = Never cut media
 1 = Cut roll after file
 2 = Cut roll after job
 3 = Cut roll after set
 4 = Cut roll after page 272-275 Duplex 0 = Print single-sided
 1 = Print double-sided 276-283 HWResolution Horizontal and vertical
 resolution in dots-per-inch.
284-299 ImagingBoundingBox Four integers giving
 the left, bottom, right, and top positions of the page bounding box in
 points
300-303 InsertSheet 0 = Do not insert separator
 sheets
 1 = Insert separator sheets 304-307 Jog 0 = Do no jog pages
 1 = Jog pages after file
 2 = Jog pages after job
 3 = Jog pages after set 308-311 LeadingEdge 0 = Top edge is first
 1 = Right edge is first
 2 = Bottom edge is first
 3 = Left edge is first 312-319 Margins Left and bottom origin of image
 in points
320-323 ManualFeed 0 = Do not manually feed
 media
 1 = Manually feed media 324-327 MediaPosition Input slot position from 0
 to N
328-331 MediaWeight Media weight in grams per
 meter squared
332-335 MirrorPrint 0 = Do not mirror prints
 1 = Mirror prints 336-339 NegativePrint 0 = Do not invert prints
 1 = Invert prints 340-343 NumCopies 1 to 232 - 1 344-347 Orientation 0 = Do not rotate page
 1 = Rotate page counter-clockwise
 2 = Turn page upside down
 3 = Rotate page clockwise 348-351 OutputFaceUp 0 = Output face down
 1 = Output face up 352-359 PageSize Width and length in points 360-363 Separations 0 = Print composite image
 1 = Print color separations 364-367 TraySwitch 0 = Do not change trays if
 selected tray is empty
 1 = Change trays if selected tray is empty 368-371 Tumble 0 = Do not rotate even pages when
 duplexing
 1 = Rotate even pages when duplexing 372-375 cupsWidth Width of page image in pixels 376-379 cupsHeight Height of page image in
 pixels
380-383 cupsMediaType Driver-specific 0 to 232
 - 1 384-387 cupsBitsPerColor 1, 2, 4, 8 bits 388-391 cupsBitsPerPixel 1 to 32 bits 392-395 cupsBytesPerLine 1 to 232 - 1
 bytes
396-399 cupsColorOrder 0 = chunky pixels (CMYK
 CMYK CMYK)
 1 = banded pixels (CCC MMM YYY KKK)
 2 = planar pixels (CCC... MMM... YYY... KKK...) 400-403 cupsColorSpace 0 = white
 1 = RGB
 2 = RGBA
 3 = black
 4 = CMY
 5 = YMC
 6 = CMYK
 7 = YMCK
 8 = KCMY
 9 = KCMYcm
 10 = GMCK
 11 = GMCS
 12 = WHITE
 13 = GOLD
 14 = SILVER
 15 = CIE XYZ
 16 = CIE Lab
 32 = ICC1
 33 = ICC2
 34 = ICC3
 35 = ICC4
 36 = ICC5
 37 = ICC6
 38 = ICC7
 39 = ICC8
 40 = ICC9
 41 = ICCA (10)
 42 = ICCB (11)
 43 = ICCC (12)
 44 = ICCD (13)
 45 = ICCE (14)
 46 = ICCF (15)
404-407 cupsCompression Driver-specific 0 to 232
 - 1 408-411 cupsRowCount Driver-specific 0 to 232
 - 1 412-415 cupsRowFeed Driver-specific 0 to 232
 - 1 416-419 cupsRowStep Driver-specific 0 to 232
 - 1 
The MIME type for CUPS Raster files is application/vnd.cups-raster
.
4.6 CUPS Raw Files 
Raw files are printer-dependent print files that are in a format
 suitable to the destination printer (e.g. HP-PCL, HP-RTL, etc.) The
 MIME type for CUPS Raw files is 
application/vnd.cups-raw.
4.7 Internet Printing Protocol 
The Internet Printing Protocol and the CUPS extensions to it are
 described in the CUPS Implementation of IPP document.
4.8 Line Printer Daemon Protocol 
The Line Printer Daemon (LPD) protocol is described by http://www.ietf.org/rfc/rfc1179.txtRFC 1179: Line Printer Daemon Protocol
.
The URI method name for LPD is "lpd".
4.9 Server Message Block Protocol 
The Server Message Block (SMB) and related Common Internet File
 System (CIFS) protocols are described at 
http://anu.samba.org/cifshttp://anu.samba.org/cifs
.
The URI method name for SMB is "smb". Support for this protocol is
 provided via the SAMBA 
smbspool(1) program provided with
 SAMBA 2.0.6 and higher.
5 Directories 
/etc/cupsThe scheduler configuration and MIME files reside here./etc/cups/certsThe authentication certificates reside here./etc/cups/interfacesSystem V interface scripts reside here./etc/cups/ppdThis directory contains PPD files for each printer./usr/binThe cancel, lp, lpq, lpr
, lprm, and lpstat commands reside
 here.
/usr/lib, /usr/lib32The shared libraries (DSOs) reside here./usr/lib/cups/backendThe backend filters reside here./usr/lib/cups/cgi-binThe CGI programs reside here./usr/lib/cups/daemonThe polling and LPD daemons reside here./usr/lib/cups/filterThe file filters reside here./usr/sbinThe accept, cupsd, lpadmin, lpc
, and reject commands reside here./usr/share/cupsThis is the root directory of the CUPS static data./usr/share/cups/charsetsThe character set files reside here./usr/share/cups/dataThe filter data files reside here./usr/share/cups/fontsThe pstoraster font files reside here./usr/share/cups/modelThe sample PPD files reside here./usr/share/cups/pstorasterThe pstoraster data files reside here./usr/share/doc/cupsThe scheduler documentation files reside here./var/log/cupsThe access_log, error_log, and page_log
 files reside here./var/spool/cupsThis directory contains print job files. A Glossary 
A.1 Terms 
CA computer language.parallelSending or receiving data more than 1 bit at a time.pipeA one-way communications channel between two programs.serialSending or receiving data 1 bit at a time.socketA two-way network communications channel. A.2 Acronyms 
ASCIIAmerican Standard Code for Information InterchangeCUPSCommon UNIX Printing SystemESC/PEPSON Standard Code for PrintersFTPFile Transfer ProtocolHP-GLHewlett-Packard Graphics LanguageHP-PCLHewlett-Packard Page Control LanguageHP-PJLHewlett-Packard Printer Job LanguageIETFInternet Engineering Task ForceIPPInternet Printing ProtocolISOInternational Standards OrganizationLPDLine Printer DaemonMIMEMultimedia Internet Mail ExchangePPDPostScript Printer DescriptionSMBServer Message BlockTFTPTrivial File Transfer Protocol