Fix a Printer Not Working on Linux (CUPS, Driverless, HP)

Quick fix

Make sure CUPS is running, see what it knows about your printer, and re-enable a stopped queue:

systemctl status cups
lpstat -t
cupsenable <printer-name>
cancel -a <printer-name>

If the printer is missing entirely, list driverless printers on the network and add one by name:

driverless
sudo lpadmin -p office -E -v "ipp://192.168.1.50/ipp/print" -m everywhere

Identify your case

What you seeGo to
Printer does not appear in Settings or the print dialogSteps 2 and 3, then discovery fixes
Printer is listed, jobs sit in the queue foreverStuck or disabled queue
Job disappears, nothing prints, or "Filter failed"Driver fixes and the CUPS error log
Prints garbage or wrong paper sizeWrong driver or PPD; re-add as driverless
USB printer not detectedStep 3 (lsusb, ipp-usb)
Scanner part of a multifunction does not workSeparate stack (SANE / eSCL); see the note at the end

Diagnose step by step

Step 1: Is CUPS running?

CUPS is the print server on every major distribution. Desktop print dialogs only show what CUPS reports.

systemctl status cups
sudo systemctl enable --now cups

If it is not installed (common on minimal and server installs):

sudo apt install cups              # Ubuntu, Debian, Mint
sudo dnf install cups              # Fedora
sudo pacman -S cups cups-filters   # Arch
sudo zypper install cups           # openSUSE

The service is cups.service everywhere; you may also see cups.socket, which starts CUPS on demand.

Step 2: See what CUPS knows

lpstat -t

Example output:

scheduler is running
system default destination: office
device for office: ipp://HP-LaserJet.local:631/ipp/print
office accepting requests since Fri 16 Oct 2026 09:12:01
printer office disabled since Fri 16 Oct 2026 09:14:33 -
        Unable to locate printer "HP-LaserJet.local".
office-12    youss   20480   Fri 16 Oct 2026 09:14:30

Read it line by line: scheduler is running confirms CUPS; the device for line shows the address CUPS uses; disabled plus a reason tells you exactly what failed (here, name resolution of a .local host, which is an Avahi problem). The last line is a waiting job.

Step 3: Can the system reach the printer?

Network printers

ping -c3 192.168.1.50
avahi-browse -rt _ipp._tcp
ippfind
driverless

avahi-browse and ippfind list printers that announce themselves via mDNS. driverless prints a ready-to-use URI for each driverless printer it finds. If ping works but none of the discovery tools show the printer, discovery is blocked; the printer can still be added by IP.

USB printers

lsusb
lpinfo -v
systemctl status ipp-usb

lpinfo -v lists every device URI CUPS can see. Modern USB printers that support IPP-over-USB are handled by ipp-usb, which makes them appear as a network printer on localhost; install it if your distro does not ship it by default (ipp-usb package on all four families).

Step 4: Print a test page from the command line

Printing from a terminal removes the desktop print dialog and the application from the equation:

lp -d office /usr/share/cups/data/testprint
lpstat -o
lpstat -p office -l

If the job prints from lp but not from an app, the app's print settings (paper size, a selected but missing printer) are the problem. If the job enters the queue and then the printer is disabled, the last line of lpstat -p shows the reason, and the error log section below tells you which part failed.

Fix: printer not discovered

  1. Start Avahi. sudo systemctl enable --now avahi-daemon. Without it, .local names do not resolve and printers are not found automatically.
  2. Allow mDNS in the firewall. Discovery uses UDP port 5353.
    # Fedora, openSUSE (firewalld)
    sudo firewall-cmd --permanent --add-service=mdns
    sudo firewall-cmd --permanent --add-service=ipp-client
    sudo firewall-cmd --reload
    # Ubuntu, Debian (if ufw is enabled)
    sudo ufw allow 5353/udp
  3. Different subnet or guest Wi-Fi. mDNS does not cross routers or VLANs. Connect to the same network as the printer, or skip discovery and add it by IP.
  4. Add it by IP. Most printers accept IPP at /ipp/print:
    sudo lpadmin -p office -E -v "ipp://192.168.1.50/ipp/print" -m everywhere
    lpoptions -d office
    lp -d office /usr/share/cups/data/testprint
    The -m everywhere model tells CUPS to query the printer for its capabilities instead of using a driver file. Give the printer a fixed IP address (a DHCP reservation in your router) so the URI keeps working.

General network troubleshooting is covered in the Linux networking basics guide.

Printer goes offline after a while

Network printers often enter deep sleep and stop answering mDNS, so the queue shows "printer not connected" even though it wakes for jobs sent by IP. Use an IP-based URI instead of the .local name for queues you depend on, and check the printer's web interface for a sleep or "energy saving" option that turns off networking. Wi-Fi printers that change IP after a router restart need a DHCP reservation, otherwise every queue pointing at the old address breaks.

Fix: stuck or disabled queue

lpstat -p
lpstat -o
cancel -a office
cupsenable office
cupsaccept office

