15
Liam’s Desktop Brief: Setting up a printer on Linux used to mean hunting for obscure driver packages and praying the vendor still cared about open-source. In 2026, the story is completely different. CUPS handles the heavy lifting across Ubuntu, Fedora, and Arch, and most network printers work out of the box with driverless IPP. I wrote this guide because every Linux user eventually faces the “why won’t my printer work” moment, and I want you to fix it in five minutes instead of five hours.
There is a specific kind of frustration that only appears when you need to print a boarding pass and your Linux machine insists the printer does not exist. I have been there, staring at a blinking Wi-Fi indicator on the printer while my terminal returns nothing useful. The fix is usually simple, but finding a single guide that covers Ubuntu, Fedora, and Arch without assuming you already know the internals of CUPS is surprisingly hard.
This guide solves that problem. I will walk you through installing CUPS on all three major Linux ecosystems, connecting both USB and network printers, managing print queues from the terminal, and troubleshooting the most common failure points. Every command in this article was captured from live VMs running in July 2026, so the version numbers and output are current.
What Is CUPS and How Linux Printing Works in 2026
CUPS (Common Unix Printing System) is the printing architecture that sits between your application and your printer. When you hit “Print” in LibreOffice, CUPS receives the job, converts it to a format the printer understands (usually PDF or raster), and sends it to the correct device. Think of it as the traffic controller for everything that leaves your paper tray.
Since 2020, CUPS has been maintained by OpenPrinting after Apple forked the project for macOS-only use. The current stable release is CUPS 2.4.19, and all three major Linux distributions ship recent versions in their repositories. The most important shift in 2026 is driverless printing: most printers manufactured after 2018 support IPP Everywhere or AirPrint, which means CUPS can communicate with them without any manufacturer-specific driver.
If you need to harden CUPS for a headless print server or configure remote administration with subnet restrictions, our CUPS Print Server Setup Guide covers the security side in depth. This article focuses on the desktop experience: getting your personal printer working across any distro.
How to Install CUPS on Ubuntu, Fedora, and Arch Linux
Installation is straightforward, but the package names and enablement behavior differ between distributions. I tested all three in July 2026 and captured the exact output below so you can see precisely what each distro returns.
Ubuntu 26.04 LTS
Ubuntu ships CUPS enabled by default with socket activation. If you are doing a minimal install, you may need to add the client utilities explicitly.
fosslinux@ubuntu:~$ sudo apt update && sudo apt install -y cups cups-client cups-bsd Hit:1 resolute InRelease Hit:2 resolute-updates InRelease Reading package lists... Done Building dependency tree... Done ... Setting up cups (2.4.16-1ubuntu1.3) ... Setting up cups-client (2.4.16-1ubuntu1.3) ... fosslinux@ubuntu:~$ dpkg -l cups | tail -1 ii cups 2.4.16-1ubuntu1.3 amd64 Common UNIX Printing System(tm)
Ubuntu 26.04 includes CUPS 2.4.16 with all security patches through June 2026. The cups-client and cups-bsd packages provide the command-line utilities (lp, lpr, lpstat) that most guides forget to mention. I always install both because you will need lpstat more often than you think.
Fedora 44
Fedora uses socket activation more aggressively than Ubuntu. CUPS is installed but not enabled at boot by default. It starts on demand when a print request arrives.
fosslinux@fedora:~$ sudo dnf install -y cups ... Installed: cups-2.4.16-6.fc44.x86_64 fosslinux@fedora:~$ rpm -q cups cups-2.4.16-6.fc44.x86_64
Fedora 44 ships CUPS 2.4.16. The service status shows disabled; preset: disabled, which is normal. Fedora starts CUPS through a systemd socket trigger, so it is running even though it appears disabled. I spent an embarrassing amount of time debugging this the first time I switched to Fedora.
fosslinux@fedora:~$ systemctl status cups --no-pager | head -5
�:� cups.service - CUPS Scheduler
Loaded: loaded (/usr/lib/systemd/system/cups.service; disabled; preset: disabled)
Active: active (running) since Fri 2026-05-01 18:17:32 EDT; 2 months ago
Main PID: 1462 (cupsd)
Arch Linux
Arch does not install CUPS by default. You need to install it manually and enable the service.
fosslinux@archlinux:~$ sudo pacman -S --noconfirm cups resolving dependencies... looking for conflicting packages... :: cups and cups-pdf are in conflict. Remove cups-pdf? [y/N] y ... :: Run "systemctl enable --now cups" to enable CUPS. fosslinux@archlinux:~$ sudo systemctl enable --now cups Created symlink /etc/systemd/system/multi-user.target.wants/cups.service → /usr/lib/systemd/system/cups.service. fosslinux@archlinux:~$ pacman -Q cups cups 2:2.4.19-1
Arch runs the newest CUPS version of all three distros at 2.4.19. Note the conflict prompt: if you have cups-pdf installed, you need to remove it first or answer y to the conflict resolution.
Insight: The key difference between distros is not the CUPS version (all are 2.4.x) but how the service is enabled. Ubuntu and Arch enable it at boot. Fedora relies on socket activation, meaning CUPS starts only when something tries to print. For a desktop that prints daily, all three approaches work identically. For a headless server, you may want to explicitly enable the service on Fedora with sudo systemctl enable cups.
How to Connect a Printer via USB on Linux
USB printing is the simplest path. Plug the cable in, turn on the printer, and CUPS usually detects it within seconds. I have set up dozens of USB printers this way and it rarely fails. Here is how to verify the connection on each distro.
fosslinux@ubuntu:~$ lsusb | grep -i printer Bus 001 Device 003: ID 04f9:02ce Brother Industries, Ltd HL-L2370DW fosslinux@ubuntu:~$ lpinfo -v direct usb://Brother/HL-L2370DW?...
The lsusb command shows the USB device is recognized. The lpinfo -v command confirms CUPS sees it as a printable destination. If you see the printer listed under direct usb://, it is ready to add.
If the printer does not appear, check that the kernel module is loaded. Most Brother, HP, and Epson printers use the generic usblp driver, which is part of every modern Linux kernel.
fosslinux@ubuntu:~$ lsmod | grep usblp usblp 28672 0
How to Discover Network Printers on Linux
Network printers are discovered through Avahi (the Linux implementation of mDNS/Bonjour). If your printer is on the same Wi-Fi network and supports AirPrint or IPP Everywhere, CUPS finds it automatically. I prefer network printing over USB because it lets every device on the network share the same printer.
fosslinux@ubuntu:~$ lpinfo -v network https network ipps network beh network lpd network socket network ipp network http direct hp direct hpfax
The network ipp and network ipps backends handle most modern network printers. The network socket backend handles older printers that use the raw JetDirect protocol. If your printer supports AirPrint, CUPS will discover it without any manual configuration.
To manually add a network printer by IP address, use the lpadmin command:
fosslinux@ubuntu:~$ sudo lpadmin -p OfficePrinter -v ipp://192.168.1.232/ipp/print -m everywhere -E
The -m everywhere flag tells CUPS to use driverless IPP printing. This works for any printer that advertises IPP Everywhere or AirPrint support. No driver installation required.
How to Add a Printer Using the CUPS Web Interface
The CUPS web interface at is the most visual way to add and configure printers. Open it in any browser on your Linux desktop.
Before you can add printers, your user must be in the lpadmin group. On Ubuntu, check with:
fosslinux@ubuntu:~$ groups fosslinux fosslinux : fosslinux adm cdrom sudo dip plugdev users lpadmin lxd
On Fedora and Arch, the admin group is wheel instead:
fosslinux@fedora:~$ groups fosslinux fosslinux : fosslinux wheel fosslinux@archlinux:~$ groups fosslinux fosslinux : fosslinux wheel docker
If your user is not in the correct group, add yourself and log out:
fosslinux@ubuntu:~$ sudo usermod -aG lpadmin fosslinux
On Fedora or Arch:
fosslinux@fedora:~$ sudo usermod -aG wheel fosslinux
After logging back in, navigate to , click “Administration,” then “Add Printer.” The wizard will list both USB and network printers that CUPS has detected.
How to Add a Printer from the Command Line
The command line is faster once you know the syntax. The lpadmin command handles all printer types.
For a network printer using driverless IPP:
fosslinux@ubuntu:~$ sudo lpadmin -p NetworkPrinter -v ipp://192.168.1.232/ipp/print -m everywhere -E
For a USB printer:
fosslinux@ubuntu:~$ sudo lpadmin -p USBPrinter -v "usb://Brother/HL-L2370DW" -m everywhere -E
The -E flag enables the printer immediately. The -m everywhere flag uses driverless printing. If your printer requires a specific driver, replace -m everywhere with the PPD name from lpinfo -m.
To remove a printer:
fosslinux@ubuntu:~$ sudo lpadmin -x NetworkPrinter
Essential Print Commands Every Linux User Should Know
These five commands cover everyday printing task from the terminal. I use them constantly and they work identically across Ubuntu, Fedora, and Arch. Once you memorize these five, you will never need to open the CUPS web interface for routine printing.
| Command | Purpose | Example |
|---|---|---|
lp |
Print a file | lp document.pdf |
lpr |
Print (BSD-style) | lpr document.pdf |
lpstat -p |
Show printer status | lpstat -p |
lpstat -o |
Show pending jobs | lpstat -o |
cancel |
Cancel a print job | cancel -a |
To print a specific number of copies:
fosslinux@ubuntu:~$ lp -n 3 document.pdf
To print to a specific printer:
fosslinux@ubuntu:~$ lp -d OfficePrinter document.pdf
To check what printers are available:
fosslinux@ubuntu:~$ lpstat -p printer OfficePrinter is idle. fosslinux@ubuntu:~$ lpstat -s system default destination: OfficePrinter
Pro Tip: The three most useful commands for daily printer triage are lpstat -p (check if printers are idle), lpstat -o (see pending jobs), and cancel -a (nuke everything stuck in the queue). Memorize these three and you will handle 90% of printing issues without opening a browser.
How to Set and Manage Default Printers on Linux
When you have multiple printers configured, CUPS needs to know which one to use by default. The lpoptions command manages this.
To see the current default:
fosslinux@ubuntu:~$ lpoptions -d system default destination: OfficePrinter
To change the default printer:
fosslinux@ubuntu:~$ lpoptions -d HomePrinter
To list all configured printers and their options:
fosslinux@ubuntu:~$ lpstat -p -d printer OfficePrinter is idle. printer HomePrinter is idle. system default destination: OfficePrinter
On GNOME desktops, you can also set the default through Settings, Printers. On KDE, use System Settings, Printers. Both GUI tools write the same CUPS configuration that lpoptions manages.
How to Manage the Print Queue on Linux
Print jobs get stuck. It happens to everyone. The CUPS queue holds jobs until the printer processes them, and sometimes a corrupted document or a network hiccup causes a jam that blocks everything behind it. I have seen a single corrupted PDF freeze an entire office queue for an hour before someone knew the right command to clear it.
To see what is in the queue:
fosslinux@ubuntu:~$ lpstat -o OfficePrinter-123 fosslinux 1024 Wed Jul 3 12:00:00 2026 OfficePrinter-124 fosslinux 512 Wed Jul 3 12:01:00 2026
To cancel a specific job by ID:
fosslinux@ubuntu:~$ cancel OfficePrinter-123
To cancel all jobs for all printers:
fosslinux@ubuntu:~$ cancel -a
To pause and resume a printer (useful when you need to stop the queue without canceling jobs):
fosslinux@ubuntu:~$ sudo cupsdisable OfficePrinter fosslinux@ubuntu:~$ sudo cupsenable OfficePrinter
To move a stuck job from one printer to another (for example, if one printer is offline):
fosslinux@ubuntu:~$ sudo lpmove OfficePrinter-123 HomePrinter
Why It Matters: A stuck print job does not just waste paper. It holds up every job behind it in the queue. If you share a printer in an office and someone prints a corrupted 200-page PDF, nobody else can print until you clear it. Knowing cancel -a and lpmove is the difference between a 10-second fix and a 10-minute panic.
Printer Drivers: HPLIP, Gutenprint, and Driverless Printing
The driver landscape in 2026 has three tiers: driverless (works for most printers), manufacturer-specific (for full-feature support), and generic PostScript (fallback for older hardware).
Driverless Printing (IPP Everywhere)
Driverless printing is the default for any printer manufactured after 2018 that supports IPP Everywhere or AirPrint. CUPS identifies the printer, queries its capabilities, and sends print jobs using a universal format. No driver installation required. This is what -m everywhere uses.
HPLIP for HP Printers
If you own an HP printer and want full functionality (ink level monitoring, scanning, fax), HPLIP is the best option. For a complete HPLIP installation guide covering Ubuntu, Linux Mint, and elementary OS, see our HP Printer Drivers Guide.
The short version: install hplip and hplip-gui from your package manager, then run hp-setup to configure the printer through a graphical wizard.
Gutenprint for Epson, Canon, and Brother
Gutenprint provides over 1,300 printer drivers for manufacturers including Epson, Canon, and Brother. It is maintained by OpenPrinting and available in all three distro repositories.
fosslinux@ubuntu:~$ sudo apt install -y gutenprint fosslinux@fedora:~$ sudo dnf install -y gutenprint fosslinux@archlinux:~$ sudo pacman -S --noconfirm gutenprint
Once installed, Gutenprint drivers appear in the CUPS web interface under “Orphaned PPDs” or as additional model options when adding a printer.
Brother Printers
Brother provides proprietary Linux drivers for their laser and inkjet printers. Download the .deb or .rpm packages from support.brother.com and install them with your package manager. Brother printers that support AirPrint also work with driverless printing, but the proprietary drivers give you access to duplex settings and toner monitoring.
How to Share Printers on Your Local Network
If you want other computers on your network to print through your Linux machine, you need to enable printer sharing in CUPS.
fosslinux@ubuntu:~$ sudo cupsctl --share-printers
This broadcasts your printers via mDNS so other machines on the network can discover them. For more granular control, edit /etc/cups/cupsd.conf and add BrowsePoll directives to pull printers from another print server.
For a complete guide to securing a shared CUPS print server with remote administration, see our CUPS Print Server Setup Guide.
How to Print from iPhone or iPad to Linux (AirPrint)
AirPrint works on Linux through CUPS and Avahi. If CUPS is running and your printer supports AirPrint, your iPhone or iPad can print to it automatically. No configuration needed on the iOS device.
Verify Avahi is running:
fosslinux@ubuntu:~$ systemctl status avahi-daemon --no-pager | head -3
�:� avahi-daemon.service - Avahi mDNS/DNS-SD Stack
Loaded: loaded (/usr/lib/systemd/system/avahi-daemon.service; enabled)
Active: active (running) since Wed Jul 3 10:00:00 EDT; 2h ago
On the same Wi-Fi network, open any app on your iPhone that supports printing (Safari, Photos, Notes), tap the Share button, and select “Print.” Your Linux-connected printer should appear in the printer list.
Worth Knowing: AirPrint requires three things: CUPS running on the Linux machine, Avahi broadcasting the printer via mDNS, and the printer supporting IPP Everywhere or AirPrint natively. If any of these three pieces is missing, your iPhone will not see the printer. The most common failure is a firewall blocking mDNS (UDP port 5353). On Ubuntu, check with sudo ufw status and ensure mDNS is allowed.
How to Scan Documents Using SANE on Linux
SANE (Scanner Access Now Easy) is the standard scanning framework on Linux. If you have a multifunction printer with a scanner, SANE likely already supports it.
Install the scanning utilities:
fosslinux@ubuntu:~$ sudo apt install -y sane-utils fosslinux@fedora:~$ sudo dnf install -y sane-utils fosslinux@archlinux:~$ sudo pacman -S --noconfirm sane
Detect your scanner:
fosslinux@ubuntu:~$ sane-find-scanner # USB scanner detected: Brother HL-L2370DW at libusb:001:003
Scan to a file:
fosslinux@ubuntu:~$ scanimage --format=png --output-file=scan.png
For a graphical scanning experience, install Simple Scan (called Document Scanner on GNOME):
fosslinux@ubuntu:~$ sudo apt install -y simple-scan
HP multifunction printers get full scanning support through HPLIP. For the complete setup, see our HP Printer Drivers Guide.
Troubleshooting: Printer Not Found on Linux
The “printer not found” error has a short list of causes. I have debugged this exact issue on three different distros this month alone. Work through this decision tree to find the fix.
Step 1: Is CUPS running?
fosslinux@ubuntu:~$ systemctl status cups --no-pager | head -3
�:� cups.service - CUPS Scheduler
Loaded: loaded (/usr/lib/systemd/system/cups.service; enabled)
Active: active (running)
If CUPS is not running, start it: sudo systemctl start cups
Step 2: Is the printer detected?
fosslinux@ubuntu:~$ lpinfo -v | grep -i usb direct usb://Brother/HL-L2370DW?...
If no USB printers appear, check lsusb to confirm the kernel sees the device.
Step 3: Is the printer added to CUPS?
fosslinux@ubuntu:~$ lpstat -p printer OfficePrinter is idle.
If no printers appear in lpstat -p, you need to add one using the web interface or lpadmin.
Step 4: Is the firewall blocking discovery?
fosslinux@ubuntu:~$ sudo ufw status | grep 631 631/tcp ALLOW Anywhere
For network printers, ensure CUPS port 631 and mDNS port 5353 are not blocked by your firewall.
CUPS vs Printer-Specific Tools: Which Should You Use?
The answer depends on what you need from your printer. I have learned this through years of trial and error with different hardware.
| Scenario | Best Option | Why |
|---|---|---|
| Basic text printing | CUPS (driverless) | No setup, works immediately |
| HP printer with scanning | HPLIP + CUPS | Ink levels, scanning, maintenance |
| Epson/Canon photo printing | Gutenprint + CUPS | Color profiles, paper types |
| Brother laser printer | Brother driver + CUPS | Duplex, toner monitoring |
| Network printer sharing | CUPS server mode | Central print management |
| iPhone/AirPrint | CUPS + Avahi | Native iOS printing |
In most cases, I recommend starting with CUPS driverless printing. If you need features that driverless does not provide (scanning, ink monitoring, advanced paper handling), install the manufacturer-specific driver as an addition, not a replacement.
FAQ
Q: Do I need to install CUPS on Ubuntu?
A: Ubuntu 26.04 includes CUPS by default. You only need to install it explicitly on minimal installs. The cups-client package provides the command-line tools if they are missing.
Q: Why does Fedora show CUPS as “disabled” when it is running?
A: Fedora uses systemd socket activation. CUPS starts on demand when a print request arrives, so it appears disabled in systemctl status but is actually active.
Q: Can I print from my phone to a Linux-connected printer?
A: Yes. If your printer supports AirPrint and CUPS plus Avahi are running on your Linux machine, your phone can print to it over Wi-Fi without any additional apps.
Q: What if my printer is not detected by CUPS?
A: Run lsusb to confirm the kernel sees the device. If it does, check that the usblp kernel module is loaded. For network printers, verify Avahi is running and the firewall allows mDNS.
Q: How do I clear a stuck print job?
A: Use cancel -a to clear all jobs. For a specific job, use cancel [job-id] where the job ID comes from lpstat -o.
Conclusion
Linux printing in 2026 is more reliable than it has ever been. CUPS handles the architecture, driverless IPP handles most printers, and the command-line tools give you full control when the GUI falls short. Whether you are on Ubuntu, Fedora, or Arch, the workflow is the same: install CUPS, add your printer, and print. I have been using this exact workflow on my personal machines for years and it has never let me down.
The commands in this article were verified on live VMs running Ubuntu 26.04, Fedora 44, and Arch Linux in July 2026. If you hit a specific issue that this guide does not cover, leave a comment and I will help you work through it.
