Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
CUPS
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Computer printing system}} {{for2|the drinkware|Cup||Cup (disambiguation)}} {{Use mdy dates|date=October 2013}} {{Primary sources|date=May 2011}} {{Infobox software | name = Apple CUPS | logo = [[File:CUPS.svg|frameless|class=skin-invert]] | author = [[Michael Sweet (programmer)|Michael Sweet]] ([[Easy Software Products]]) | developer = [[Apple Inc.]] | released = {{Start date|1999|06|09}} | latest release version = 2.3.6 | latest release date = May 25, 2022 | repo = https://github.com/apple/cups | programming language = [[C (programming language)|C]] | operating system = [[macOS]], [[iOS]], and [[iPadOS]] (Prior to 2020: Other [[Unix-like]], [[Microsoft Windows|Windows]], and [[ArcaOS]]<ref>{{cite web|url=https://www.arcanoae.com/arcaos/arcaos-screenshots/captured010/|title=CUPS 2|access-date=2020-09-03}}</ref>) | genre = [[Print server]] | license = [[Apache License 2.0]]<ref name="license">{{cite web|url=https://github.com/apple/cups/blob/master/LICENSE|title=CUPS Software License Agreement|website=[[GitHub]] |at=License Exceptions|access-date=November 8, 2017|url-status=live|archive-url=https://web.archive.org/web/20171110142531/https://github.com/apple/cups/blob/master/LICENSE|archive-date=November 10, 2017}}</ref> | website = {{URL|https://www.cups.org}} | replaced_by = OpenPrinting CUPS (except macOS, iOS, and iPadOS) | discontinued = no }} {{Infobox software | name = OpenPrinting CUPS | developer = OpenPrinting and community | latest release version = {{wikidata|property|preferred|references|edit|Q868171|P348|P548=Q2804309}} | latest release date = {{wikidata|qualifier|preferred|single|Q868171|P348|P548=Q2804309|P577}} | latest preview version = {{wikidata|property|preferred|references|edit|Q868171|P348|P548=Q51930650}} | latest preview date = {{wikidata|qualifier|preferred|single|Q868171|P348|P548=Q51930650|P577}} | operating system = [[Unix-like]] and [[ArcaOS]]<ref>{{cite web|url=https://www.arcanoae.com/arcaos/arcaos-screenshots/captured010/|title=CUPS 2|access-date=2020-09-03}}</ref> | repo = {{URL|github.com/openprinting/cups}} | website = {{URL|openprinting.github.io/cups/}} | replaces = Apple CUPS (except macOS, iOS, and iPadOS) }} '''CUPS''' (formerly an [[acronym]] for '''Common UNIX Printing System''') is a modular [[computer printer|printing]] system for [[Unix-like]] computer [[operating systems]] which allows a computer to act as a [[print server]]. A computer running CUPS is a [[Server (computing)|host]] that can accept print jobs from [[client (computing)|client]] computers, process them, and send them to the appropriate printer. CUPS consists of a [[print spooler]] and scheduler, a filter system that converts the print data to a format that the printer will understand, and a backend system that sends this data to the print device. CUPS uses the [[Internet Printing Protocol]] (IPP) as the basis for managing [[print job]]s and [[queue (printing)|queues]]. It also provides the traditional [[command line interface]]s for the [[System V printing system|System V]] and [[Berkeley printing system|Berkeley]] print systems, and provides support for the Berkeley print system's [[Line Printer Daemon protocol]] and limited support for the [[Server Message Block]] (SMB) protocol. System administrators can configure the [[device driver]]s which CUPS supplies by editing text files in Adobe's [[PostScript Printer Description]] (PPD) format. There are a number of user interfaces for different platforms that can configure CUPS, and it has a built-in web-based interface. CUPS is [[free software]], provided under the [[Apache License]]. == History == [[Michael Sweet (programmer)|Michael Sweet]], who owned [[Easy Software Products]], started developing CUPS in 1997 and the first public betas appeared in 1999.<ref name="BetaAnnouncement">{{cite web|last=Sweet|first=Michael|date=June 9, 1999|url=http://linuxtoday.com/news_story.php3?ltsn=1999-06-09-014-10-NW-SM|title=A Bright New Future for Printing on Linux|work=Linux Today|url-status=live|archive-url=https://web.archive.org/web/20071005023152/http://www.linuxtoday.com/news_story.php3?ltsn=1999-06-09-014-10-NW-SM|archive-date=October 5, 2007}}</ref><ref name="BetaAnnouncement2">{{cite web|last=Sweet|first=Michael|date=June 11, 1999|url=http://linuxtoday.com/news_story.php3?ltsn=1999-06-11-018-10-NW-SM|title=The Future Brightens for Linux Printing|work=Linux Today|url-status=live|archive-url=https://web.archive.org/web/20050108235355/http://linuxtoday.com/news_story.php3?ltsn=1999-06-11-018-10-NW-SM|archive-date=January 8, 2005}}</ref> The original design of CUPS used the [[Line Printer Daemon protocol]] (LPD), but due to limitations in LPD and vendor incompatibilities, the [[Internet Printing Protocol]] (IPP) was chosen instead. CUPS was initially called "The Common UNIX Printing System". This name was shortened to just "CUPS" beginning with CUPS 1.4 due to legal concerns with the UNIX trademark.<ref name="CUPSName">{{cite web|date=April 24, 2012|title=CUPS Presentation at 2012 Open Printing Summit|url=http://ftp.pwg.org/pub/pwg/liaison/openprinting/presentations/cups-plenary-april-12.pdf|url-status=live|archive-url=https://web.archive.org/web/20170214175407/http://ftp.pwg.org/pub/pwg/liaison/openprinting/presentations/cups-plenary-april-12.pdf|archive-date=February 14, 2017|df=mdy-all}}</ref> CUPS was quickly adopted as the default printing system for most [[Linux distribution]]s. In March 2002, [[Apple Inc.]] adopted CUPS as the printing system for [[Mac OS X]] 10.2.<ref name="AppleAdoption">{{cite web|work=Easy Software Products|url=http://www.cups.org/blog.php?L68+I0+Qapple|title=CUPS Licensed for Use in Apple Operating Systems!|type=[[press release]]|date=March 1, 2002|url-status=live|archive-url=https://web.archive.org/web/20151208151347/http://www.cups.org/blog.php?L68+I0+Qapple|archive-date=December 8, 2015}}</ref> In February 2007, [[Apple Inc.]] hired chief developer Michael Sweet and purchased the CUPS source code.<ref name="ApplePurchase">{{cite press release |publisher=CUPS|url=https://www.cups.org/blog.php?L475|title=CUPS Purchased by Apple Inc. |date=July 11, 2007|url-status=dead|archive-url=https://web.archive.org/web/20140331093622/http://cups.org/blog.php?L475|archive-date=March 31, 2014|access-date=June 5, 2014}}</ref> On December 20, 2019, Michael Sweet announced on his blog that he had left Apple.<ref>{{Cite web |last=Anderson |first=Tim |date=2020-10-15 |title=Has Apple abandoned CUPS, the Linux's world's widely used open-source printing system? Seems so |url=https://www.theregister.com/2020/10/15/apple_cups_develoment/ |access-date=2023-01-07 |website=[[The Register]] |language=en}}</ref><ref>{{Cite web|url=https://www.msweet.org/blog/2019-12-20-left-apple.html|title=Thoughts on Leaving Apple...|website=www.msweet.org}}</ref> In 2020, the [[OpenPrinting]] organization forked the project, with Michael Sweet continuing work on it. Apple retained the builds for macOS, [[iOS]], and [[iPadOS]] with latest release of Apple CUPS being version 2.3.6 on May 25, 2022.<ref>{{Cite web |last=Proven |first=Liam |date=2022-11-10 |title=OpenPrinting keeps old printers working, even on Windows |url=https://www.theregister.com/2022/11/10/openprinting_keeps_old_printers_working/ |access-date=2023-01-07 |website=[[The Register]] |language=en}}</ref><ref>{{cite web |url=https://github.com/OpenPrinting/cups/commit/0fa2987637adc27ecab69ee29acc4cde19daff7d#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5 |title=Add an OpenPrinting changes file. |author=Michael Sweet |date=October 17, 2020 |website=CUPS (OpenPrinting fork) repository |publisher=GitHub }}</ref><ref>{{Cite web |title=CUPS.org |url=https://www.cups.org/ |access-date=2025-02-23 |website=CUPS.org |publisher=Apple Inc.}}</ref> In 2024, a critical vulnerability involving [[remote code execution]] in CUPS was found impacting all GNU/Linux systems.<ref>{{Cite web |last=Lyons |first=Jessica |date=2024-09-26 |title=Critical doomsday Linux bug is CUPS-based vulnerability |url=https://www.theregister.com/2024/09/26/cups_linux_rce_disclosed/ |access-date=2024-09-27 |website=The Register}}</ref> == Overview == [[File:Cups simple.svg|150px|right]] CUPS provides a mechanism that allows print jobs to be sent to printers in a standard fashion. The print data goes to a ''scheduler''<ref name="scheduler">{{cite web|website=CUPS documentation|publisher=[[Apple Inc.]]|url=https://www.cups.org/doc/spec-design.html|title=CUPS Design Description|at=Scheduler|access-date=December 31, 2020}}</ref> which sends jobs to a ''filter system'' that converts the print job into a format the printer will understand.<ref name="Filters">{{cite web|website=CUPS documentation|publisher=[[Apple Inc.]]|url=https://www.cups.org/doc/spec-design.html|title=CUPS Design Description|at=Filters|access-date=December 31, 2020}}</ref> The filter system then passes the data on to a ''backend''βa special filter that sends print data to a device or network connection.<ref name="backend">{{cite web|website=CUPS documentation|publisher=[[Apple Inc.]]|url=https://www.cups.org/doc/spec-design.html|title=CUPS Design Description|at=Backend|access-date=December 31, 2020}}</ref> The system makes extensive use of [[PostScript]] and [[raster graphics|rasterization]] of data to convert the data into a format suitable for the destination printer. CUPS offers a standard and modularised printing system that can process numerous data formats on the print server. Before CUPS, it was difficult to find a standard printer management system that would accommodate the very wide variety of printers on the market using their own printer languages and formats. For instance, the System V and Berkeley printing systems were largely incompatible with each other, and they required complicated scripts and workarounds to convert the program's data format to a printable format. They often could not detect the file format that was being sent to the printer and thus could not automatically and correctly convert the data stream. Additionally, data conversion was performed on individual workstations rather than a central server. CUPS allows printer manufacturers and printer-driver developers to create drivers more easily that work natively on the print server. Processing occurs on the server, allowing for easier network-based printing than with other Unix printing systems. With [[Samba software|Samba]] installed, users can address printers on remote Windows computers, and generic PostScript drivers can be used for printing across the network. === Scheduler === The CUPS scheduler implements [[Internet Printing Protocol]] (IPP) over HTTP/1.1. A helper application (cups-lpd) converts [[Line Printer Daemon protocol]] (LPD) requests to IPP. The scheduler also provides a web-based interface for managing print jobs, the configuration of the server, and for documentation about CUPS itself.<ref name="scheduler" /> An ''authorization'' module controls which IPP and HTTP messages can pass through the system.<ref name="auth">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Design|url=http://www.cups.org/doc-1.1/sdd.html#3_8_1|title=Authorization|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_8_1|archive-date=January 10, 2007}}</ref> Once the IPP/HTTP packets are authorized they are sent to the ''client'' module, which listens for and processes incoming connections. The client module is also responsible for executing external [[Common Gateway Interface|CGI]] programs as needed to support web-based printers, classes, and job status monitoring and administration.<ref name="clientmodule">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Administrators Manual|url=http://www.cups.org/doc-1.1/sdd.html#3_8_3|title=Authorisation|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_8_3|archive-date=January 10, 2007}}</ref> Once this module has processed its requests, it sends them to the ''IPP'' module which performs [[Uniform Resource Identifier]] (URI) validation to prevent a client from sidestepping any [[access control]]s or [[authentication]] on the HTTP server.<ref name="ippmodule">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Design|url=http://www.cups.org/doc-1.1/sdd.html#3_8_7|title=IPP|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_8_7|archive-date=January 10, 2007}}</ref> The URI is a text [[String (computer science)|string]] that indicates a name or address that can be used to refer to an abstract or physical resource on a network. The scheduler allows for classes of printers. Applications can send requests to groups of printers in a class, allowing the scheduler to direct the job to the first available printer in that class.<ref name="classes">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Administrators Manual|url=http://www.cups.org/doc-1.1/sam.html#2_4|title=Classes|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070106145359/http://www.cups.org/doc-1.1/sam.html#2_4|archive-date=January 6, 2007}}</ref> A ''jobs'' module manages print jobs, sending them to the filter and backend processes for final conversion and printing, and monitoring the status messages from those processes.<ref name="jobs">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Administrators Manual|url=http://www.cups.org/doc-1.1/sam.html#2_3|title=Jobs|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070106145359/http://www.cups.org/doc-1.1/sam.html#2_3|archive-date=January 6, 2007}}</ref> The CUPS scheduler utilizes a ''configuration'' module, which parses configuration files, initializes CUPS [[data structure]]s, and starts and stops the CUPS program. The configuration module will stop CUPS services during configuration file processing and then restart the service when processing is complete.<ref name="configurationmodule">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Design|url=http://www.cups.org/doc-1.1/sdd.html#3_8_4|title=Configuration|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_8_4|archive-date=January 10, 2007}}</ref> A ''logging'' module handles the logging of scheduler events for access, error, and page [[Computer data logging|log files]]. The ''main'' module handles timeouts and dispatch of I/O requests for client connections, watching for [[Signal (computing)|signals]], handling child process errors and exits, and reloading the server configuration files as needed.<ref name="loggingmodule">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Design|url=http://www.cups.org/doc-1.1/sdd.html#3_8_9|title=Logging|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_8_9|archive-date=January 10, 2007}}</ref> Other modules used by the scheduler include: * the ''MIME'' module, which handles a [[Multipurpose Internet Mail Extensions]] (MIME) type and conversion database used in the filtering process that converts print data to a format suitable for a print device;<ref name="MIMEmodule">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Design|url=http://www.cups.org/doc-1.1/sdd.html#3_8_11|title=MIME|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_8_11|archive-date=January 10, 2007}}</ref> * a ''PPD'' module that handles a list of [[Postscript Printer Description]] (PPD) files;<ref name="ppdmodule">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Design|url=http://www.cups.org/doc-1.1/sdd.html#3_8_12|title=PPD|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_8_12|archive-date=January 10, 2007}}</ref> * a ''devices'' module that manages a list of devices that are available in the system;<ref name="devicesmodule">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Design|url=http://www.cups.org/doc-1.1/sdd.html#3_8_5|title=Devices|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_8_5|archive-date=January 10, 2007}}</ref> * a ''printers'' module that handles printers and PPDs within CUPS.<ref name="printersmodule">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Design|url=http://www.cups.org/doc-1.1/sdd.html#3_8_13|title=Printers|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_8_13|archive-date=January 10, 2007}}</ref> === Filter system === [[File:CUPS-block-diagram.svg|200px|thumb|CUPS allows users to send different data to the CUPS server and have that data converted into a format the printer will understand and be able to print]] CUPS can process a variety of data formats on the print server. It converts the print-job data into the final language/format of the printer via a series of ''filters''.<ref name="filtersadmin">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Administrators Manual|url=http://www.cups.org/doc-1.1/sam.html#2_5|title=Filters|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070106145359/http://www.cups.org/doc-1.1/sam.html#2_5|archive-date=January 6, 2007}}</ref><ref name="filters_sdd">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Design|url=http://www.cups.org/doc-1.1/sdd.html#3_7|title=Filters|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_7|archive-date=January 10, 2007}}</ref> It uses [[Internet media type|MIME types]] for identifying file formats. ==== MIME databases ==== After the CUPS system has assigned the print job to the scheduler, it is passed to the CUPS filter system. This converts the data to a format suitable for the printer. During start-up, the CUPS daemon loads two MIME databases: <code>mime.types</code> that defines the known file types that CUPS can accept data for, and <code>mime.convs</code> that defines the programs that process each particular MIME type.<ref name="MIMEadmin">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Administrators Manual|url=http://www.cups.org/doc-1.1/sam.html#FILE_TYPING_FILTERING|title=File Typing and Filtering|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070106145359/http://www.cups.org/doc-1.1/sam.html#FILE_TYPING_FILTERING|archive-date=January 6, 2007}}</ref> The <code>mime.types</code> file has the syntax: <code>mimetype { [file-extensions] | [pattern-match] }</code> For example, to detect an [[HTML]] file, the following entry would be applicable: <code>text/html html htm \</code><br/> :<code>printable(0,1024) + (string(0,"<nowiki><HTML></nowiki>") string(0,"<!DOCTYPE"))</code> The second line matches the file contents to the specified MIME type by determining that the first kilobyte of text in the file holds printable characters and that those characters include HTML markup. If the pattern above matches, then the filter system would mark the file as the MIME type text/html.<ref name="mime_types">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Administrators Manual|url=http://www.cups.org/doc-1.1/sam.html#7_13_1|title=mime.types|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070106145359/http://www.cups.org/doc-1.1/sam.html#7_13_1|archive-date=January 6, 2007}}</ref> The <code>mime.convs</code> file has the syntax: <code>source destination cost program</code> The ''source'' field designates the MIME type that is determined by looking up the <code>mime.types</code> file, while the ''destination'' field lists the type of output requested and determines what program should be used. This is also retrieved from <code>mime.types</code>. The ''cost'' field assists in the selection of sets of filters when converting a file. The last field, ''program'', determines which filter program to use to perform the data conversion.<ref name="mime_convs">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Administrators Manual|url=http://www.cups.org/doc-1.1/sam.html#7_13_Γ©|title=mime.convs|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070106145359/http://www.cups.org/doc-1.1/sam.html#7_13_Γ©|archive-date=January 6, 2007}}</ref> Some examples: text/plain application/postscript 50 texttops application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster image/* application/vnd.cups-postscript 50 imagetops image/* application/vnd.cups-raster 50 imagetoraster ==== Filtering process ==== The filtering process works by taking input data pre-formatted with six arguments: # the job ID of the print job # the user name # the job name # the number of copies to print # any print options # the filename (though this is unnecessary if it has been redirected from [[standard input]]).<ref name="filters_sdd"/> It then determines the type of data that is being input and the filter to be used through the use of the MIME databases; for instance, image data will be detected and processed through a particular filter, and HTML data detected and processed through another filter. CUPS can convert supplied data either into [[PostScript]] data or directly into raster data. If it is converted into PostScript data an additional filter is applied called a ''prefilter'', which runs the PostScript data through another PostScript converter so that it can add printer-specific options like selecting page ranges to print, setting ''n''-up mode and other device-specific things.<ref name="pstops">{{cite web|work=[[Easy Software Products]]|publisher=CUPS Software Administrators Manual|url=http://www.cups.org/doc-1.1/sdd.html#3_7_5|title=pstops|access-date=January 9, 2007|url-status=dead|archive-url=https://web.archive.org/web/20070110180805/http://www.cups.org/doc-1.1/sdd.html#3_7_5|archive-date=January 10, 2007}}</ref> After the pre-filtering is done, the data can either be sent directly to a CUPS [[#Backends|backend]] if using a PostScript printer, or it can be passed to another filter like [[Foomatic]] by [[linuxprinting.org]]. Alternatively, it can be passed to [[Ghostscript]], which converts the PostScript into an intermediary ''CUPS-raster'' format.<ref name="cups-raster MIME type">The MIME type for the CUPS raster format is application/vnd.cups-raster.</ref> The intermediary raster format is then passed onto a final filter which converts the raster data to a printer-specific format. The default filters included with CUPS include: * raster to [[Printer Command Language|PCL]] * raster to [[ESC/P]] or [[ESC/P2]] (an [[Epson]] printer language, now largely superseded by their new ESC/P-Raster format) * raster to [[Dymo]] (another printer company). * raster to Zebra Programming Language or ZPL (a [[Zebra Technologies]] printer language) {{As of | 2009}} other proprietary languages like GDI or SPL (Samsung Printer Language) are supported by Splix, a raster to SPL translator.<ref>{{Cite web|url=http://splix.sourceforge.net/|title=SPL driver for UNIX|website=splix.sourceforge.net}}</ref> However, several other alternatives can integrate with CUPS. [[HPLIP]] (previously known as HP-IJS) provides Linux+CUPS drivers for HP printers, [[Gutenprint]] (previously known as Gimp-Print) is a range of high-quality printer drivers for (mostly) inkjet printers, and [[TurboPrint]] for Linux has another range of quality printer drivers for a wide range of printers. === Backends === The backends are the ways in which CUPS sends data to printers. There are several backends available for CUPS: [[parallel port|parallel]], [[serial port|serial]], and [[USB]] ports, cups-pdf<ref>{{cite web|url=https://packages.debian.org/wheezy/cups-pdf|title=Debian - Details of package cups-pdf in wheezy|url-status=live|archive-url=https://web.archive.org/web/20150501081102/https://packages.debian.org/wheezy/cups-pdf|archive-date=May 1, 2015}}</ref> PDF Virtual Printing, as well as network backends that operate via the [[Internet Printing Protocol|IPP]], [[JetDirect]] (AppSocket), [[Line Printer Daemon]] ("LPD"), and [[Server Message Block|SMB]] [[Protocol (computing)|protocol]]s. A new <code>mdns</code> backend in CUPS 1.4 provides [[Bonjour (software)|Bonjour]] ([[DNS-SD]]) based printer discovery.<ref>{{cite web|url=http://www.cups.org/documentation.php/doc-1.4/whatsnew.html|title=What's New in CUPS 1.4|url-status=dead|archive-url=https://web.archive.org/web/20121102142550/http://cups.org/documentation.php/doc-1.4/whatsnew.html|archive-date=November 2, 2012}}</ref> In CUPS 1.6, Bonjour printer discovery and sharing using [[Avahi (software)|Avahi]] is also supported.<ref>{{cite web|url=http://www.cups.org/documentation.php/doc-1.6/whatsnew.html|title=What's New in CUPS 1.6|url-status=dead|archive-url=https://web.archive.org/web/20121004041235/http://cups.org/documentation.php/doc-1.6/whatsnew.html|archive-date=October 4, 2012}}</ref> == Compatibility == CUPS provides both the System V and Berkeley printing commands, so users can continue with traditional commands for printing via CUPS. CUPS uses port 631 (TCP and UDP), which is the standard IPP port, and optionally on port 515 by [[inetd]], [[launchd]], the [[Solaris (operating system)|Solaris]] [[Service Management Facility]], or [[xinetd]] which use the cups-lpd helper program to support LPD printing. When CUPS is installed the <code>[[lp (Unix)|lp]]</code> [[System V printing system]] command and the <code>lpr</code> [[Berkeley printing system]] commands are installed as compatible programs. This allows a standard interface to CUPS and allows maximum compatibility with existing applications that rely on these printing systems. == User interface tools == Several tools exist to help set up CUPS. === CUPS web-based administration interface === [[File:OpenPrinting CUPS screenshot.webp|thumb|CUPS web-based interface]] [[File:OpenPrinting CUPS managing printer screenshot.webp|thumb|Printers information in CUPS web-based interface]] On all platforms, CUPS has a web-based administration interface that runs on [[TCP and UDP port|port]] [[List of TCP and UDP port numbers|631]].<ref name="AdminPort">{{cite web|url=http://www.cups.org/sam.html#4_4|publisher=CUPS Software Administrators Manual|title=Managing Printers from the Web|url-status=dead|archive-url=https://web.archive.org/web/20041225043927/http://www.cups.org/sam.html#4_4|archive-date=December 25, 2004}}</ref> It particularly helps organisations that need to monitor print jobs and add print queues and printers remotely. CUPS 1.0 provided a simple class, job, and printer-monitoring interface for web browsers. CUPS 1.1 replaced this interface with an enhanced administration interface that allows users to add, modify, delete, configure, and control classes, jobs, and printers. CUPS 1.2 and later provide a revamped web interface which features improved readability and design, support for automatically discovered printers, and better access to system logs and advanced settings. === GNOME === [[File:GNOME Settings (Printers) screenshot.png|thumb|left|GNOME Settings as of version 40]] In [[GNOME]] starting from GNOME 3, CUPS printing has been handled in the Settings application, which is part of the [[GNOME Core Applications#Configuration|GNOME Core Applications]]. The GUI can add CUPS printers and manage CUPS printers and queues.<ref>{{cite web |title=Handling printing in GNOME Red Hat Enterprise Linux 8 |url=https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_the_desktop_environment_in_rhel_8/getting-started-with-gnome_using-the-desktop-environment-in-rhel-8#handling-printing_getting-started-with-gnome |website=Red Hat Customer Portal |publisher=Red Hat |access-date=12 May 2021 |language=en}}</ref> Before GNOME 3, the [[GNOME]] Print Settings (formerly called CUPS Manager) were used to perform these tasks.<ref>{{cite web|url=http://manpages.ubuntu.com/manpages/hardy/man1/gnome-cups-manager.1.html|title=gnome-cups-manager|url-status=dead|archive-url=https://web.archive.org/web/20140915052227/http://manpages.ubuntu.com/manpages/hardy/man1/gnome-cups-manager.1.html|archive-date=September 15, 2014}}</ref> GNOME's [[widget toolkit]] [[GTK+]] included integrated printing support based on CUPS in its version 2.10, released in 2006. === KDE === [[File:Printers configuration on KDE Plasma 6 screenshot.webp|thumb|Printers configuration on [[KDE Plasma 6]]]] The KDEPrint framework for [[KDE]] contains various [[graphical user interface|GUI]] tools that act as CUPS [[front end processor (program)|front ends]] and allows the administration of classes, print queues and print jobs; it includes a printer wizard to assist with adding new printers amongst other features.<ref name="KDE01">{{cite web|url = http://printing.kde.org/|title = KDEPrint Homepage|access-date = April 2, 2008|last = printing.kde.org Webmaster|url-status = dead|archive-url = https://web.archive.org/web/20080509132047/http://printing.kde.org/|archive-date = May 9, 2008|df = mdy-all}}</ref> KDEPrint first appeared in KDE 2.2. KDEPrint supports several different printing platforms, with CUPS one of the best supported. It replaced a previous version of printing support in KDE, ''qtcups'' and is backwards compatible with this module of KDE. {{As of | 2009}} ''kprinter'', a [[dialogue box|dialogue-box]] program, serves as the main tool for sending jobs to the print device; it can also be started from the [[command line]]. KDEPrint includes a system to pre-filter any jobs before they are handed over to CUPS, or to handle jobs all on its own, such as converting files to [[Portable Document Format|PDF]]. These filters are described by a pair of Desktop/[[XML]] files. KDEPrint's main components include: * a Print Dialog box, which allows printer properties to be modified * a Print Manager, which allows management of printers, such as adding and removing printers, through an Add Printer Wizard * a Job Viewer/Manager, which manages printer jobs, such as hold/release, cancel and move to another printer * a CUPS configuration module (integrated into KDE) === Mac OS X === <!-- Image with inadequate rationale removed: [[File:printersetup.png|thumb|right|Screenshot of Printer Setup Utility]] --> In Mac OS X 10.5, printers are configured in the Print & Fax panel in [[System Preferences]], and in printer proxy applications which display the print queues and allow additional configuration after printers are set up. Earlier versions of Mac OS X also included a [[Printer Setup Utility]], which supplied configuration options missing from earlier versions of the Print & Fax preference pane.{{Citation needed|date=August 2009}} === PrinterSetup === The PrinterSetup system can manage CUPS queues. It takes the approach of assigning a text file to describe each print queue. These 'PrinterSetupFiles' may then be added to other text files called 'PrinterSetupLists'. This allows logical grouping of printers. {{As of | 2009}} the PrinterSetup project remains in its infancy.<ref name="Lucid Information Systems">{{cite web|url=http://www.lucidsystems.org/printersetup/moreinformation.php|title=Printer Setup is in a prototyping phase|work=Lucid Information Systems|url-status=dead|archive-url=https://web.archive.org/web/20080828092855/http://www.lucidsystems.org/printersetup/moreinformation.php|archive-date=August 28, 2008}}</ref> === Red Hat Linux/Fedora === [[File:Fedora-CUPS-gui.png|thumb|Fedora provides a print manager that can modify CUPS-based printers]] Starting with Red Hat Linux 9, Red Hat provided an integrated print manager based on CUPS and integrated into [[GNOME]]. This allowed adding printers via a user interface similar to the one [[Microsoft Windows]] uses, where a new printer could be added using an ''add new printer wizard'', along with changing default printer properties in a window containing a list of installed printers. Jobs could also be started and stopped using a print manager, and the printer could be paused using a [[context menu]] that pops up when the printer icon is right-clicked. [[Eric S. Raymond|Eric Raymond]] criticised this system in his piece ''The Luxury of Ignorance''. Raymond had attempted to install CUPS using the Fedora Core 1 print manager but found it non-intuitive; he criticised the interface designers for not designing with the user's point of view in mind. He found the idea of printer queues not obvious because users create queues on their local computer but these queues are actually created on the CUPS server. He also found the plethora of queue-type options confusing as he could choose from between networked CUPS (IPP), networked Unix ([[Line Printer Daemon protocol|LPD]]), networked Windows ([[Server Message Block|SMB]]), networked Novell ([[NetWare Core Protocol|NCP]]) or networked [[JetDirect]]. He found the help file singularly unhelpful and largely irrelevant to a user's needs. Raymond used CUPS as a general topic to show that user-interface design on Linux desktops needs rethinking and more careful design. He stated:<ref>{{cite web|url=http://www.catb.org/~esr/writings/cups-horror.html|title=The Luxury of Ignorance: An Open-Source Horror Story|url-status=live|archive-url=https://web.archive.org/web/20100528112951/http://www.catb.org/~esr/writings/cups-horror.html|archive-date=May 28, 2010}}</ref> <blockquote>The meta-problem here is that the configuration wizard does all the approved rituals (GUI with standardized clicky buttons, help popping up in a browser, etc. etc.) but doesn't have the central attribute these are supposed to achieve: discoverability. That is, the quality that every point in the interface has prompts and actions attached to it from which you can learn what to do next. Does your project have this quality?</blockquote> === ESP Print Pro === [[Easy Software Products]], the original creators of CUPS, created a GUI, provided support for many printers and implemented a PostScript [[Raster image processor|RIP]]. ESP Print Pro ran on Windows, UNIX and Linux, but is no longer available and support for this product ended on December 31, 2007.<ref>{{cite web|url=http://www.easysw.com/discontinued.php|title=Easy Software Products' ESP Print Pro|url-status=dead|archive-url=https://web.archive.org/web/20090619184222/http://www.easysw.com/discontinued.php|archive-date=June 19, 2009}}</ref> == See also == {{Portal|Free and open-source software}} * [[Foomatic]] * [[Gutenprint]] * [[HP Linux Imaging and Printing]] * [[Lp (Unix)]] * [[LPRng]] * [[Scanner Access Now Easy]] * [[Spooling]] * [[Xprint]] == References == {{Reflist|30em}} == Further reading == * [http://www.linuxprinting.org/CUPS-Filter-Chart.html Design of CUPS Filtering System β including the context for Mac OS X ("Jaguar")]. ''LinuxPrinting.org''. Retrieved January 5, 2005. * [[KDE]]. ''[https://web.archive.org/web/20050207054956/http://printing.kde.org/info/ KDEPrint information]''. KDE-printing website. Retrieved January 14, 2005. * [https://www.linux.com/learn/tutorials/774476-how-to-manage-printers-in-linux How to Manage Printers in Linux], Linux.com, 2015-04-27. == External links == * {{Freshmeat|cups|CUPS}} * [https://wiki.linuxfoundation.org/openprinting/start OpenPrinting] * [https://web.archive.org/web/20081017120654/http://upnp.org/standardizeddcps/printer.asp Universal Plug and Play β Printer Device V 1.0 and Printer Basic Service V 1.0] {{FLOSS}} {{DEFAULTSORT:Cups}} [[Category:1999 software]] [[Category:Apple Inc. acquisitions]] [[Category:Apple Inc. software]] [[Category:Computer printing]] [[Category:Device drivers]] [[Category:Free PDF software]] [[Category:Free software programmed in C]] [[Category:Unix network-related software]] [[Category:Software using the Apache license]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:As of
(
edit
)
Template:Citation needed
(
edit
)
Template:Cite press release
(
edit
)
Template:Cite web
(
edit
)
Template:FLOSS
(
edit
)
Template:For2
(
edit
)
Template:Freshmeat
(
edit
)
Template:Infobox software
(
edit
)
Template:Portal
(
edit
)
Template:Primary sources
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Use mdy dates
(
edit
)