Fix a Printer Not Working on Linux (CUPS, Driverless, HP)
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 see | Go to |
|---|---|
| Printer does not appear in Settings or the print dialog | Steps 2 and 3, then discovery fixes |
| Printer is listed, jobs sit in the queue forever | Stuck or disabled queue |
| Job disappears, nothing prints, or "Filter failed" | Driver fixes and the CUPS error log |
| Prints garbage or wrong paper size | Wrong driver or PPD; re-add as driverless |
| USB printer not detected | Step 3 (lsusb, ipp-usb) |
| Scanner part of a multifunction does not work | Separate 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
- Start Avahi.
sudo systemctl enable --now avahi-daemon. Without it,.localnames do not resolve and printers are not found automatically. - 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 - 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.
- Add it by IP. Most printers accept IPP at
/ipp/print:
Thesudo 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-m everywheremodel 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:
| Printer | What to use |
|---|---|
| Any printer advertising IPP Everywhere / AirPrint | Driverless: -m everywhere. Delete old queues that used a PPD and re-add. |
| HP | hplip (all distros), then hp-setup -i. Some laser models also need the binary plugin: hp-plugin. |
| Brother laser | Driverless if supported, otherwise printer-driver-brlaser (Debian/Ubuntu) / brlaser |
| Epson inkjet | printer-driver-escpr (Debian/Ubuntu), epson-inkjet-printer-escpr (Fedora/Arch) |
| Canon, older models | gutenprint 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 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(ormedia=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 -lfor 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-browsedandipp-usbare installed and running on desktop installs. GNOME Settings → Printers is the easiest way to add a found printer.cups-browsedcreates 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-printeris an alternative GUI. - Arch: nothing is enabled by default. Install
cups,cups-filters,avahiandnss-mdns, enablecups.socketandavahi-daemon, and addmdns_minimal [NOTFOUND=return]beforeresolve/dnson thehosts: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.