Printing

This document covers the installation and maintenance of printers using CUPS and Samba. It covers local installation and networked installations and you'll also find instructions on using shared printers from other operating systems.

Use the Right Tools
Linux has great support for printers; the right tool for the job is called CUPS ( Common Unix Printing System ). Since the beginning of the project, back in 1999, the installation and maintenance of CUPS has improved dramatically.

In this document we will cover how to use CUPS to setup a local or networked printer. We will not go in too much detail since the project has great documentation available for advanced usage.

Introduction
When you want to install a printer on your system you need to know how your printer will be attached to your system. Is it through a local port like LPT or USB, or is it networked? And if it is, does it use the Internet Printing Protocol (IPP) or is it through the Microsoft Windows SMB-CIFS protocol (Microsoft Windows Sharing)?

The next few sections explain what minimal kernel configuration you need. Of course, this depends on how your printer is going to be attached to your system, so for your convenience we have separated the instructions.

So navigate to and run   to enter the kernel configuration. If you used  to configure your kernel, you should still perform these steps just to make sure nothing was missed out.

In the next configuration examples, we will add the necessary support in the kernel, not as modules. This is not mandatory; if you want you can easily use modular support. Don't forget to load the appropriate modules afterwards.

Now go to the appropriate section to configure (or check) your kernel.

Locally Attached Printer (LPT)
The LPT port is generally used to identify the parallel printer port. You need to enable parallel port support first, then PC-style parallel port support (unless you are a SPARC user) after which you enable parallel printer support.

