CUPS Software Administrators Manual

CUPS Software Administrators Manual


CUPS-SAM-1.1.21
Easy Software Products
Copyright 1997-2004, All Rights Reserved

Table of Contents



Preface 1 - Printing System Overview 2 - Building and Installing CUPS 3 - Managing Printers 4 - Printer Classes 5 - Client Setup 6 - Printing System Management 7 - Printing with Other Systems A - Software License Agreement B - Common Network Settings C - Printer Drivers D - List of Files

E - Troubleshooting Common Problems

Preface

This software administrators manual provides printer administration information for the Common UNIX Printing SystemTM ("CUPS TM"), version 1.1.21.

System Overview

CUPS provides a portable printing layer for UNIX®-based operating systems. It has been developed by Easy 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/

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.

Document Overview

This software administrators manual is organized into the following sections:

Notation Conventions

Various font and syntax conventions are used in this guide. Examples and their meanings and uses are explained below:

Example   Description
 
lpstat
lpstat(1)
   The names of commands; the first mention of a command or function in a chapter is followed by a manual page section number.
 
/var
/usr/share/cups/data/testprint.ps
    File and directory names.
 
Request ID is Printer-123    Screen output.
 
lp -d printer filename ENTER    Literal user input; special keys like ENTER are in ALL CAPS.
 
12.3   Numbers in the text are written using the period (.) to indicate the decimal point.

Abbreviations

The following abbreviations are used throughout this manual:

Other References

1 - Printing System Overview

This chapter provides an overview of how the Common UNIX Printing System works.

The Printing Problem

For years the printing problem has plagued UNIX. Unlike Microsoft® Windows® or Mac OS, UNIX has no standard interface or system in place for supporting printers. Among the solutions currently available, the Berkeley and System V printing systems are the most prevalent.

These printing systems support line printers (text only) or PostScript printers (text and graphics), and with some coaxing they can be made to support a full range of printers and file formats. However, because each varient of the UNIX operating system uses a different printing system than the next developing printer drivers for a wide range of printers and operating systems is extremely difficult. That combined with the limited volume of customers for each UNIX varient has forced most printer vendors to give up supporting UNIX entirely.

CUPS is designed to eliminate the printing problem. One common printing system can be used by all UNIX varients to support the printing needs of users. Printer vendors can use its modular filter interface to develop a single driver program that supports a wide range of file formats with little or no effort. Since CUPS provides both the System V and Berkeley printing commands, users (and applications) can reap the benefits of this new technology with no changes.

The Technology

CUPS is based upon an emerging Internet standard called the Internet Printing Protocol. IPP has been embraced by dozens of printer and printer server manufacturers and is supported by Microsoft Windows 2000.

IPP defines a standard protocol for printing as well as managing print jobs and printer options like media size, resolution, and so forth. Like all IP-based protocols, IPP can be used locally or over the Internet to printers hundreds or thousands of miles away. Unlike other protocols, however, IPP also supports access control, authentication, and encryption, making it a much more capable and secure printing solution than older ones.

IPP is layered on top of the Hyper-Text Transport Protocol ("HTTP") which is the basis of web servers on the Internet. This allows users to view documentation, check status information on a printer or server, and manage their printers, classes, and jobs using their web browser.

CUPS provides a complete IPP/1.1 based printing system that provides Basic, Digest, and local certificate authentication and user, domain, or IP-based access control. TLS encryption will be available in future versions of CUPS.

Jobs

Each file or set of files that is submitted for printing is called a job. Jobs are identified by a unique number starting at 1 and are assigned to a particular destination, usually a printer. Jobs can also have options associated with them such as media size, number of copies, and priority.

Classes

CUPS supports collections of printers known as classes. Jobs sent to a class are forwarded to the first available printer in the class.

Filters

Filters allow a user or application to print many types of files without extra effort. Print jobs sent to a CUPS server are filtered before sending them to a printer. Some filters convert job files to different formats that the printer can understand. Others perform page selection and ordering tasks.

CUPS provides filters for printing many types of image files, HP-GL/2 files, PDF files, and text files. CUPS also supplies PostScript and image file Raster Image Processor ("RIP") filters that convert PostScript or image files into bitmaps that can be sent to a raster printer.

Backends

Backends perform the most important task of all - they send the filtered print data to the printer.

CUPS provides backends for printing over parallel, serial, and USB ports, and over the network via the IPP, JetDirect (AppSocket), and Line Printer Daemon ("LPD") protocols. Additional backends are available in network service packages such as the SMB backend included with the popular SAMBA software.

Backends are also used to determine the available devices. On startup each backend is asked for a list of devices it supports, and any information that is available. This allows the parallel backend to tell CUPS that an EPSON Stylus Color 600 printer is attached to parallel port 1, for example.

Printer Drivers

Printer drivers in CUPS consist of one of more filters specific to a printer. CUPS includes sample printer drivers for Hewlett-Packard LaserJet and DeskJet printers and EPSON 9-pin, 24-pin, Stylus Color, and Stylus Photo printers. While these drivers do not generate optimal output for the different printer models, they do provide basic printing and demonstrate how you can write your own printer drivers and incorporate them into CUPS.

Networking

Printers and classes on the local system are automatically shared with other systems on the network. This allows you to setup one system to print to a printer and use this system as a printer server or spool host for all of the others. Users may then select a local printer by name or a remote printer using "name@server".

CUPS also provides implicit classes, which are collections of printers and/or classes with the same name. This allows you to setup multiple servers pointing to the same physical network printer, for example, so that you aren't relying on a single system for printing. Because this also works with printer classes, you can setup multiple servers and printers and never worry about a single point of failure unless all of the printers and servers go down!

2 - Building and Installing CUPS

This chapter shows how to build and install the Common UNIX Printing System. If you are installing a binary distribution from the CUPS web site, proceed to the section titled, Installing a Binary Distribution.

Installing a Source Distribution

This section describes how to compile and install CUPS on your system from the source code.

Requirements

You'll need ANSI-compliant C and C++ compilers to build CUPS on your system. As its name implies, CUPS is designed to run on the UNIX operating system, however the CUPS interface library and most of the filters and backends supplied with CUPS should also compile and run under Microsoft Windows.

