Table des matières
Printer Management
Introduction
The Common Unix Printing System is a printer management system for Unix and Unix-like operating systems owned by Apple™ who purchased the source code when they hired the main developer, Michael Sweet of Easy Software Products.
Protocols
Cups uses a protocol called IPP on ports udp/631 and tcp/631.
IPP :
- is an extension of the HTTP protocol,
- allows administration of CUPS via a web browser,
- allows the use of URLs to define print spoolers.
Cups is also compatible with:
- tcp/515 for BSD based systems,
- tcp/9100 for HP networked JeTDirect printers.
Daemon
cupsd is the CUPS system daemon. When CUPS handles a print job, it first passes it to a filter appropriate for the model of the printer to be used and then to a backend dependant upon the type off connection being used. Communication between CUPS, filters and backends is accomplished through spools and pipes.
Configuration
/etc/cups/cupsd.conf
The main configuration file for CUPS is /etc/cups/cupsd.conf. In that file can be found:
- the port that IPP is listening on,
- the user account and group used by the CUPS server,
- the log level,
- the Browse server configuration used to discover printers on the network,
- the spool Acces Control Lists,
- the administration area Access Control Lists.
[root@centos ~]# cat /etc/cups/cupsd.conf MaxLogSize 0 # # "$Id: cupsd.conf.in 8805 2009-08-31 16:34:06Z mike $" # # Sample configuration file for the CUPS scheduler. See "man cupsd.conf" for a # complete description of this file. # # Log general information in error_log - change "warn" to "debug" # for troubleshooting... LogLevel warn # Administrator user group... SystemGroup sys root # Only listen for connections from the local machine. Listen localhost:631 Listen /var/run/cups/cups.sock # Show shared printers on the local network. Browsing On BrowseOrder allow,deny BrowseAllow all BrowseLocalProtocols CUPS dnssd # Default authentication type, when authentication is required... DefaultAuthType Basic # Restrict access to the server... <Location /> Order allow,deny </Location> # Restrict access to the admin pages... <Location /admin> Order allow,deny </Location> # Restrict access to configuration files... <Location /admin/conf> AuthType Default Require user @SYSTEM Order allow,deny </Location> # Set the default printer/job policies... <Policy default> # Job-related operations must be done by the owner or an administrator... <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job CUPS-Get-Document> Require user @OWNER @SYSTEM Order deny,allow </Limit> # All administration operations require an administrator to authenticate... <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices> AuthType Default Require user @SYSTEM Order deny,allow </Limit> # All printer operations require a printer operator to authenticate... <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs> AuthType Default Require user @SYSTEM Order deny,allow </Limit> # Only the owner or an administrator can cancel or authenticate a job... <Limit Cancel-Job CUPS-Authenticate-Job> Require user @OWNER @SYSTEM Order deny,allow </Limit> <Limit All> Order deny,allow </Limit> </Policy> # Set the authenticated printer/job policies... <Policy authenticated> # Job-related operations must be done by the owner or an administrator... <Limit Create-Job Print-Job Print-URI> AuthType Default Order deny,allow </Limit> <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job CUPS-Get-Document> AuthType Default Require user @OWNER @SYSTEM Order deny,allow </Limit> # All administration operations require an administrator to authenticate... <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default> AuthType Default Require user @SYSTEM Order deny,allow </Limit> # All printer operations require a printer operator to authenticate... <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs> AuthType Default Require user @SYSTEM Order deny,allow </Limit> # Only the owner or an administrator can cancel or authenticate a job... <Limit Cancel-Job CUPS-Authenticate-Job> AuthType Default Require user @OWNER @SYSTEM Order deny,allow </Limit> <Limit All> Order deny,allow </Limit> </Policy> # # End of "$Id: cupsd.conf.in 8805 2009-08-31 16:34:06Z mike $". #
Filters
Available filters for the version of CUPS being used can be found in the /usr/lib/cups/filter directory:
[root@centos ~]# ls /usr/lib/cups/filter bannertops commandtoescpx foomatic-rip hpcups hplipjs pdftops pstops rastertodymo rastertogutenprint.5.2 rastertopclx texttopaps commandtocanon commandtopclx gziptoany hpcupsfax imagetops pdftoraster pstopxl rastertoepson rastertohp rastertoptch texttops commandtoepson commandtops hpcac hpgltops imagetoraster pstopdf pstoraster rastertoescpx rastertolabel textonly
Backends
Available backends for the version of CUPS being used can be found in the /usr/lib/cups/backend directory
[root@centos ~]# ls /usr/lib/cups/backend beh dnssd http https ipp lpd mdns ncp parallel scsi serial smb snmp socket usb
Active backends for the server on which CUPS is being used can be found by using the following command:
[root@centos ~]# lpinfo -v network https network lpd network ipp network http network socket direct scsi network smb network beh
Logs
CUPS logs are stored in /var/log/cups:
[root@centos ~]# ls -l /var/log/cups total 24 -rw-------. 1 root lp 9522 Dec 7 15:09 access_log -rw-------. 1 root lp 8879 Dec 7 15:09 error_log
Printers
Available printers for the version of CUPS being used can be found by using the following command:
[root@centos ~]# lpinfo -m | more foomatic:Alps-MD-1000-md2k.ppd Alps MD-1000 Foomatic/md2k foomatic:Alps-MD-1000-ppmtomd.ppd Alps MD-1000 Foomatic/ppmtomd foomatic:Alps-MD-1300-md1xMono.ppd Alps MD-1300 Foomatic/md1xMono foomatic:Alps-MD-1300-md2k.ppd Alps MD-1300 Foomatic/md2k foomatic:Alps-MD-1300-ppmtomd.ppd Alps MD-1300 Foomatic/ppmtomd foomatic:Alps-MD-1500-md1xMono.ppd Alps MD-1500 Foomatic/md1xMono foomatic:Alps-MD-1500-md2k.ppd Alps MD-1500 Foomatic/md2k foomatic:Alps-MD-1500-ppmtomd.ppd Alps MD-1500 Foomatic/ppmtomd foomatic:Alps-MD-2000-md2k.ppd Alps MD-2000 Foomatic/md2k foomatic:Alps-MD-2000-ppmtomd.ppd Alps MD-2000 Foomatic/ppmtomd foomatic:Alps-MD-2010-ppmtomd.ppd Alps MD-2010 Foomatic/ppmtomd foomatic:Alps-MD-2300-ppmtomd.ppd Alps MD-2300 Foomatic/ppmtomd foomatic:Alps-MD-4000-md2k.ppd Alps MD-4000 Foomatic/md2k foomatic:Alps-MD-4000-ppmtomd.ppd Alps MD-4000 Foomatic/ppmtomd foomatic:Alps-MD-5000-md5k.ppd Alps MD-5000 Foomatic/md5k foomatic:Alps-MD-5000-md50Eco.ppd Alps MD-5000 Foomatic/md50Eco foomatic:Alps-MD-5000-md50Mono.ppd Alps MD-5000 Foomatic/md50Mono foomatic:Alps-MD-5000-ppmtomd.ppd Alps MD-5000 Foomatic/ppmtomd foomatic:Alps-MD-5500-ppmtomd.ppd Alps MD-5500 Foomatic/ppmtomd foomatic:Anitech-M24-epson.ppd Anitech M24 Foomatic/epson drv:///hp/hpcups.drv/apollo-2100.ppd Apollo 2100, hpcups 3.12.4 drv:///hp/hpcups.drv/apollo-2150.ppd Apollo 2150, hpcups 3.12.4 drv:///hp/hpcups.drv/apollo-2200.ppd Apollo 2200, hpcups 3.12.4 drv:///hp/hpcups.drv/apollo-2500.ppd Apollo 2500, hpcups 3.12.4 drv:///hp/hpcups.drv/apollo-2600.ppd Apollo 2600, hpcups 3.12.4 drv:///hp/hpcups.drv/apollo-2650.ppd Apollo 2650, hpcups 3.12.4 foomatic:Apollo-P-1200-pcl3.ppd Apollo P-1200 Foomatic/pcl3 foomatic:Apollo-P-1220_Barbie-pcl3.ppd Apollo P-1220 Barbie Foomatic/pcl3 foomatic:Apollo-P-1250-pcl3.ppd Apollo P-1250 Foomatic/pcl3 gutenprint.5.2://pcl-apollo-p2100/expert Apollo P-2100 - CUPS+Gutenprint v5.2.5 gutenprint.5.2://pcl-apollo-p2100/simple Apollo P-2100 - CUPS+Gutenprint v5.2.5 Simplified foomatic:Apollo-P-2100-hpijs-pcl3.ppd Apollo P-2100 Foomatic/hpijs-pcl3 --More--
Administration
The CUPS server can be administered on the command line by using the following commands:
Command | Description |
---|---|
lpadmin | The main administration command for adding, deleting and modifying spools |
accept | Allows jobs to be added to a spool |
reject | Disallows jobs to be added to a spool |
cupsenable | Allows jobs in a spool to be processed |
cupsdisable | Disallows jobs in a spool to be processed |
lpstat | Lists the queud jobs |
cancel | Deletes jobs |
lpmove | Moves jobs from one spool to another |
lpinfo | Lists the filters, backends and printers |
lppasswd | Administers accounts specific to CUPS |
The lpstat Command
The lpstat command is used too view the list of spools:
[root@centos ~]# lpstat -t scheduler is running no system default destination lpstat: No destinations added. lpstat: No destinations added. lpstat: No destinations added. lpstat: No destinations added.
The lpadmin Command
Create a RAW printer spool as follows:
[root@centos ~]# lpadmin -p pri1 -v socket://localhost:12000 -m raw
The switches used here are as follows:
Switch | Description |
---|---|
-p | The spool name |
-v | The printer represented as an URL |
-m | The model to use or the driver |
The URLs can be of the follwoing types:
URL | Description |
---|---|
file:/path/filename | Print to a file |
http://server:631/ipp/port1 | Print via HTTP |
lpd://server/queue | Print via LPD |
ipp://server:631/printers/queue | Print via IPP |
smb://workgroup/serveur/nompartage | Print via SMB |
socket://server | Print via JetDirect |
serial:/dev/ttyS0?baud=1200+bits=8+parity=none+flow=none | Print via a serial port |
parallel:/dev/lp0 | Print via a parallel port |
Now check that the spool has been created :
[root@centos ~]# lpstat -t scheduler is running no system default destination device for pri1: socket://localhost:12000 pri1 not accepting requests since Sat 07 Dec 2013 03:35:52 PM CET - reason unknown printer pri1 disabled since Sat 07 Dec 2013 03:35:52 PM CET - reason unknown
The accept and cupsenable Commands
It is now possible to use the accept and cupsenable commands to activate the print spool:
[root@centos ~]# accept pri1 [root@centos ~]# lpstat -t scheduler is running no system default destination device for pri1: socket://localhost:12000 pri1 accepting requests since Sat 07 Dec 2013 03:35:52 PM CET printer pri1 disabled since Sat 07 Dec 2013 03:35:52 PM CET - reason unknown [root@centos ~]# cupsenable pri1 [root@centos ~]# lpstat -t scheduler is running no system default destination device for pri1: socket://localhost:12000 pri1 accepting requests since Sat 07 Dec 2013 03:42:45 PM CET printer pri1 is idle. enabled since Sat 07 Dec 2013 03:42:45 PM CET
Setting Up the Default Printer
The -d option of the lpadmin command can be used to define a spool as the default destination:
[root@centos ~]# lpadmin -d pri1 [root@centos ~]# lpstat -t scheduler is running system default destination: pri1 device for pri1: socket://localhost:12000 pri1 accepting requests since Sat 07 Dec 2013 03:42:45 PM CET printer pri1 is idle. enabled since Sat 07 Dec 2013 03:42:45 PM CET
Using a .ppd File to Add a Printer
Now create a spool for an HP Color LaserJet Series PCL 6 using the pxlcolor.ppd file:
[root@centos ~]# lpadmin -p Printer1 -E -v parallel:/dev/print1 -m pxlcolor.ppd [root@centos ~]# lpstat -t scheduler is running system default destination: pri1 device for pri1: socket://localhost:12000 device for Printer1: parallel:/dev/print1 pri1 accepting requests since Sat 07 Dec 2013 03:42:45 PM CET Printer1 accepting requests since Sat 07 Dec 2013 03:48:38 PM CET printer pri1 is idle. enabled since Sat 07 Dec 2013 03:42:45 PM CET printer Printer1 is idle. enabled since Sat 07 Dec 2013 03:48:38 PM CET
<note important> Note that the use of the -E switch enables the spool automatically. </note>
Because this printer is not real, we will create a spool manually:
[root@centos ~]# touch /dev/print1 ; chgrp lp /dev/print1 ; chmod 660 /dev/print1
Now test this new printer:
[root@centos ~]# echo "Test Printer File" > /tmp/test.print [root@centos ~]# lpadmin -d Printer1 [root@centos ~]# lpstat -t scheduler is running system default destination: Printer1 device for pri1: socket://localhost:12000 device for Printer1: parallel:/dev/print1 pri1 accepting requests since Sat 07 Dec 2013 03:42:45 PM CET Printer1 accepting requests since Sat 07 Dec 2013 03:48:38 PM CET printer pri1 is idle. enabled since Sat 07 Dec 2013 03:42:45 PM CET printer Printer1 is idle. enabled since Sat 07 Dec 2013 03:48:38 PM CET [root@centos ~]# [root@centos ~]# [root@centos ~]# lp /tmp/test.print request id is Printer1-3 (1 file(s))
<note important> Note that the job is called Printer1-3. </note>
Now create a second spool for an HP Color LaserJet Series PCL 6 using the pxlcolor.ppd file:
[root@centos ~]# lpadmin -p Printer2 -E -v parallel:/dev/print2 -m pxlcolor.ppd [root@centos ~]# lpstat -t scheduler is running system default destination: Printer1 device for pri1: socket://localhost:12000 device for Printer1: parallel:/dev/print1 device for Printer2: parallel:/dev/print2 pri1 accepting requests since Sat 07 Dec 2013 03:42:45 PM CET Printer1 accepting requests since Tue 10 Dec 2013 09:47:24 AM CET Printer2 accepting requests since Tue 10 Dec 2013 09:49:59 AM CET printer pri1 is idle. enabled since Sat 07 Dec 2013 03:42:45 PM CET printer Printer1 disabled since Tue 10 Dec 2013 09:47:24 AM CET - Starting GPL Ghostscript 8.70... printer Printer2 is idle. enabled since Tue 10 Dec 2013 09:49:59 AM CET Printer1-3 root 1024 Tue 10 Dec 2013 09:47:18 AM CET
Classes
A class is a group of identical printers. Jobs sent to a class are printed on the first available member printer.
To create a class, use the lpadmin command as follows:
[root@centos ~]# lpadmin -p Printer1 -c classe1 [root@centos ~]# lpadmin -p Printer2 -c classe1
Check that the class has been created:
[root@centos ~]# lpstat -t scheduler is running system default destination: Printer1 members of class classe1: Printer1 Printer2 device for classe1: ///dev/null device for pri1: socket://localhost:12000 device for Printer1: parallel:/dev/print1 device for Printer2: parallel:/dev/print2 classe1 not accepting requests since Tue 10 Dec 2013 10:08:54 AM CET - reason unknown pri1 accepting requests since Sat 07 Dec 2013 03:42:45 PM CET Printer1 accepting requests since Tue 10 Dec 2013 09:47:24 AM CET Printer2 accepting requests since Tue 10 Dec 2013 09:49:59 AM CET printer classe1 disabled since Tue 10 Dec 2013 10:08:54 AM CET - reason unknown printer pri1 is idle. enabled since Sat 07 Dec 2013 03:42:45 PM CET printer Printer1 disabled since Tue 10 Dec 2013 09:47:24 AM CET - Starting GPL Ghostscript 8.70... printer Printer2 is idle. enabled since Tue 10 Dec 2013 09:49:59 AM CET Printer1-3 root 1024 Tue 10 Dec 2013 09:47:18 AM CET
<note important> CUPS can also create Implicit Classes automatically. These work just like normal classes but are created automatically as function of what printers and other classes have been configured. Note that classes can also contain other classes. </note>
The /etc/cups/printers.conf File
The configuration of each printer for which a spool has been declared under cups can be found in the /etc/cups/printers.conf file:
[root@centos ~]# cat /etc/cups/printers.conf # Printer configuration file for CUPS v1.4.2 # Written by cupsd on 2013-12-10 09:50 # DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING <Printer pri1> Info pri1 DeviceURI socket://localhost:12000 State Idle StateTime 1386427365 Type 4 Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy stop-printer </Printer> <DefaultPrinter Printer1> Info Printer1 MakeModel HP Color LaserJet Series PCL 6 CUPS DeviceURI parallel:/dev/print1 State Stopped StateMessage Starting GPL Ghostscript 8.70... StateTime 1386665244 Reason paused Type 8400972 Filter application/vnd.cups-raw 0 - Filter application/vnd.cups-postscript 100 pstopxl Filter application/vnd.cups-pdf 0 pstopxl Filter application/vnd.cups-command 0 commandtops Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy stop-printer </Printer> <Printer Printer2> Info Printer2 MakeModel HP Color LaserJet Series PCL 6 CUPS DeviceURI parallel:/dev/print2 State Idle StateTime 1386665399 Type 8400972 Filter application/vnd.cups-raw 0 - Filter application/vnd.cups-postscript 100 pstopxl Filter application/vnd.cups-pdf 0 pstopxl Filter application/vnd.cups-command 0 commandtops Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy stop-printer </Printer>
The /etc/cups/classes.conf File
The configuration of each class for which a spool has been declared under cups can be found in the /etc/cups/classes.conf file:
[root@centos ~]# cat /etc/cups/classes.conf # Class configuration file for CUPS v1.4.2 # Written by cupsd on 2013-12-10 10:09 # DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING <Class classe1> Info classe1 State Stopped StateTime 1386666534 Accepting No Shared Yes JobSheets none none Printer Printer1 Printer Printer2 QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy retry-current-job </Class>
The cancel Command
The cancel command is used to delete a job:
[root@centos ~]# lpstat Printer1-3 root 1024 Tue 10 Dec 2013 09:47:18 AM CET [root@centos ~]# cancel Printer1-3 [root@centos ~]# lpstat [root@centos ~]#
The lpmove Command
The lpmove command is used to moce the entire spool content from one spool to another:
Define pri1 as the default printer:
[root@centos ~]# lpadmin -d pri1
Create a new print job:
[root@centos ~]# lp /tmp/test.print request id is pri1-4 (1 file(s)) [root@centos ~]# lpstat pri1-4 root 1024 Tue 10 Dec 2013 10:33:05 AM CET
Moce the contents of the pri1 spool to class1:
[root@centos ~]# lpmove pri1 classe1 [root@centos ~]# lpstat classe1-4 root 1024 Tue 10 Dec 2013 10:33:05 AM CET
Destroying a Class
The removal of a spool from a class requires the use of the lpadmin:
[root@centos ~]# lpadmin -p Printer1 -r classe1 [root@centos ~]# lpadmin -p Printer2 -r classe1 [root@centos ~]# lpstat -t scheduler is running system default destination: pri1 device for pri1: socket://localhost:12000 device for Printer1: parallel:/dev/print1 device for Printer2: parallel:/dev/print2 pri1 accepting requests since Tue 10 Dec 2013 10:34:24 AM CET Printer1 accepting requests since Tue 10 Dec 2013 09:47:24 AM CET Printer2 accepting requests since Tue 10 Dec 2013 09:49:59 AM CET printer pri1 is idle. enabled since Tue 10 Dec 2013 10:34:24 AM CET Connecting to printer... printer Printer1 disabled since Tue 10 Dec 2013 09:47:24 AM CET - Starting GPL Ghostscript 8.70... printer Printer2 is idle. enabled since Tue 10 Dec 2013 09:49:59 AM CET
<note important> Note that the class is automatically destroyed when the last spool is removed from it. </note>
To destroy the previously created spools, the lpadmin command can be used with the x option:
[root@centos ~]# lpadmin -x Printer1 [root@centos ~]# lpadmin -x Printer2 [root@centos ~]# lpadmin -x Pri1 [root@centos ~]# lpstat -t scheduler is running no system default destination lpstat: No destinations added. lpstat: No destinations added. lpstat: No destinations added. lpstat: No destinations added.
Web Interface
CUPS can be entirely configured by using a web interface available at the following address: http://localhost:631 or https://localhost:631.
<note> Use the web interface to re-create all of the previously mentionned Printers and Classes. </note>
<html> <center> Copyright © 2021 Hugh Norris.<br><br> </center> </html>