That's it; quit the kernel configuration and rebuild your kernel. Don't forget to copy the new kernel image to the location (and don't forget to mount  if needed) and update your boot loader configuration prior to rebooting your system.

Now continue with CUPS.

Locally Attached Printer (USB)
To enable USB printing, you just need USB support in your kernel:

That's it; quit the kernel configuration and rebuild your kernel. Don't forget to copy the new kernel image to the location (and don't forget to mount  if needed) and update your boot loader configuration prior to rebooting your system.

Now continue with CUPS.

Remotely Attached Printer (IPP)
To be able to connect to a remotely attached printer through the Internet Printing Protocol your kernel just needs to have networking support. Assuming your kernel has that already, continue with CUPS.

Remotely Attached Printer (SMB-CIFS)
Your kernel must support SMB CIFS:

That's it; quit the kernel configuration and rebuild your kernel. Don't forget to copy the new kernel image to the location (and don't forget to mount  if needed) and update your boot loader configuration prior to rebooting your system.

Now continue with CUPS.

Installation
Installing CUPS with Gentoo is a breeze. CUPS has a few optional features that might interest you. To enable or disable those features, use the USE flags associated with them.

Check the current USE settings. If you want to deviate from your current USE settings for CUPS alone, add the appropriate USE flags to.

For instance, to enable SAMBA support for CUPS:

If you are happy with the result, have Portage install CUPS.

If the printer is attached to your system locally, you need to load CUPS automatically on start-up. Make sure your printer is attached and powered on before you start CUPS.

Configuration
The default CUPS server configuration in is sufficient for most users. However, several users might need some changes to the CUPS configuration.

In the next sections we cover a few changes that are often needed:


 * we allow other systems to use the printer attached to this Linux workstation.
 * we grant access to the CUPS administration from remote systems
 * we configure CUPS to support Windows PCL drivers. This is advised if you want Windows systems to be able to use a Samba-shared printer as most Windows drivers are PCL drivers.
 * we configure this system to use a printer attached to another system (not Windows share).

Remote Printer Access
If you want other systems to use your printer through IPP you need to explicitly grant access to the printer in. If you want to share your printer using SAMBA, this change is not needed.

Open up in your favorite editor and add in an   line for the system(s) that should be able to reach to your printer. In the next example, we grant access to the printer from localhost and from any system whose IP address starts with.

This broadcasts browsing information to the clients on the network. This is so that they know the printer is available:

Also, you will need to specify which port CUPS listens to, so that it will respond to printing requests from other machines on your network.

CUPS Remote Administration
If you are interested in remote administration, you need to grant access from other systems than just localhost to the CUPS administration. Edit and have it explicitly grant access to the systems you want. For instance, to grant access to the system with IP address of 192.168.0.3:

Do not forget to restart CUPS after making changes to by running.

Enable Support for Windows PCL Drivers
PCL drivers send raw data to the print server. To enable raw printing on CUPS, you need to edit and uncomment the line   if it is not already uncommented. Then you need to edit and do the same, if it is not already uncommented.

Do not forget to restart CUPS after making these changes by running.

Setting Up a Remote Printer
If the printers are attached to a remote CUPS-powered server you can easily set up your system to use the remote printer by changing the file.

Assuming the printer is attached to a system called , open up  with your favorite editor and set the   directive:

The remote system will have a default printer setting which you will be using. If you want to change the default printer, use  :

First list the available printers:

Set the HP LaserJet 5P as the default printer:

Introduction
If the printer you want to configure is remotely available through a different print server (running CUPS) you do not need to follow these instructions. Instead, read.

Detecting the Printer
If you have a USB printer or your parallel port printer was powered on when you booted your Linux system, you might be able to retrieve information from the kernel stating that it has successfully detected your printer. However this is merely an indication and not a requirement.

For a USB printer:

Installing the Printer
To have the printer installed on your system, fire up your browser and have it point to http://localhost:631. You will be greeted by the CUPS web interface from which you can perform all administrative tasks.

Go to Administration and enter your root login and password information at the box. Then, when you have reached the administrative interface, click on Add Printer. You will be greeted by a new screen allowing you to enter the following information:


 * The spooler name, a short but descriptive name used on your system to identify the printer. This name should not contain spaces or any special characters. For instance, for the HP LaserJet 5P you could say.
 * The location, a description where the printer is physically located (for instance in your room, or in the kitchen right next to your dish washer, ...). This is to help maintaining several printers.
 * The description in which you should place a full description of the printer. A common use is the full printer name (like "HP LaserJet 5P").

The next screen asks you for the device where the printer listens to. You will have the choice of several devices. The next table covers a few possible devices, but the list is not exhaustive.

If you are installing a remote printer, you will be asked for the URI to the printer:


 * An LPD printer server requires a  syntax
 * An HP JetDirect printer requires a  syntax
 * An IPP printer requires a  or   syntax.

Next, select the printer manufacturer in the adjoining screen and the model type and number in the subsequent one. For many printers you will find multiple drivers. You can either select one now or search on LinuxPrinting.org's Printer List for a good driver. You can change drivers easily later on.

Once the driver is selected, CUPS will inform you that the printer has been added successfully to the system. You can now go to the printer management page on the administration interface and select  to change the printer settings (resolution, page format, ...).

Testing and Reconfiguring the Printer
To verify if the printer is working correctly, go to the printer administration page, select your printer and click on.

If the printer does not seem to work correctly, click on  to reconfigure the printer. You will be greeted with the same screens as during the first installation but the defaults will now be your current configuration.

If you have no idea why your printer does not function, you might get a clue by looking at. In the next example we find out that there is a permission error, probably due to a wrong  setting in.

Installing the Best Driver
Many printer drivers exist; to find out which one has the best performance for your printer, visit the LinuxPrinting Printer List. Select your brand and type to find out what driver the site recommends. For instance, for the HP LaserJet 5P, the site recommends the  driver.

Download the PPD file from the site and place it in, then run   as root. This will make the driver available through the CUPS web interface. Now reconfigure your printer as described above.

Introduction
Some printers require specific drivers or provide additional features that are not enabled through the regular configuration process as described above. This chapter will discuss a selection of printers and how they are made to work with Gentoo Linux.

Gutenprint Driver
The gutenprint drivers are high-quality, open source printer drivers for various Canon, Epson, HP, Lexmark, Sony, Olympus and PCL printers supporting CUPS, ghostscript, The Gimp and other applications.

Gentoo's Portage Tree contains an ebuild for the gutenprint drivers. Just use  to install them. Note that the ebuild listens to quite a few USE flags (such as  and   ). You must have enabled at least these two flags!

When the emerge process has finished, the gutenprint drivers will be available through the CUPS web interface.

HPLIP Driver
The HPLIP Project uses the hpcups printer driver. It also includes scanner and fax support and service tools for various multi-purpose peripherals. For printing support, it is recommended to use the new hpcups driver, which you can enable with the  USE flag. The old hpijs driver is still included when you build  with the   USE flag.

The default install enables dynamically generated ppd files at runtime. Some printers may still require static ppd files. If you encounter problems when using  try enabling the   USE flag and rebuild.

For USB printers  has to be built with the   USE flag. This way it makes use of the  user space tool which replaces kernel usb printer support (CONFIG_USB_PRINTER). In case of problems you can disable the  USE flag for   and activate the kernel functionality again. All users who need to access the printer have to be a member of the  group.

To be able to set up a network printer  has to be built with USE. With recent versions of  the default lookup method for networked printers is mDNS which requires   to be built with USE. (Note: this method does not work with the upcoming  series). To be able to print on a network printer  needs to be built with USE.

Make sure your USB printer is plugged into your computer or your network printer into the network socket.

When the emerge process has finished, the  tool will attempt to detect and install the printer drivers for your printer on the system. Once finished, your printer will be available in the CUPS configuration. When upgrading  you should run   to remove all printers and configure them again.

PNM2PPA Driver
PPA is an HP technology that focuses on sending low-level processing to the system instead of to the printer which makes the printer cheaper but more resource consuming.

If the LinuxPrinting site informs you that the pnm2ppa driver is your best option, you need to install the  filter on your system:

Once installed, download the PPD file for your printer from the LinuxPrinting site and put it in. Next, configure your printer using the steps explained above.

Configuring a Windows Client for IPP
Microsoft Windows supports IPP (Windows 9x and ME users need to install it separately). To install a printer that is attached to your Linux box on Windows, fire up the  wizard and select. When you are asked for the URI, use the  syntax.

Configuring a Windows Client for a Samba Shared Printer
To share the printer on the SMB-CIFS network, you must have SAMBA installed and configured correctly. How to do this is beyond the scope of this document, but we will quickly deal with the configuration of SAMBA for shared printers.

Open with your favorite editor and add a   section to it:

Adding a [printers] section

Now navigate to the top of the file until you are inside the   section. Then locate the  and   settings and set each of them to   :

Changing the [global] section

Make sure you enabled the support in CUPS. Then, restart the  service to have the changes take effect.

Configuring a Linux Client for a Windows Print Server
First of all, make sure that the printer is shared on your Windows system.

Next, in the CUPS web interface, configure your printer as described previously. You will notice that CUPS has added another driver called. Select it and use the  or   syntax for the URI.

Introduction
Many tools exist that help you configure a printer, use additional printing filters, add features to your printing capabilities, etc. This chapter lists a few of them. The list is not exhaustive and not meant to discuss each tool in great detail.

Gtk-LP - A Gtk-powered Printer Configuration Tool
With Gtk-LP you can install, modify and configure your printer from a stand-alone Gtk application. It uses CUPS and provides all standard CUPS capabilities as well. Definitely worth checking out if you dislike the CUPS Web interface or want a stand-alone application for your day-to-day printing routines.

To install it, emerge  :

Error: Unable to convert file 0 to printable format
If you are having printing troubles and shows this message:

Error log

You need to re-emerge  with the   USE flag. You can either add  to your USE flags in , or you can enable it only for   as shown:

Then emerge. When it has finished compiling, be sure to restart  afterward:

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * swift
 * nightmorph