For the image file filters and PostScript RIP, you'll need the JPEG, PNG, TIFF, and ZLIB libraries. CUPS will build without these, but with significantly reduced functionality. Easy Software Products maintains a mirror of the current versions of these libraries at:

If you make changes to the man pages you'll need GNU groff or another nroff-like package. GNU groff is available from:

The documentation is formatted using the HTMLDOC software. If you need to make changes you can get the HTMLDOC software from:

Finally, you'll need a make program that understands the include directive - FreeBSD, NetBSD, and OpenBSD developers should use the gmake program.

Compiling CUPS

CUPS uses GNU autoconf to configure the makefiles and source code for your system. Type the following command to configure CUPS for your system:

The default installation will put the CUPS software in the /etc , /usr, and /var directories on your system, which will overwrite any existing printing commands on your system. Use the --prefix option to install the CUPS software in another location:

If the PNG, JPEG, TIFF, and ZLIB libraries are not installed in a system default location (typically /usr/include and /usr/lib) you'll need to set the CFLAGS, CXXFLAGS, and LDFLAGS environment variables prior to running configure:

or:

To enable support for encryption, you'll also want to add the "--enable-ssl" option:

SSL and TLS support require the OpenSSL library, available at:

If the OpenSSL headers and libraries are not installed in the standard directories, use the --with-openssl-includes and --with-openssl-libs options:

Once you have configured things, just type:

to build the software.

Installing the Software

Use the "install" target to install the software:

WARNING:

Installing CUPS will overwrite your existing printing system. If you experience difficulties with the CUPS software and need to go back to your old printing system, you will need to reinstall the old printing system from your operating system CDs.

Running the Software

Once you have installed the software you can start the CUPS server by typing:

Installing a Binary Distribution

CUPS comes in a variety of binary distribution formats. Easy Software Products provides binaries in TAR format with installation and removal scripts ("portable" distributions), and in RPM and DPKG formats for Red Hat and Debian-based distributions. Portable distributions are available for all platforms, while the RPM and DPKG distributions are only available for Linux.

WARNING:

Installing CUPS will overwrite your existing printing system. If you experience difficulties with the CUPS software and need to go back to your old printing system, you will need to remove the CUPS software with the provided script and/or reinstall the old printing system from your operating system CDs.

Installing a Portable Distribution

To install the CUPS software from a portable distribution you will need to be logged in as root; doing an su is good enough. Once you are the root user, run the installation script with:

After asking you a few yes/no questions the CUPS software will be installed and the scheduler will be started automatically.

Installing an RPM Distribution

To install the CUPS software from an RPM distribution you will need to be logged in as root; doing an su is good enough. Once you are the root user, run RPM with:

After a short delay the CUPS software will be installed and the scheduler will be started automatically.

Installing an Debian Distribution

To install the CUPS software from a Debian distribution you will need to be logged in as root; doing an su is good enough. Once you are the root user, run dpkg with:

After a short delay the CUPS software will be installed and the scheduler will be started automatically.

3 - Managing Printers

This chapter describes how to add your first printer and how to manage your printers.

The Basics

Each printer queue has a name associated with it; the printer name must start with any printable character except " ", "/", and "@". It can contain up to 127 letters, numbers, and the underscore (_). Case is not significant, e.g. "PRINTER", "Printer", and "printer" are considered to be the same name.

Printer queues also have a device associated with them. The device can be a parallel port, a network interface, and so forth. Devices within CUPS use Uniform Resource Identifiers ("URIs") which are a more general form of Uniform Resource Locators ("URLs") that are used in your web browser. For example, the first parallel port in Linux usually uses a device URI of parallel:/dev/lp1.

You can see a complete list of supported devices by running the lpinfo(8) command:

The -v option specifies that you want a list of available devices. The first word in each line is the type of device (direct, file, network, or serial) and is followed by the device URI or method name for that device. File devices have device URIs of the form file:/directory/filename while network devices use the more familiar method://server or method://server/path format.

Finally, printer queues usually have a PostScript Printer Description ("PPD") file associated with them. PPD files describe the capabilities of each printer, the page sizes supported, etc., and are used for PostScript and non-PostScript printers. CUPS includes PPD files for HP LaserJet, HP DeskJet, EPSON 9-pin, EPSON 24-pin, and EPSON Stylus printers.

Adding Your First Printer

CUPS provides two methods for adding printers: a command-line program called lpadmin(8) and a Web interface. The lpadmin command allows you to perform most printer administration tasks from the command-line and is located in /usr/sbin. The Web interface is located at:

and steps you through printer configuration. If you don't like command-line interfaces, try the Web interface instead.

Adding Your First Printer from the Command-Line

Run the lpadmin command with the -p option to add a printer to CUPS:

For a HP DeskJet printer connected to the parallel port this would look like:

Similarly, a HP LaserJet printer using a JetDirect network interface at IP address 11.22.33.44 would be added with the command:

As you can see, deskjet.ppd and laserjet.ppd are the PPD files for the HP DeskJet and HP LaserJet drivers included with CUPS. You'll find a complete list of PPD files and the printers they will work with in Appendix C, "Printer Drivers".

For a dot matrix printer connected to the serial port, this might look like:

Here you specify the serial port (e.g. S0,S1, d0, d1), baud rate (e.g. 9600, 19200, 38400, 115200, etc.), number of bits, parity, and flow control. If you do not need flow control, delete the "+flow=soft" portion.

Adding Your First Printer from the Web

The CUPS web server provides a user-friendly "wizard" interface for adding your printers. Rather than figuring out which device URI and PPD file to use, you can instead click on the appropriate listings and fill in some simple information. Enter the following URL in your web browser to begin:

Click on the Add Printer button to add a printer.

Managing Printers from the Command-Line

The lpadmin command enables you to perform most printer administration tasks from the command-line. You'll find lpadmin in the /usr/sbin directory.

Adding and Modifying Printers

Run the lpadmin command with the -p option to add or modify a printer:

The options arguments can be any of the following:

Deleting Printers

Run the lpadmin command with the -x option to delete a printer:

Setting the Default Printer

Run the lpadmin command with the -d option to set a default printer:

