Last Updated May 20, 2025
CUPS implements the following Internet Printing Protocol standards:
CUPS also defines many new operations and attributes to support multiple IPP printers and printer classes on a single host.
CUPS supports the "ipp" and "ipps" schemes. The following resource names are used:
So a typical printer URI would be "ipp://foo.example.com/ipp/print/LaserJet".
CUPS has defined many vendor operations and extensions. The following operations are still in common use:
| Operation Name | CUPS Version | Code | Brief Description |
|---|---|---|---|
| CUPS-Get-Printers | 1.0 | 0x4002 | Get all of the available printers. |
| CUPS-Create-Local-Printer | 2.2 | 0x4028 | Creates a local (temporary) print queue pointing to a remote IPP Everywhere printer. |
The following sections describe the operations supported by CUPS. In the interest of brevity, operations which use only the standard IPP attributes are not described.
The CUPS-Get-Printers operation (0x4002) returns the Printer attributes for every printer known to the system. This may include printers that are not served directly by the server.
The following groups of attributes are supplied as part of the CUPS-Get-Printers request:
Group 1: Operation Attributes
The following groups of attributes are send as part of the CUPS-Get-Printers Response:
Group 1: Operation Attributes
Group 2: Printer Object Attributes
The CUPS-Create-Local-Printer operation (0x4028) creates a local (temporary) print queue pointing to a remote IPP Everywhere Printer. The queue will remain until the scheduler idle exits, is restarted, or the system is restarted or shutdown. Temporary print queues can be made permanent by an administrator by setting the "printer-is-shared" attribute to 'true'.
At a minimum, the scheduler requires a name and URI for the Printer to add. When successful, the local "printer-uri" values are returned and may be used by the Client to submit Job Creation Requests, monitor for state changes, and so forth.
If the named printer already exists, the scheduler will reject the request with the 'client-error-not-possible' status code.
Access Rights: The authenticated user performing this operation MUST be a Local User of the system, and the request MUST be made over a local (domain socket or loopback interface) address. Otherwise, the request will be rejected with the 'client-error-forbidden' status code.
The following group of attributes is supplied as part of the CUPS-Create-Local-Printer request:
Group 1: Operation Attributes
Group 2: Printer Attributes
The following group of attributes is sent as part of the CUPS-Create-Local-Printer Response:
Group 1: Operation Attributes
Group 2: Printer Attributes
CUPS provides many extension attributes to support multiple devices, PPD files, standard job filters, printers, and printer classes.
The "printer-type" attribute is used to choose printers or classes with the CUPS-Get-Printers and CUPS-Get-Classes operations.
The "printer-type-mask" attribute is used to choose printers or classes with the CUPS-Get-Printers and CUPS-Get-Classes operations. The bits are defined identically to the printer-type attribute and default to all 1's.
The "job-media-progress" status attribute specifies the percentage of completion of the current page. It is only valid when the Job is in the processing state.
The "job-printer-state-message" status attribute provides the last known value of the "printer-state-message" attribute for the Printer that processed (or is processing) the Job.
The "job-printer-state-reasons" status attribute provides the last known value of the "printer-state-reasons" attribute for the Printer that processed (or is processing) the Job.
The "page-border" attribute specifies whether a border is draw around each page. The following keywords are presently defined:
The "job-cancel-after" attribute provides the maximum number of seconds that are allowed for processing a job.
The "job-hold-until" attribute specifies a hold time. In addition to the standard IPP/1.1 keyword names, CUPS supports name values of the form "HH:MM" and "HH:MM:SS" that specify a hold time. The hold time is in Universal Coordinated Time (UTC) and not in the local time zone. If the specified time is less than the current time, the Job is held until the next day.
The "job-sheets" attribute specifies one or two banner files that are printed before and after a job. The reserved value of "none" disables banner printing. The default value is stored in the "job-sheets-default" attribute.
If only one value is supplied, the banner file is printed before the Job. If two values are supplied, the first value is used as the starting banner file and the second as the ending banner file.
The "job-originating-host-name" status attribute specifies the host from which the Job was queued. The value will be the hostname or IP address of the client depending on whether hostname resolution is enabled. The localhost address (127.0.0.1) is always resolved to the name "localhost".
This attribute is read-only.
The "device-uri" attribute specifies the device URI of the Printer.
The "requesting-user-name-allowed" attribute lists all of the users that are allowed to access a printer or class. Either this attribute or the "requesting-user-name-denied" attribute will be defined, but not both.
The "requesting-user-name-denied" attribute lists all of the users that are not allowed to access a printer or class. Either this attribute or the "requesting-user-name-allowed" attribute will be defined, but not both.
CUPS and AirPrint define additional printer supply attributes that provide similar information to the IPP "printer-supply", "printer-supply-description", and "printer-supply-info-uri" attributes defined in the IPP Driver Replacement Extensions v2.0 (NODRIVER).
The "marker-change-time" status attribute specifies the "printer-up-time" value when the last change to the marker-colors, marker-levels, marker-message, marker-names, or marker-types attributes was made.
The "marker-colors" status attribute specifies the color(s) for each supply in the Printer. The color is either 'none' or one or more hex-encoded sRGB colors of the form '#RRGGBB', for example '#000000' and '#00FFFF#FF00FF#FFFF00' for a printer with a black and CMY ink cartridge.
The "marker-high-levels" status attribute specifies the supply levels that indicate a near-full condition. A value of 100 is used for supplies that are consumed/emptied such as ink and toner cartridges, and a value of 0 is used for supplies that are filled such as waste containers/recptacles.
The "marker-levels" status attribute specifies the current supply levels for the Printer. A value of -1 indicates the level is unavailable, -2 indicates unknown, and -3 indicates the level is unknown but has not yet reached capacity. Values from 0 to 100 indicate the corresponding percentage.
The "marker-low-levels" status attribute specifies the supply levels that indicate a near-empty (for supplies that are consumed) or near-full (for supplies that are filled) condition. The low values for supplies like ink and toner are often in the range of 5 to 15 percent while waste containers/receptacles typically are in the range of 85 to 95.
The "marker-message" status attribute provides a human-readable status message for the current supply levels such as '12 pages of ink remaining.' or 'Replace cyan toner soon.'
The "marker-names" status attribute specifies the name(s) for each supply in the Printer, for example 'Black Toner (TK10)' for a B&W laser printer.
The "marker-types" status attribute specifies the type(s) of each supply in the Printer. The following (RFC 3805) types are currently supported:
The "printer-type" status attribute specifies printer type and capability bits for the Printer. The following bits are defined:
| Bit | Description |
|---|---|
| 0x00000001 | Is a printer class. |
| 0x00000002 | Is a remote destination. |
| 0x00000004 | Can print in black. |
| 0x00000008 | Can print in color. |
| 0x00000010 | Can print on both sides of the page in hardware. |
| 0x00000020 | Can staple output. |
| 0x00000040 | Can do fast copies in hardware. |
| 0x00000080 | Can do fast copy collation in hardware. |
| 0x00000100 | Can punch output. |
| 0x00000200 | Can cover output. |
| 0x00000400 | Can bind output. |
| 0x00000800 | Can sort output. |
| 0x00001000 | Can handle media up to US-Legal/A4. |
| 0x00002000 | Can handle media from US-Legal/A4 to ISO-C/A2. |
| 0x00004000 | Can handle media larger than ISO-C/A2. |
| 0x00008000 | Can handle user-defined media sizes. |
| 0x00010000 | Is an implicit (server-generated) class. |
| 0x00020000 | Is the a default printer on the network. |
| 0x00040000 | Is a facsimile device. |
| 0x00080000 | Is rejecting jobs. |
| 0x00100000 | Delete this queue. |
| 0x00200000 | Queue is not shared. |
| 0x00400000 | Queue requires authentication. |
| 0x00800000 | Queue supports CUPS command files. |
| 0x01000000 | Queue was automatically discovered and added. |
| 0x02000000 | Queue is a scanner with no printing capabilities. |
| 0x04000000 | Queue is a printer with scanning capabilities. |