Raspbian: How to add a printer on your Raspberry Pi? (CUPS)

install cups on raspberry pi

Adding additional drivers on Linux has always been difficult. And particularly to install printers
As our Raspberry Pi is running on Raspbian (Debian-like), it’s almost the same
You’re lucky if you plug your printer and it’s working directly 🙂

So, how to add printers on Raspbian?
The easiest way is to turn your Raspberry Pi into a print server
You can install CUPS that allows you to install printers and share them on the network
This works for almost all printers

I’ll show you how to do this in this post

Prerequisites

Raspberry Pi

You’ll need a Raspberry Pi to follow this tutorial, but the procedure is almost the same on any Debian-like distribution
Try to prepare it with the following steps:

  • Install Raspbian on your Raspberry Pi
    Choose the version you prefer, you can follow this tutorial with both versions
    The full version allows you to access CUPS in local, so it may be faster
  • Update your system
    sudo apt update
    sudo apt upgrade
  • Enable SSH if you want to follow this tutorial from your computer
    sudo service ssh start

That should be enough for the Raspberry Pi preparation

Printer information

We’ll install your printer on your Raspberry Pi, so collect all the needed information and prepare it for the installation

  • For an USB Printer:
    • Turn the printer ON
    • Plug it into your Raspberry Pi
  • For a Network Printer:
    • Turn the printer ON
    • Make sure the printer is available on the network
    • You can check this on your computer
  • Noe down the brand and the exact model to install the driver later

CUPS installation

What is CUPS?

CUPS stands for Common Unix Printing Standard
Developed by Apple for macOS, it brings support for printers in the Linux world

CUPS use IPP (Internet Printing Protocol) to manage local and network printers
It’s the main way, maybe the only one, to install a printer on Linux systems

So we want to install it on the Raspberry Pi to help us to configure our printer

CUPS Installation

The installation process is straightforward as the package is available in the Raspbian repository

sudo apt install cups

Type Y when asked to continue the install process
There are a lot of dependencies, so it can take a few minutes on the Raspberry Pi

At this step, with the Raspbian Desktop version, you should already have access to the CUPS web interface at http://localhost:631
But for a remote access we need to edit the configuration file

CUPS Configuration

The main configuration file is available at /etc/cups/cupsd.conf
Follow these steps to adjust the configuration:

  • Open the configuration file
    sudo nano /etc/cups/cupsd.conf
  • Find this line
    Listen localhost:631
  • Replace by this one
    Port 631

    This asks CUPS to listen on the port 631 no matter which IP address
    But it’s not enough as there are other securities

  • We need to allow access from any computer on the network
    To do this, find these groups and add the Allow @local directive inside:
    <Location />
      Order allow,deny
      Allow @local
    </Location>
    
    # Restrict access to the admin pages...
    <Location /admin>
      Order allow,deny
      Allow @local
    </Location>
    
    # Restrict access to configuration files...
    <Location /admin/conf>
      AuthType Default
      Require user @SYSTEM
      Order allow,deny
      Allow @local
    </Location>
    
  • Save and exit (CTRL+O, CTRL+X)
  • The last step is to restart the CUPS service to apply changes:
    sudo service cups restart

You can now access the web interface from any computer on the network:
http://<IP>:631

cups interface on raspberry pi

If you have a firewall on your Raspberry Pi (iptables or ufw for example), you need to allow access on the port 631

Add your printer

Allow pi user to add a printer

To install a printer, we need an administrative right on CUPS
To do this, we need to login with a user in the lpadmin group

So, we’ll add the pi user in this group, like this:

sudo usermod -a -G lpadmin pi

That’s all we need, pi is now in the lpadmin group

Use HTTPS

To add a printer, CUPS may ask you to use HTTPS instead of HTTP (as there is an authentication step)
So switch right now on the HTTPS URL: https://<IP>:631

You’ll get a security warning from your browser
We don’t have a certificate, so accept this warning and continue to the CUPS web interface

Add the printer

We can now add the printer using the CUPS interface

  • Open the CUPS web interface: https://<IP>:631
  • In the top bar menu, click on the “Administration” menu
  • Then click on Add printer
    cups add printer
  • CUPS will ask you for a login and password
    Use the pi credentials: pi /raspberry by default
    • Once logged, you see a list of printers like this
      cups printer list
      CUPS should have already found your printer on the network, or if plugged
      Select the printer you want to install and click “Continue”
  • In the next step, CUPS asks you to set the printer properties, like name and description:

    Don’t forget to check the “Sharing” box to share this printer on the network for others computers
  • Then you need to select the corresponding driver for your printer

    If the specific driver is not available, take a close one, or upload a PPD file from the manufacturer if you have one
    Finally, click on “Add Printer”
  • In the last steps, it asks you to configure the printers settings
    You may have several tabs to fill

    Leave this all by default and come back later if you need to make some changes
    Click on “Set Default Options” and that’s it, the printer is installed in CUPS

Test page

From CUPS

Directly in CUPS, in the printer page (you should be there), you can print a test page and see if everything works well

In the “Maintenance” drop down, choose “Print Test Page”

You printer will print the CUPS test page, so you can check that everything seems OK

From another app

Now that you installed the printer in the CUPS interface, you can use it from any application on your Raspberry Pi

For example, in the LibreOffice Writer application, I now have my printer in the Print menu:

So I can choose it, and print a test page from here too

Print from another computer

CUPS is not only a way to install printers easily but also a print server to share printers on the network
If you check the box “Share this printer” during the installation, you can print from another computer, using CUPS

To do this, you need to install samba
Follow these steps:

  • Install the samba package
    sudo apt install samba

    Samba is a service to share files on Linux, and it’s also useful to share printers

  • Access the default share on your Raspberry Pi
    For Windows users, type this address in your file explorer:
    \\<IP>\
  • You should see your printer in this folder
  • Double click on it to install it on your computer

While there is no point on doing that on a windows computer for a network printer, it can be useful to turn your old USB printer into a network printer
Once configured in CUPS, you can use it from any device on the network, even if it’s not a network printer

It can also be faster with several Linux/Mac on the same network
Install CUPS and the printer on the first, and just link the shared printer to the others

Conclusion

You now know how to install any printer on your Raspberry Pi

There are some funny projects where you’ll need a printer so this guide might be handy
I remember a cool photo booth for example. You take a photo and the Raspberry Pi prints it automatically
I think it’s in my list of 20 projects for your kids if you want to check it

5 comments

  1. Antonello Reply

    All fine, but i don’t see the printer in Libreoffice (i tried to reboot but nothing changed)

  2. Jeremy Reply

    Have the same issue – the test page inside CUPS works perfectly but the printer is not visible inside the print dialogues on leafpad/geany/libre*.

  3. RaspberryTips Post authorReply

    Hi Jeremy and Antonello,

    Sorry for the late answer, but I needed to check this as you both have the same issue

    And after a new test I got the same result
    There is nothing to do after the add printer success message

    I tested LibreOffice 30s after (no reboot, no reload, nothing), and the printer is here

    Double check the tutorial to see if you didn’t forget something
    Maybe the “usermod” command to allow pi to access CUPS

    Good luck

  4. Les. Hayward Reply

    Same sort of thing here. I installed a network printer using VNC. This is listed and works perfectly with Leaf and Firefox, but is not listed in L.office. Your set up text was most helpful and works fine. I suspect a ‘funny’ with L.O. but have not yet found a solution!

  5. Steve Reply

    CUPS will not even install in Raspbian Buster. I get the “You have held broken packages” error…

Leave a Reply

Your email address will not be published. Required fields are marked *