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 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   command 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. You cannot rely on genkernel to configure everything in your system; printing is an area where the proper configuration can be missed.

In the next configuration examples, we will add the necessary support into the kernel, not as modules. Building the kernel this way is not mandatory; if you want you can easily use modular support, just be sure to remember to load the appropriate modules afterward!

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. Presumming you are using Grub2, these steps can be done by running these commands:

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. Note the root commands in the USB Port Printer Configuration step above if you're unsure how to perform these two steps.

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 (CIFS)
Your kernel must support 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. Note the root commands in the USB Port Printer Configuration step above if you're unsure how to perform these two steps.

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.

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

To enable SAMBA support, needs to be installed with CUPS support. Update the file or directory to enable the   USE flag:

Then (re)install Samba:

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
See HPLIP Driver.

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 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 windows pcl 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 and that you have emerged  with the   USE-flag enabled as instructed above.

To find the desired printer's URI, run the following command, substituting "server" with the computer that you want to probe for samba-shared printers:

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