CUPS disables a queue after an error so jobs do not pile up. cupsenable restarts it, but it will be disabled again if the cause remains. To make CUPS retry instead of stopping, set the error policy:

sudo lpadmin -p office -o printer-error-policy=retry-job

If CUPS itself is wedged, restart it: sudo systemctl restart cups.

Fix: driver problems and "Filter failed"

Check the log first. It names the filter or backend that failed:

sudo journalctl -u cups -b --no-pager | tail -40
sudo tail -50 /var/log/cups/error_log
sudo cupsctl --debug-logging    # more detail, turn off with --no-debug-logging

Then pick the right driver. In order of preference:

PrinterWhat to use
Any printer advertising IPP Everywhere / AirPrintDriverless: -m everywhere. Delete old queues that used a PPD and re-add.
HPhplip (all distros), then hp-setup -i. Some laser models also need the binary plugin: hp-plugin.
Brother laserDriverless if supported, otherwise printer-driver-brlaser (Debian/Ubuntu) / brlaser
Epson inkjetprinter-driver-escpr (Debian/Ubuntu), epson-inkjet-printer-escpr (Fedora/Arch)
Canon, older modelsgutenprint drivers, or Canon's own packages

Remove the broken queue before re-adding so the old driver is not reused:

sudo lpadmin -x office
Vendor installers

Vendor driver scripts often install 32-bit libraries and old filters system-wide and break on distribution upgrades. Try driverless first, and prefer packages from your distro repositories.

Fix: wrong paper size, blank pages or garbled output

  • Letter vs A4: CUPS takes the default paper size from your locale and the printer's report. Set it explicitly per printer with lpoptions -p office -o media=A4 (or media=Letter). On Debian and Ubuntu the system default lives in /etc/papersize.
  • Pages of random characters: the queue sends a language the printer does not speak, usually because a generic PostScript or PCL driver was chosen. Delete the queue and re-add it with -m everywhere, or with the correct vendor driver.
  • Blank pages from a PDF: print the same file from another app. If only one PDF fails, try Print as image in the viewer, which bypasses font problems in the file.
  • Duplex, trays or colour options missing: the driverless queue reflects what the printer reports; check lpoptions -p office -l for the available options and their current values.

Fix: permission to manage printers

If the Settings app or the web interface at http://localhost:631 refuses to add printers, your user is not in the printer admin group:

# Ubuntu, Debian, Mint
sudo usermod -aG lpadmin $USER
# Fedora, Arch: admin is via wheel or sys
groups

Log out and back in for group changes to apply. More on groups is in the user management guide.

Distro notes

  • Ubuntu and Mint: CUPS, Avahi, cups-browsed and ipp-usb are installed and running on desktop installs. GNOME Settings → Printers is the easiest way to add a found printer. cups-browsed creates queues automatically for discovered printers; if you see duplicate printers, that is why.
  • Debian 13: desktop tasks install CUPS; a minimal install does not. Add your user to lpadmin.
  • Fedora 44: firewalld is active, so discovery problems are often the firewall. system-config-printer is an alternative GUI.
  • Arch: nothing is enabled by default. Install cups, cups-filters, avahi and nss-mdns, enable cups.socket and avahi-daemon, and add mdns_minimal [NOTFOUND=return] before resolve/dns on the hosts: line in /etc/nsswitch.conf. See the Arch Wiki CUPS page.
  • openSUSE: sudo zypper install cups cups-filters; open mDNS in firewalld as shown above.

Last resort

  • Print a test page from the printer's own web interface or front panel to rule out hardware.
  • Delete every queue for the printer (sudo lpadmin -x name) and re-add it once, driverless, by IP.
  • Restart the printer. Network printers with long uptime commonly stop answering IPP or mDNS until rebooted.
  • Scanners are separate: driverless scanning uses eSCL/WSD through sane-airscan. Install it if your multifunction prints but will not scan.

For a structured approach to other hardware problems, use the general Linux troubleshooting guide.

Frequently asked questions

Do I need a driver for my printer on Linux?

Most printers made since about 2015 support driverless printing (IPP Everywhere, AirPrint or Mopria) and need no driver: CUPS talks to them directly over the network or through ipp-usb for USB. Older or cheaper models may need hplip, gutenprint or a vendor driver.

Why are my print jobs stuck in the queue?

The printer queue is often disabled after an error. Run lpstat -p; if it says disabled, fix the cause (offline printer, wrong address, filter failure) and run cupsenable <printer>. Clear old jobs with cancel -a.

Why can't Linux find my network printer?

Network printers are discovered with mDNS (Avahi). If avahi-daemon is stopped, a firewall blocks UDP 5353, or the printer is on another subnet or VLAN, it will not appear. You can still add it by IP address with an ipp:// URI.

How do I open the CUPS web interface?

Browse to http://localhost:631. Administrative actions ask for your username and password; your user must be in the lpadmin group on Debian and Ubuntu, or in wheel/sys on Fedora and Arch.

Spotted a mistake or a command that no longer works? Send a correction — pages are re-checked when reports come in.