The default printer can be overridden by the user using the lpoptions(1) command.

Starting and Stopping Printers

The enable and disable commands start and stop printer queues, respectively:

Printers that are disabled may still accept jobs for printing, but won't actually print any files until they are restarted. This is useful if the printer malfunctions and you need time to correct the problem. Any queued jobs are printed after the printer is enabled (started).

Accepting and Rejecting Print Jobs

The accept and reject commands accept and reject print jobs for the named printer, respectively:

As noted above, a printer can be stopped but accepting new print jobs. A printer can also be rejecting new print jobs while it finishes those that have been queued. This is useful for when you must perform maintenance on the printer and will not have it available to users for a long period of time.

Setting Quotas on a Printer

CUPS supports page and size-based quotas for each printer. The quotas are tracked individually for each user, but a single set of limits applies to all users for a partiuclar printer. For example, you can limit every user to 5 pages per day on an expensive printer, but you cannot limit every user except Johnny.

The job-k-limit, job-page-limit, and job-quota-peiod options determine whether and how quotas are enforced for a printer. The job-quota-period option determines the time interval for quota tracking. The interval is expressed in seconds, so a day is 86,400, a week is 604,800 and a month is 2,592,000 seconds. The job-k-limit option specifies the job size limit in killobytes. The job-page-limit option specifies the number of pages limit.

For quotas to be enforced, the period and at least one of the limits must be set to a non-zero value. The following options will enable quotas:

Or, you can combine all three options on the same line.

Restricting User Access to a Printer

The -u option of the lpadmin command controls which users can print to a printer. The default configuration allows all users to print to a printer:

CUPS supports allow and deny lists so that you can specify a list of users who are allowed to print or not allowed to print. Along with your list of users, you can specify whether they are allowed or not allowed to use the printer:

This command allows peter, paul, and mary to print to the named printer, but all other users cannot print. The command:

has the opposite effect. All users except peter, paul, and mary will be able to print to the named printer.

You can control access by UNIX groups as well by placing an "@" character before each group name. The command:

allows the users peter, paul, and mary to print, as well as any user in the printgods group to print.

NOTE:

The allow and deny options are not cummulative. That is, you must provide the complete list of users to allow or deny each time.

Also, CUPS only maintains one list of users - the list can allow or deny users from printing. If you specify an allow list and then specify a deny list, the deny list will replace the allow list - only one list is active at any time.

Managing Printers from the Web

The Web interface is located at:

From there you can perform all printer management tasks with a few simple mouse clicks.

4 - Printer Classes

This chapter describes what printer classes are and how to manage them.

The Basics

CUPS provides collections of printers called printer classes. Jobs sent to a class are forwarded to the first available printer in the class. Classes can themselves be members of other classes, so it is possible for you to define very large, distributed printer classes for high-availability printing.

CUPS also supports implicit classes. Implicit classes work just like printer classes, but they are created automatically based upon the available printers and classes on the network. This allows you to setup multiple print servers with identical printer configurations and have the client machines send their print jobs to the first available server. If one or more servers go down, the jobs are automatically redirected to the servers that are running, providing fail-safe printing.

Managing Printer Classes from the Command-Line

Run the lpadmin command with the -p and -c options to add a printer to a class:

The class is created automatically if it doesn't exist. To remove a printer from a class use the -r option:

To remove the entire class just use the -x option:

Managing Printer Classes from the Web Interface

The Web interface is located at:

The Add Class and Modify Class interfaces provide a list of available printers; click on the printers of interest to add them to the class.

Implicit Classes

A noted earlier, implicit classes are created automatically from the available network printers and classes. To disable this functionality, set the ImplicitClasses directive to Off in the cupsd.conf file. You will find more information on doing this in Chapter 6, "Printing System Management".

5 - Client Setup

This chapter discusses several ways to configure CUPS clients for printing.

The Basics

A client is any machine that sends print jobs to another machine for final printing. Clients can also be servers if they communicate directly with any printers of their own.

CUPS supports several methods of configuring client machines:

Manual Configuration of Print Queues

The most tedious method of configuring client machines is to configure each remote queue by hand using the lpadmin command:

The printer name is the name of the printer on the server machine. The server name is the hostname or IP address of the server machine. Repeat the lpadmin command for each remote printer you wish to use.

NOTE:

Manual configuration of print queues is not recommended for large numbers of client machines because of the administration nightmare it creates. For busy networks, consider subnetting groups of clients and polling and relaying printer information instead.

Specifying a Single Server for Printing

CUPS can be configured to run without a local spooler and send all jobs to a single server. However, if that server goes down then all printing will be disabled. Use this configuration only as absolutely needed.

The default server is normally "localhost". To override the default server create a file named /etc/cups/client.conf and add a line reading:

to the file. The server name can be the hostname or IP address of the default server.

The default server can also be customized on a per-user basis. To set a user-specific server create a file named ~/.cupsrc and add a line reading:

to the file. The server name can be the hostname or IP address of the default server.

Automatic Configuration of Print Queues

CUPS supports automatic client configuration of printers on the same subnet. To configure printers on the same subnet, do nothing. Each client should see the available printers within 30 seconds automatically. The printer and class lists are updated automatically as printers and servers are added or removed.

If you want to see printers on other subnets as well, use the BrowsePoll directive as described next.

NOTE:

The BrowseAddress directive enables broadcast traffic from your server. The default configuration braodcasts printer information every 30 seconds. Although this printer information does not use much bandwidth, typically about 80 bytes per printer, it can add up with large numbers of servers and printers.

Use the BrowseInterval and BrowseTimeout directives to tune the amount of data that is added to your network load. In addition, subnets can be used to minimize the amount of traffic that is carried by the "backbone" of your large network.

Specifying Multiple Servers for Printing

If you have CUPS servers on different subnets, then you should configure CUPS to poll those servers. Polling provides the benefits of automatic configuration without significant configuration on the clients, and multiple clients on the same subnet can share the same configuration information.

Polling is enabled by specifying one or more BrowsePoll directives in the /etc/cups/cupsd.conf file. For information on making these changes, see Chapter 6, "Printing System Management".

