For more information, see the Wikipedia Article
CUPS (Common Unix Printing System) was created in 1997 by Michael Sweet, initially designed as an open-source project to standardize printing across Unix and Unix-like operating systems. 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.
In March 2002, Apple Inc. adopted CUPS as the printing system for Mac OS X 10.2. In February 2007, Apple Inc. hired chief developer Michael Sweet and purchased the CUPS source code. Michael Sweet announced that he is leaving Apple in December of 2019, and in 2020, the OpenPrinting Organization forked the project, with Michael Sweet continuing the work. CUPS is a free software under the Apache license.
CUPS is a full-featured printing solution which includes:
CUPS is included in Ubuntu software repositories (sudo apt install cups). Ubuntu uses the lpadmin and lp groups as the default system group for bulk managing user access to printer and administrative functions. The cups-pdf package installs a virtual PDF printer.
The default configuration and files:
/etc/cups/cupsd.conf: global cups daemon settings such as port numbers, web interface, authentication, and other settings/etc/cups/cups-browsed.conf: discovery of remote printers/etc/cups/cups-files.conf: location of files for spools, config, auxiliary, logs, and device files/etc/cups/printers.conf: Active printer queue definitions/etc/cups/cups-pdf.conf: The cups-pdf configuration fileManaging the service is done via systemd as with many other daemons using service cups [ start | stop | restart ]. The web-based user interface can be used to administrate printers on a system locally or over a network. If configuring and using the web UI, be sure to take security and access control into consideration.
The default logs are located under /var/logs and may be under access_log and error_log. You can configure the logs by modifying directives under the /etc/cups/cups-files.conf:
AccessLog /var/log/cups/access_logErrorLog /var/log/cups/error_logPageLog /var/log/cups/page_logThere are CLI utilities for administrating printers locally:
cupsctl: can be used to modify services and configslpinfo: show available devices and driversippfind: can browse the network for printerslpstat: can show the status of print queuescupsenable and cupsdisable: used to enable and disable output devicescupsaccept and cupsreject: can enable/disable job submission to the queuelpadmin: can configure queues and classes and set the system default printerAdditionally, users can submit and manage print jobs using the following CLI utilities:
lp: “line printer” can be used to print simple fileslpmove: move a job or all jobs to a new destinationcancel: cancel jobslpoptions: change print setting defaults (per user basis)Refer to the manpages for each of these utilities and commands for more details.