#### Beyond Linux® From Scratch (systemd Edition) - Version 11.1

### Chapter 46. Printing

- Prev

  Printing

- Next

  cups-filters-1.28.12

- Up
- Home

# Cups-2.4.1

## Introduction to Cups

The Common Unix Printing System (CUPS) is a print spooler and associated utilities. It is based on the "Internet Printing Protocol" and provides printing services to most PostScript and raster printers.

This package is known to build and work properly using an LFS-11.1 platform.

### Package Information

- Download (HTTP): https://github.com/OpenPrinting/cups/releases/download/v2.4.1/cups-2.4.1-source.tar.gz

- Download MD5 sum: c2e5143d06f21e19ea2b73913185656f

- Download size: 7.7 MB

- Estimated disk space required: 60 MB (Add 25 MB for tests)

- Estimated build time: 0.5 SBU (Add 0.1 SBU for tests)

### Cups Dependencies

#### Required

GnuTLS-3.7.3

#### Recommended

colord-1.4.6, dbus-1.12.20, libusb-1.0.25, Linux-PAM-1.5.2, and xdg-utils-1.1.3

#### Optional

Avahi-0.8, libpaper-1.1.24+nmu5, LLVM-13.0.1 (with clang), MIT Kerberos V5-1.19.2, PHP-8.1.3, and Python-2.7.18

#### Required (Postinstall)

cups-filters-1.28.12

#### Optional (Postinstall)

Gutenprint-5.3.4 and hplip (HP printers)

User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/cups

## Kernel Configuration

### Note

There used to be a conflict between the Cups libusb backend and the usblp kernel driver. This is no longer the case and cups will work with both of these enabled.

If you want to use the kernel usblp driver (for example, if you wish to use escputil from Gutenprint-5.3.4) enable the following options in your kernel configuration and recompile the kernel:

    Device Drivers  --->
      [*] USB support  --->                          [CONFIG_USB_SUPPORT]
        <*/M>  OHCI HCD (USB 1.1) support            [CONFIG_USB_OHCI_HCD]
        <*/M>  UHCI HCD (most Intel and VIA) support [CONFIG_USB_UHCI_HCD]
        <*/M>  USB Printer support                   [CONFIG_USB_PRINTER]

If you have a parallel printer, enable the following options in your kernel configuration and recompile the kernel:

    Device Drivers  --->
      <*/M> Parallel port support  --->    [CONFIG_PARPORT]
        <*/M> PC-style hardware            [CONFIG_PARPORT_PC]
      Character devices  --->
        <*/M> Parallel printer support     [CONFIG_PRINTER]

## Installation of Cups

You will need to add an `lp` user, as Cups will create some files owned by this user. (The `lp` user is the default used by Cups, but may be changed to a different user by passing a parameter to the configure script.) Use the following command as the `root` user:

    useradd -c "Print Service User" -d /var/spool/cups -g lp -s /bin/false -u 9 lp

You will also need a dedicated group that will contain users allowed to do Cups administrative tasks. Add the group by running the following command as the `root` user:

    groupadd -g 19 lpadmin

If you want to add a user to the Cups administrative group, run the following command as the `root` user:

    usermod -a -G lpadmin <username>

If you didn't install xdg-utils-1.1.3, use the following sed to change the default browser that will be used to access the Cups web interface:

    sed -i 's#@CUPS_HTMLVIEW@#firefox#' desktop/cups.desktop.in

Replace firefox with the web browser of your choice.

Upstream prefers clang than gcc, but the building system will try to use a compiler warning option unsupported by clang. If clang is installed, remove this warning option:

    sed -e "s/format-truncation//" \
        -i configure \
           config-scripts/cups-compiler.m4

Build Cups by running the following commands:

    ./configure --libdir=/usr/lib            \
                --with-system-groups=lpadmin \
                --with-docdir=/usr/share/cups/doc-2.4.1 &&
    make

To test the results, issue: LC_ALL=C make -k check. An already active graphical session with bus address is necessary to run the tests. Make sure that there is not other instance of Cups running, otherwise at least 4 tests will fail with "address in use". One test, `httpAddrGetList`, is known to fail.

Now, as the `root` user:

    make install &&
    ln -svnf ../cups/doc-2.4.1 /usr/share/doc/cups-2.4.1

Create a basic Cups client configuration file by running the following command as the `root` user:

    echo "ServerName /run/cups/cups.sock" > /etc/cups/client.conf

### Note

This package installs icon files into the `/usr/share/icons/hicolor` hierarchy and you can improve system performance and memory usage by updating `/usr/share/icons/hicolor/index.theme`. To perform the update you must have GTK+-2.24.33 or GTK+-3.24.31 installed and issue the following command as the `root` user:

    gtk-update-icon-cache -qtf /usr/share/icons/hicolor