Multiple BrowsePoll lines can be used to poll multiple CUPS servers. To limit the amount of polling you do from client machines, you can have only one of the clients do the polling and relay that information to the others on the same subnet (described next).

Relaying Printers to Other Clients

When you have clients and servers spread across multiple subnets, the polling method is inefficient. CUPS provides a BrowseRelay directive that enables a single client to relay (broadcast) the polled printer information to the local subnet.

For example, Server A and Server B are on subnet 1 and subnet 2, while the clients are on subnet 3. To provide printers to all of the clients in subnet 3, client C will be configured with the following directives in /etc/cups/cupsd.conf:

The BrowseRelay line specifies a source address and mask. Any browse packets coming from a matching address wil be sent to the given broadcast address. In this case, we want the packets from the local machine (127.0.0.1) relayed to the other clients.

As printers are found using polling, they are relayed from client C to the rest of the clients through a broadcast on subnet 3. The rest of the clients can use the standard cupsd.conf configuration.

The BrowseRelay directive can also be used to relay browsing packets from one network interface to another. For example, if client C in the previous example had network interfaces attaches to both subnet 1 and subnet 2, it could use the BrowseRelay directive exclusively:

Load Balancing and Failsafe Operation

When using server polling or broadcasting, CUPS clients can automatically merge identical printers on multiple servers into a single implicit class queue. Clients assume that printers with the same name on multiple servers are in fact the same printer or type of printer being served by multiple machines.

If you have two printers, LaserJet@ServerA and LaserJet@ServerB, a third implicit class called LaserJet will be created automatically on the client that refers to both printers. If the client also has a local printer with the name LaserJet and the ImplicitAnyClasses directive is enabled, then an implicit class named AnyLaserJet will be created instead. Otherwise, the local printer will prevent the creation of an implicit class, since CUPS will assume that the local printer will always be more available than a remote one.

The client will alternate between servers and automatically stop sending jobs to a server if it goes down, providing a load-balancing effect and fail-safe operation with automatic switchover.

NOTE:

Note that implicit classes ( ImplicitClasses) are enabled and implicit "any" classes ( ImplicitAnyClasses) are disabled by default.

6 - Printing System Management

This chapter shows how you can configure the CUPS server.

The Basics

Several text files are used to configure CUPS. All of the server configuration files are located in the /etc/cups directory:

Restarting the CUPS Server

Once you have made a change to a configuration file you need to restart the CUPS server by sending it a HUP signal or using the supplied initialization script. The CUPS distributions install the script in the init.d directory with the name cups. The location varies based upon the operating system:

Changing the Server Configuration

The /etc/cups/cupsd.conf file contains configuration directives that control how the server functions. Each directive is listed on a line by itself followed by its value. Comments are introduced using the number sign ("#") character at the beginning of a line. Since the server configuration file consists of plain text, you can use your favorite text editor to make changes to it.

Server Directives

The cupsd.conf file contains many directives that determine how the server operates:

AccessLog


Examples

Description

The AccessLog directive sets the name of the access log file. If the filename is not absolute then it is assumed to be relative to the ServerRoot directory. The access log file is stored in "common log format" and can be used by any web access reporting tool to generate a report on CUPS server activity.

The server name can be included in the filename by using %s in the name.

The special name "syslog" can be used to send the access information to the system log instead of a plain file.

The default access log file is /var/log/cups/access_log.

Allow


Examples

Description

The Allow directive specifies a hostname, IP address, or network that is allowed access to the server. Allow directives are cummulative, so multiple Allow directives can be used to allow access for multiple hosts or networks. The /mm notation specifies a CIDR netmask:

mmnetmask mmnetmask
00.0.0.0 8255.0.0.0
1128.0.0.0 16255.255.0.0
2192.0.0.0 24255.255.255.0
...... 32255.255.255.255

The @LOCAL name will allow access from all local network interfaces, but not remote point-to-point interfaces. The @IF(name) name will allow access from the named interface.

The Allow directive must appear inside a Location directive.

AuthClass


Examples

Description

The AuthClass directive defines what level of authentication is required:

The AuthClass directive must appear inside a Location directive.

AuthGroupName


Examples

Description

The AuthGroupName directive sets the group to use for Group authentication.

The AuthGroupName directive must appear inside a Location directive.

AuthType


Examples

Description

The AuthType directive defines the type of authentication to perform:

When using Basic, Digest, or BasicDigest authentication, clients connecting through the localhost interface can also authenticate using certificates.

The AuthType directive must appear inside a Location directive.

AutoPurgeJobs


Examples

Description

The AutoPurgeJobs directive specifies whether or not to purge completed jobs once they are no longer required for quotas. This option has no effect if quotas are not enabled. The default setting is No.

BrowseAddress


Examples

Description

The BrowseAddress directive specifies an address to send browsing information to. Multiple BrowseAddress directives can be specified to send browsing information to different networks or systems.

The @LOCAL name will broadcast printer information to all local interfaces. The @IF(name) name will broadcast to the named interface.

No browse addresses are set by default.

NOTE:

If you are using HP-UX 10.20 and a subnet that is not 24, 16, or 8 bits, printer browsing (and in fact all broadcast reception) will not work. This problem appears to be fixed in HP-UX 11.0.

BrowseAllow


Examples

Description

The BrowseAllow directive specifies a system or network to accept browse packets from. The default is to accept browse packets from all hosts.

Host and domain name matching require that you enable the HostNameLookups directive.

IP address matching supports exact matches, partial addresses that match networks using netmasks of 255.0.0.0, 255.255.0.0, and 255.255.255.0, or network addresses using the specified netmask or bit count.

The @LOCAL name will allow browse data from all local network interfaces, but not remote point-to-point interfaces. The @IF(name) name will allow browse data from the named interface.

BrowseDeny


Examples

Description

The BrowseDeny directive specifies a system or network to reject browse packets from. The default is to deny browse packets from no hosts.

Host and domain name matching require that you enable the HostNameLookups directive.

IP address matching supports exact matches, partial addresses that match networks using netmasks of 255.0.0.0, 255.255.0.0, and 255.255.255.0, or network addresses using the specified netmask or bit count.

