Printer Shows Idle But Won't Print Test Page on Linux

Linux & Unix Intermediate 👁 16 views 📅 Jun 15, 2026

Your printer says idle but nothing prints. Usually a CUPS filter or driver mismatch. Here's how to fix it fast.

Quick Answer

Run lp -d <printer-name> /etc/nsswitch.conf to force a print. If the job shows 'completed' but nothing comes out, check CUPS error log with tail -f /var/log/cups/error_log – you're likely looking at a filter crash or PPD mismatch.

Why This Happens

I've seen this on maybe a dozen different Linux boxes over the years – Ubuntu 22.04, Fedora 38, even a crusty CentOS 7 server. Printer shows idle, you hit 'Print Test Page' in the settings, the job appears, says 'completed' after a few seconds, and the paper tray stays empty. The printer's USB or network connection works fine, CUPS sees it, but the data never reaches the device.

Nine times out of ten, it's a filter problem. CUPS uses filters to convert your document into printer language (PostScript, PCL, or the printer's proprietary format). If the filter binary is missing, crashed, or incompatible with your PPD file, the job gets marked as done after a timeout, with no output. Last month I had a client whose Brother HL-L2370DW did exactly this – the PPD file from the drivers package referenced a filter that Ubuntu 22.04's cups-filters package had deprecated. Took me 20 minutes of log tailing to spot it.

How to Fix It – Step by Step

Step 1: Check CUPS Error Log

Open a terminal and run:
tail -f /var/log/cups/error_log
Then try printing again. Look for lines with ERROR or filter failed. If you see something like filter /usr/lib/cups/filter/foomatic-rip failed, you've found the culprit.

Step 2: Identify the Printer

Run lpstat -p -d to list printers. Note the exact name – case matters. Then check the PPD file location with lpoptions -p <printer-name> -l or look in /etc/cups/ppd/. The PPD file name matches the printer name.

Step 3: Force a Direct Print

Try sending raw data to the printer port. For a USB printer, find the device node with lsusb and look in /dev/usb/lp*. For a network printer, find its IP. Then run:
lp -d <printer-name> -o raw /etc/nsswitch.conf
If this prints, the printer hardware and connection are fine, and it's definitely a filter issue.

Step 4: Fix the Filter

If the log shows a missing filter, install the cups-filters package:
sudo apt install cups-filters (Debian/Ubuntu) or sudo dnf install cups-filters (Fedora). If you see a filter like Brother_lpdwrapper_HL-L2370DW failing, you need the printer manufacturer's driver package – check their Linux support page. For HP printers, install hplip. For Epson, epson-inkjet-printer-escpr.

Step 5: Reinstall or Replace the PPD

Sometimes the PPD file is corrupted or wrong. Delete it (sudo rm /etc/cups/ppd/<printer-name>.ppd), then re-add the printer through the system settings. Or use sudo lpadmin -p <printer-name> -E -v <device-uri> -m everywhere for a driverless setup (works with most modern printers that support IPP Everywhere).

Step 6: Restart CUPS and Test

sudo systemctl restart cups
Then print a test page using lp -d <printer-name> /etc/nsswitch.conf or the GUI. If it prints, you're done.

Alternative Fixes If the Main One Fails

Check Permissions

If the CUPS error log shows file not found or permission denied on a filter, check ls -l /usr/lib/cups/filter/ – filters should be executable (-rwxr-xr-x). Also check that the lp user owns the spool directory: sudo chown -R lp:lp /var/spool/cups/

Try a Different Connection Method

Switching from USB to network (or vice versa) can bypass weird USB driver issues. I've had cases where USB printers needed usblp kernel module loaded: sudo modprobe usblp. For network printers, make sure port 9100 (raw) or 631 (IPP) is open on your firewall.

Use the Terminal with lpadmin

If the GUI just won't behave, add the printer manually. Get the device URI from lpinfo -v, then:
sudo lpadmin -p MyPrinter -E -v <uri> -m everywhere
sudo cupsaccept MyPrinter
sudo cupsenable MyPrinter

Prevention Tip

Stick to driverless printing (IPP Everywhere) when possible. It uses a generic PPD that CUPS handles natively, so you avoid proprietary filter headaches. When you do need a manufacturer driver, install it from the distro's package manager, not a random .run file from the vendor site – those often install outdated filters that break after a kernel update. Also, every time you upgrade the distro version, print a test page the next day. Filter incompatibilities are common after major upgrades (I've hit this on Ubuntu 20.04 -> 22.04 and Fedora 37 -> 38).

Was this solution helpful?