## Command Explanations

sed ... configure: This sed removes a compiler option which is no longer supported. Leaving this change out, the compilation will run thru but a warning about an invalid warning option will be emitted on every compiler invocation.

`CC=gcc CXX=g++`: Setting them if you prefer to use gcc instead of clang, which is now preferred by the upstream.

`--with-system-groups=lpadmin`: This switch ensures that only `lpadmin` will be used as the Cups administrative group.

`--disable-libusb`: Use this switch if you have installed libusb-1.0.25, but wish to use the kernel usblp driver.

`--enable-libpaper`: Use this switch if you have installed libpaper and wish to use it with Cups.

## Configuring Cups

###

#### Config Files

`/etc/cups/*`

###

#### Configuration Information

Normally, printers are set up via a web browser. The Cups server will normally connect via the url http://localhost:631. From there printers, print jobs, and the server configuration can be set up and managed. Remote system administration can also be set up. Configuration can also be done from the command line via the lpadmin, lpoptions, and lpstat commands.

Configuration of Cups is dependent on the type of printer and can be complex. Generally, PostScript printers are easier. For detailed instructions on configuration and use of Cups, see http://www.cups.org/documentation.php.

For non-PostScript printers to print with Cups, you need to install ghostscript-9.55.0 to convert PostScript to raster images and a driver (e.g. from Gutenprint-5.3.4) to convert the resulting raster images to a form that the printer understands. Foomatic drivers use ghostscript-9.55.0 to convert PostScript to a printable form directly, but this is considered suboptimal by Cups developers.

###

#### Linux PAM Configuration

If CUPS has been built with Linux PAM support, you need to create a PAM configuration file to get it working correctly with BLFS.

Issue the following command as the `root` user to create the configuration file for Linux PAM:

    cat > /etc/pam.d/cups << "EOF"
    # Begin /etc/pam.d/cups

    auth    include system-auth
    account include system-account
    session include system-session

    # End /etc/pam.d/cups
    EOF

###

#### Systemd Unit

To start the cupsd daemon when something tries to access it, enable the previously installed systemd units by running the following command as the `root` user:

    systemctl enable cups

## Contents

Installed Programs: cancel, cupsaccept, cups-config, cupsctl, cupsd, cupsdisable, cupsenable, cupsfilter, cupsreject, cupstestppd, ippeveprinter, ipptool, lp, lpadmin, lpc, lpinfo, lpmove, lpoptions, lpq, lpr, lprm, lpstat, ppdc, ppdhtml, ppdi, ppdmerge, and ppdpo
Installed Libraries: libcupsimage.so and libcups.so
Installed Directories: /etc/cups, /usr/{include,lib,share}/cups, /usr/share/doc/cups-2.4.1, and /var/{cache,log,run,spool}/cups

### Short Descriptions

cancel | cancels existing print jobs from the print queues
cupsaccept | accept jobs sent to a destination
cups-config | is a Cups program configuration utility
cupsctl | updates or queries the cupsd.conf file for a server
cupsd | is the scheduler for the Common Unix Printing System
cupsdisable | stop printers and classes
cupsenable | start printers and classes
cupsfilter | is a front-end to the Cups filter subsystem which allows you to convert a file to a specific format
cupsreject | reject jobs sent to a destination
cupstestppd | tests the conformance of PPD files
ippeveprinter | is an IPP Everywhere printer for CUPS
ipptool | sends IPP requests to the specified URI and tests and/or displays the results
lp | submits files for printing or alters a pending job
lpadmin | configures printer and class queues provided by Cups
lpc | provides limited control over printer and class queues provided by Cups
lpinfo | lists the available devices or drivers known to the Cups server
lpmove | moves the specified job to a new destination
lpoptions | displays or sets printer options and defaults
lpq | shows the current print queue status on the named printer
lpr | submits files for printing
lprm | cancels print jobs that have been queued for printing
lpstat | displays status information about the current classes, jobs, and printers
ppdc | compiles PPDC source files into one or more PPD files
ppdhtml | reads a driver information file and produces a HTML summary page that lists all of the drivers in a file and the supported options
ppdi | imports one or more PPD files into a PPD compiler source file
ppdmerge | merges two or more PPD files into a single, multi-language PPD file
ppdpo | extracts UI strings from PPDC source files and updates either a GNU gettext or Mac OS X strings format message catalog source file for translation
`libcups.so` | contains the Cups API functions

Last updated on

- Prev

  Printing

- Next

  cups-filters-1.28.12

- Up
- Home