The @LOCAL name will block browse data from all local network interfaces, but not remote point-to-point interfaces. The @IF(name) name will block browse data from the named interface.

BrowseInterval


Examples

Description

The BrowseInterval directive specifies the maximum amount of time between browsing updates. Specifying a value of 0 seconds disables outgoing browse updates but allows a server to receive printer information from other hosts.

The BrowseInterval value should always be less than the BrowseTimeout value. Otherwise printers and classes will disappear from client systems between updates.

BrowseOrder


Examples

Description

The BrowseOrder directive specifies the order of allow/deny processing. The default order is deny,allow:

BrowsePoll


Examples

Description

The BrowsePoll directive polls a server for available printers once every BrowseInterval seconds. Multiple BrowsePoll directives can be specified to poll multiple servers.

If BrowseInterval is set to 0 then the server is polled once every 30 seconds.

BrowsePort


Examples

Description

The BrowsePort directive specifies the UDP port number used for browse packets. The default port number is 631.

NOTE:

You must set the BrowsePort to the same value on all of the systems that you want to see.

BrowseProtocols


Examples

Description

The BrowseProtocols directive specifies the protocols to use when collecting and distributing shared printers on the local network. The default protocol is CUPS, which is a broadcast-based protocol.

NOTE:

When using the SLP protocol, you must have at least one Directory Agent (DA) server on your network. Otherwise the CUPS scheduler (cupsd) will not respond to client requests for several seconds while polling the network.

BrowseRelay


Examples

Description

The BrowseRelay directive specifies source and destination addresses for relaying browsing information from one host or network to another. Multiple BrowseRelay directives can be specified as needed.

BrowseRelay is typically used on systems that bridge multiple subnets using one or more network interfaces. It can also be used to relay printer information from polled servers with the line:

This effectively provides access to printers on a WAN for all clients on the LAN(s).

BrowseShortNames


Examples

Description

The BrowseShortNames directive specifies whether or not short names are used for remote printers when possible. Short names are just the remote printer name, without the server ("printer"). If more than one remote printer is detected with the same name, the printers will have long names ("printer@server1", "printer@server2".)

The default value for this option is Yes.

BrowseTimeout


Examples

Description

The BrowseTimeout directive sets the timeout for printer or class information that is received in browse packets. Once a printer or class times out it is removed from the list of available destinations.

The BrowseTimeout value should always be greater than the BrowseInterval value. Otherwise printers and classes will disappear from client systems between updates.

Browsing


Examples

Description

The Browsing directive controls whether or not network printer browsing is enabled. The default setting is On.

NOTE:

If you are using HP-UX 10.20 and a subnet that is not 24, 16, or 8 bits, printer browsing (and in fact all broadcast reception) will not work. This problem appears to be fixed in HP-UX 11.0.

Classification


Examples

Description

The Classification directive sets the classification level on the server. When this option is set, at least one of the banner pages is forced to the classification level, and the classification is placed on each page of output. The default is no classification level.

ClassifyOverride


Examples

Description

The ClassifyOverride directive specifies whether users can override the default classification level on the server. When the server classification is set, users can change the classification using the job-sheets option and can choose to only print one security banner before or after the job. If the job-sheets option is set to none then the server default classification is used.

The default is to not allow classification overrides.

ConfigFilePerm


Examples

Description

The ConfigFilePerm directive specifies the permissions to use when writing configuration files. The default is 0600.

DataDir


Examples

Description

The DataDir directive sets the directory to use for data files.

DefaultCharset


Examples

Description

The DefaultCharset directive sets the default character set to use for client connections. The default character set is utf-8 but is overridden by the character set for the language specified by the client or the DefaultLanguage directive.

DefaultLanguage


Examples

Description

The DefaultLanguage directive specifies the default language to use for client connections. Setting the default language also sets the default character set if a language localization file exists for it. The default language is "en" for English.

Deny


Examples

Description

The Deny directive specifies a hostname, IP address, or network that is allowed access to the server. Deny directives are cummulative, so multiple Deny directives can be used to allow access for multiple hosts or networks. The /mm notation specifies a CIDR netmask:

mmnetmask mmnetmask
00.0.0.0 8255.0.0.0
1128.0.0.0 16255.255.0.0
2192.0.0.0 24255.255.255.0
...... 32255.255.255.255

The @LOCAL name will deny access from all local network interfaces, but not remote point-to-point interfaces. The @IF(name) name will deny access from the named interface.

The Deny directive must appear inside a Location directive.

DocumentRoot


Examples

Description

The DocumentRoot directive specifies the location of web content for the HTTP server in CUPS. If an absolute path is not specified then it is assumed to be relative to the ServerRoot directory. The default directory is /usr/share/doc/cups.

Documents are first looked up in a sub-directory for the primary language requested by the client (e.g. /usr/share/doc/cups/fr/... ) and then directly under the DocumentRoot directory (e.g. /usr/share/doc/cups/...), so it is possible to localize the web content by providing subdirectories for each language needed.

Encryption


Examples

Description

The Encryption directive must appear instead a Location section and specifies the encryption settings for that location. The default setting is IfRequested for all locations.

ErrorLog


Examples

Description

The ErrorLog directive sets the name of the error log file. If the filename is not absolute then it is assumed to be relative to the ServerRoot directory. The default error log file is /var/log/cups/error_log.

The server name can be included in the filename by using %s in the name.

The special name "syslog" can be used to send the error information to the system log instead of a plain file.

FaxRetryInterval


Examples

Description

The FaxRetryInterval directive determines how often fax print jobs are retried when the backend is unable to send the fax. The value is the number of seconds between tries.

The default setting is 300 seconds.

FaxRetryLimit


Examples

Description

The FaxRetryLimit directive determines how many times a fax job is retried before it is canceled.

The default setting is 5.

FileDevice


Examples

Description

The FileDevice directive determines whether the scheduler allows new printers to be added using device URIs of the form file:/filename. File devices are most often used to test new printer drivers and do no support raw file printing.

The default setting is No.

Note:

File devices are managed by the scheduler. Since the scheduler normally runs as the root user, file devices can be used to overwrite system files and potentially gain unauthorized access to the system. If you must create printers using file devices, we recommend that you set the FileDevice directive to Yes for only as long as you need to add the printers to the system, and then reset the directive to No.

FilterLimit


Examples

Description

The FilterLimit directive sets the maximum cost of all running job filters. It can be used to limit the number of filter programs that are run on a server to minimize disk, memory, and CPU resource problems. A limit of 0 disables filter limiting.

An average print to a non-PostScript printer needs a filter limit of about 200. A PostScript printer needs about half that (100). Setting the limit below these thresholds will effectively limit the scheduler to printing a single job at any time.

The default limit is 0.

FilterNice


Examples

Description

The FilterNice directive sets the scheduling priority of job filters. Values larger than 0 give filters a lower priority while values smaller than 0 give filters a higher priority. The FilterNice value does not affect the priority of job backends.

The default priority is 0.

FontPath


Examples

Description

The FontPath directive specifies the font path to use when searching for fonts. The default font path is /usr/share/cups/fonts.

Group


Examples

Description

The Group directive specifies the UNIX group that filter and CGI programs run as. The default group is sys, system, or root depending on the operating system.

HideImplicitMembers


Examples

Description

The HideImplicitMembers directive controls whether the individual printers in an implicit class are shown to the user. The default is No.

ImplicitClasses must be enabled for this directive to have any effect.

HostNameLookups


Examples

Description

The HostNameLookups directive controls whether or not CUPS looks up the hostname for connecting clients. The Double setting causes CUPS to verify that the hostname resolved from the address matches one of the addresses returned for that hostname. Double lookups also prevent clients with unregistered addresses from connecting to your server. The default is Off to avoid the potential server performance problems with hostname lookups. Set this option to On or Double only if absolutely required.

ImplicitAnyClasses


Examples

Description

The ImplicitAnyClasses directive controls whether implicit classes for local and remote printers are created with the name AnyPrinter. The default setting is Off.

ImplicitClasses must be enabled for this directive to have any effect.

ImplicitClasses


Examples

Description

The ImplicitClasses directive controls whether implicit classes are created based upon the available network printers and classes. The default setting is On but is automatically turned Off if Browsing is turned Off.

Include


Examples

Description

The Include directive includes the named file in the cupsd.conf file. If no leading path is provided, the file is assumed to be relative to the ServerRoot directory.

KeepAlive


Examples

Description

The KeepAlive directive controls whether or not to support persistent HTTP connections. The default is On.

HTTP/1.1 clients automatically support persistent connections, while HTTP/1.0 clients must specifically request them using the Keep-Alive attribute in the Connection: field of each request.

KeepAliveTimeout


Examples

Description

The KeepAliveTimeout directive controls how long a persistent HTTP connection will remain open after the last request. The default is 60 seconds.

Limit


Examples

Description

The Limit directive groups access control directives for specific types of HTTP requests and must appear inside a Location section. Access can be limited for individual request types (DELETE, GET, HEAD , OPTIONS, POST, PUT, and TRACE) or for all request types (ALL). The request type names are case-sensitive for compatibility with Apache.

LimitExcept


Examples

Description

The LimitExcept directive groups access control directives for specific types of HTTP requests and must appear inside a Location section. Unlike the Limit directive, LimitExcept restricts access for all requests except those listed on the LimitExcept line.

LimitRequestBody


Examples

Description

The LimitRequestBody directive controls the maximum size of print files, IPP requests, and HTML form data in HTTP POST requests. The default limit is 0 which disables the limit check.

Also see the identical MaxRequestSize directive.

Listen


Examples

Description

The Listen directive specifies a network address and port to listen for connections. Multiple Listen directives can be provided to listen on multiple addresses.

The Listen directive is similar to the Port directive but allows you to restrict access to specific interfaces or networks.

Location


Examples

Description

The Location directive specifies access control and authentication options for the specified HTTP resource or path. The Allow, AuthClass, AuthGroupName, AuthType, Deny, Encryption, Limit, LimitExcept, Order, Require, and Satisfy directives may all appear inside a location.

Locations on the Server.
LocationDescription
/The path for all get operations (get-printers, get-jobs, etc.)
/adminThe path for all administration operations (add-printer, delete-printer, start-printer, etc.)
/admin/confThe path for access to the CUPS configuration files (cupsd.conf, client.conf, etc.)
/classesThe path for all classes
/classes/nameThe resource for class name
/jobsThe path for all jobs (hold-job, release-job, etc.)
/jobs/idThe resource for job id
/printersThe path for all printers
/printers/nameThe path for printer name
/printers/name.ppdThe PPD file path for printer name

Note that more specific resources override the less specific ones. So the directives inside the /printers/name location will override ones from /printers. Directives inside /printers will override ones from /.   None of the directives are inherited. More information can be found in section "Printing System Security".

LogFilePerm


Examples

Description

The LogFilePerm directive specifies the permissions to use when writing configuration files. The default is 0644.

LogLevel


Examples

Description

The LogLevel directive specifies the level of logging for the ErrorLog file. The following values are recognized (each level logs everything under the preceding levels):

MaxClients


Examples

Description

The MaxClients directive controls the maximum number of simultaneous clients that will be allowed by the server. The default is 100 clients.

NOTE:

Since each print job requires a file descriptor for the status pipe, the CUPS server internally limits the MaxClients value to 1/3 of the available file descriptors to avoid possible problems when printing large numbers of jobs.

MaxClientsPerHost


Examples

Description

The MaxClientsPerHost directive controls the maximum number of simultaneous clients that will be allowed from a single host by the server. The default is the MaxClients value. A value of 0 uses the automatic setting based on the MaxClients value.

This directive provides a small measure of protection against Denial of Service attacks from a single host.

MaxCopies


Examples

Description

The MaxCopies directive controls the maximum number of copies that a user can print of a job. The default is 100 copies.

NOTE:

Most HP PCL laser printers internally limit the number of copies to 100.

MaxJobs


Examples

Description

The MaxJobs directive controls the maximum number of jobs that are kept in memory. Once the number of jobs reaches the limit, the oldest completed job is automatically purged from the system to make room for the new one. If all of the known jobs are still pending or active then the new job will be rejected.

Setting the maximum to 0 disables this functionality. The default setting is 500.

MaxJobsPerPrinter


Examples

Description

The MaxJobsPerPrinter directive controls the maximum number of active jobs that are allowed for each printer or class. Once a printer or class reaches the limit, new jobs will be rejected until one of the active jobs is completed, stopped, aborted, or cancelled.

Setting the maximum to 0 disables this functionality. The default setting is 0.

MaxJobsPerUser


Examples

Description

The MaxJobsPerUser directive controls the maximum number of active jobs that are allowed for each user. Once a user reaches the limit, new jobs will be rejected until one of the active jobs is completed, stopped, aborted, or cancelled.

Setting the maximum to 0 disables this functionality. The default setting is 0.

MaxLogSize


Examples

Description

The MaxLogSize directive controls the maximum size of each log file. Once a log file reaches or exceeds the maximum size it is closed and renamed to filename.O. This allows you to rotate the logs automatically. The default size is 1048576 bytes (1MB).

Setting the maximum size to 0 disables log rotation.

MaxRequestSize


Examples

Description

The MaxRequestSize directive controls the maximum size of print files, IPP requests, and HTML form data in HTTP POST requests. The default limit is 0 which disables the limit check.

Also see the identical LimitRequestBody directive.

Order


Examples

Description

The Order directive defines the default access control. The following values are supported:

The Order directive must appear inside a Location directive.

PageLog


Examples

Description

The PageLog directive sets the name of the page log file. If the filename is not absolute then it is assumed to be relative to the ServerRoot directory. The default page log file is /var/log/cups/page_log.

The server name can be included in the filename by using %s in the name.

The special name "syslog" can be used to send the page information to the system log instead of a plain file.

Port


Examples

Description

The Port directive specifies a port to listen on. Multiple Port lines can be specified to listen on multiple ports. The Port directive is equivalent to "Listen *:nnn". The default port is 631.

PreserveJobFiles


Examples

Description

The PreserveJobFiles directive controls whether the document files of completed, cancelled, or aborted print jobs are stored on disk.

A value of On preserves job files until the administrator purges them with the cancel command. Jobs can be restarted (and reprinted) as desired until they are purged.

A value of Off (the default) removes the job files as soon as each job is completed, cancelled, or aborted.

PreserveJobHistory


Examples

Description

The PreserveJobHistory directive controls whether the history of completed, cancelled, or aborted print jobs is stored on disk.

A value of On (the default) preserves job information until the administrator purges it with the cancel command.

A value of Off removes the job information as soon as each job is completed, cancelled, or aborted.

Printcap


Examples

Description

The Printcap directive controls whether or not a printcap file is automatically generated and updated with a list of available printers. If specified with no value, then no printcap file will be generated. The default is to generate a file named /etc/printcap.

When a filename is specified (e.g. /etc/printcap), the printcap file is written whenever a printer is added or removed. The printcap file can then be used by applications that are hardcoded to look at the printcap file for the available printers.

PrintcapFormat


Examples

Description

The PrintcapFormat directive controls the output format of the printcap file. The default is to generate a BSD printcap file.

PrintcapGUI


Example

Description

The PrintcapGUI directive sets the program to use when displaying an option panel from an IRIX application that uses the Impressario print API. The default program is the ESP Print Pro "glpoptions" GUI.

The program must accept the -d option to specify a printer and the -o option to specify one or more options. After allowing the user to select/change options, the program must then write the list of printing options without the -o to the standard output.

ReloadTimeout


Examples

Description

The ReloadTimeout directive sets how long the scheduler waits for jobs to complete before reloading the server configuration. The default timeout is 60 seconds.

RemoteRoot


Examples

Description

The RemoteRoot directive sets the username for unauthenticated root requests from remote hosts. The default username is remroot. Setting RemoteRoot to root effectively disables this security mechanism.

RequestRoot


Examples

Description

The RequestRoot directive sets the directory for incoming IPP requests and HTML forms. If an absolute path is not provided then it is assumed to be relative to the ServerRoot directory. The default request directory is /var/spool/cups.

Require


Examples

Description

The Require directive specifies that authentication is required for the resource. The group keyword specifies that the authenticated user must be a member of one or more of the named groups that follow.

The user keyboard specifies that the authenticated user must be one of the named users that follow.

The valid-user keyword specifies that any authenticated user may access the resource.

The default is to do no authentication. This directive must appear inside a Location directive.

RIPCache


Examples

Description

The RIPCache directive sets the size of the memory cache used by Raster Image Processor ("RIP") filters such as imagetoraster and pstoraster. The size can be suffixed with a "k" for kilobytes, "m" for megabytes, or "g" for gigabytes. The default cache size is "8m", or 8 megabytes.

RootCertDuration


Examples

Description

The RootCertDuration directive controls the interval between updates of the root authentication certificate. The default is 300 seconds which updates the root certificate approximately once every 5 minutes. Set the interval to 0 to disable certificate updates entirely.

RunAsUser


Examples

Description

The RunAsUser directive controls whether the scheduler runs as the unpriviledged user account (usually lp). The default is No which leaves the scheduler running as the root user.

Note: Running as a non-priviledged user may prevent LPD and locally connected printers from working due to permission problems. The lpd backend will automatically use a non-priviledged mode that is not 100% compliant with RFC 1179. The parallel, serial, and usb backends will need write access to the corresponding device files.

Satisfy


Examples

Description

The Satisfy directive specifies whether all conditions must be satisfied to allow access to the resource. If set to all , then all authentication and access control conditions must be satified to allow access.

Setting Satisfy to any allows a user to gain access if the authentication or access control requirements are satisfied. For example, you might require authentication for remote access, but allow local access without authentication.

The default is all. This directive must appear inside a Location directive.

ServerAdmin


Examples

Description

The ServerAdmin directive identifies the email address for the administrator on the system. By default the administrator email address is root@server, where server is the server name.

ServerBin


Examples

Description

The ServerBin directive sets the directory for server-run executables. If an absolute path is not provided then it is assumed to be relative to the ServerRoot directory. The default executable directory is /usr/lib/cups .

ServerCertificate


Examples

Description

The ServerCertificate directive specifies the location of the SSL certificate file used by the server when negotiating encrypted connections. The certificate must not be encrypted (password protected) since the scheduler normally runs in the background and will be unable to ask for a password. The default certificate file is /etc/cups/ssl/server.crt.

ServerKey


Examples

Description

The ServerKey directive specifies the location of the SSL private key file used by the server when negotiating encrypted connections. The default key file is /etc/cups/ssl/server.crt .

ServerName


Examples

Description

The ServerName directive specifies the hostname that is reported to clients. By default the server name is the hostname.

ServerRoot


Examples

Description

The ServerRoot directive specifies the absolute path to the server configuration and state files. It is also used to resolve relative paths in the cupsd.conf file. The default server directory is /etc/cups.

ServerTokens


Examples

Description

The ServerTokens directive specifies the information that is included in the Server header of HTTP responses. The default value is Minor which generates "CUPS/1.1".

SSLListen


Examples

Description

The SSLListen directive specifies a network address and port to listen for secure connections. Multiple SSLListen directives can be provided to listen on multiple addresses.

The SSLListen directive is similar to the SSLPort directive but allows you to restrict access to specific interfaces or networks.

SSLPort


Examples

Description

The SSLPort directive specifies a port to listen on for secure connections. Multiple SSLPort lines can be specified to listen on multiple ports.

SystemGroup


Examples

Description

The SystemGroup directive specifies the system administration group for System authentication. More information can be found later in this chapter in "Printing System Security".

TempDir


Examples

Description

The TempDir directive specifies an absolute path for the directory to use for temporary files. The default directory is /var/tmp.

Temporary directories must be world-writable and should have the "sticky" permission bit enabled so that other users cannot delete filter temporary files. The following commands will create an appropriate temporary directory called /foo/bar/tmp:

Timeout


Examples

Description

The Timeout directive controls the amount of time to wait before an active HTTP or IPP request times out. The default timeout is 300 seconds.

User


Examples

Description

The User directive specifies the UNIX user that filter and CGI programs run as. The default user is lp.

Changing the Client Configuration

The CUPS client application (lp, lpr, and so forth) use the /etc/cups/client.conf file for default settings. The client application also look in the user's home directory for a file called .cupsrc. Each directive is listed on a line by itself followed by its value. Comments are introduced using the number sign ("#") character at the beginning of a line.

Since the client configuration file consists of plain text, you can use your favorite text editor to make changes to it.

Client Directives

The client.conf file contains two directives that determine how the client behaves:

Encryption


Examples

Description

The Encryption directive specifies the default encryption settings for the client. The default setting is IfRequested.

ServerName


Examples

Description

The ServerName directive specifies sets the remote server that is to be used for all client operations. That is, it redirects all client requests to the remote server. The default is to use the local server ("localhost").

Changing the Printer Configuration

The CUPS scheduler (cupsd) uses the /etc/cups/printers.conf file to store the list of available printers. This file contains only locally defined printers, but not remote printers that are created automatically. Each directive is listed on a line by itself followed by its value. Comments are introduced using the number sign ("#") character at the beginning of a line.

Since the printer configuration file consists of plain text, you can use your favorite text editor to make changes to it.

Printer Directives

The printers.conf file contains many directives that determine how the printer behaves:

Accepting


Examples

Description

The Accepting directive defines the initial Boolean value for the printer-is-accepting-job attribute which can be set by the accept and reject commands.

This directive must appear inside a Printer or DefaultPrinter directive.

AllowUser


Examples

Description

The AllowUser directive adds a username to the requesting-user-name-allowed attribute which can be set by the lpadmin -u command.

This directive must appear inside a Printer or DefaultPrinter directive.

DefaultPrinter


Examples

Description

The DefaultPrinter directive begins a printer definition for the default server destination. It can be added by the lpadmin command or if already defined, set as default by the lpoptions -d command.

DenyUser


Examples

Description

The DenyUser directive adds a username to the requesting-user-name-allowed attribute which can be set by the lpadmin -u command.

This directive must appear inside a Printer or DefaultPrinter directive.

DeviceURI


Examples

Description

The DeviceURI directive defines the value of the device-uri-attribute attribute which can be set by the lpadmin -v command.

This directive must appear inside a Printer or DefaultPrinter directive.

Info


Examples

Description

The Info directive defines the string for the printer-info attribute which can be set by the lpadmin -D command.

This directive must appear inside a Printer or DefaultPrinter directive.

JobSheets


Examples

Description

The JobSheets directive specifies the default banner pages to print before and after a print job. In the above example, only a standard banner will print after each job.

The lpoptions -o job-sheets= command can be used to set banners. For example, the following command would produce the same results of a standard banner at the end of each print job for the default printer.

If only one banner file is specified, it will be printed before the files in the job. If a second banner file is specified, it is printed after the files in the job.

The available banner pages depend on the local system configuration; CUPS includes the following banner files:

This directive must appear inside a Printer or DefaultPrinter directive.

KLimit


Examples

Description

The KLimit directive defines the value of the job-k-limit attribute which can be set by the lpadmin -o job-k-limit= command.

This directive must appear inside a Printer or DefaultPrinter directive.

Location


Examples

Description

The Location directive defines the string for the printer-location attribute which can be set by the lpadmin -L command.

NOTE:

Do not confuse this Location directive with the one in cupsd.conf. They are completely different.

This directive must appear inside a Printer or DefaultPrinter directive.

PageLimit


Examples

Description

The PageLimit directive defines the value of the job-page-limit attribute which can be set by the lpadmin -o job-page-limit= command.

This directive must appear inside a Printer or DefaultPrinter directive.

Printer


Examples

Description

The Printer directive begins a printer definition. It can be added by the lpadmin command.

QuotaPeriod


Examples

Description

The QuotaPeriod directive defines the value of the job-quota-period attribute which can be set by the lpadmin -o job-quota-period= command.

This directive must appear inside a Printer or DefaultPrinter directive.

State


Examples

Description

The State directive defines the initial value of the printer-state attribute. The strings idle and stopped correspond to the IPP enumeration values.

This directive must appear inside a Printer or DefaultPrinter directive.

StateMessage


Examples

Description

The StateMessage directive defines the ini