Linux printing technician providing live chat help for CUPS filters

Joe B.

Expert ★★★★★ 27,853 satisfied customers

Specialities: Linux printing (CUPS), cups-filters package issues, Ubuntu & Mint desktops, vendor PPD drivers, CUPS filter failed errors, network & USB printers that suddenly stop printing

Fix “Linux cups-filter path mismatch” — repair the CUPS cups-filter symlink so print filters run correctly again

Technician avatar Technician
Hey there — we can definitely help when Linux cups-filters break and Snap or native apps can’t print because of a CUPS filter path mismatch. This usually isn’t a “dead printer”; it’s CUPS trying to run a filter binary from the wrong directory, like /usr/lib/cups/filter vs /usr/lib/cups/filters or /usr/libexec/cups/filter.

To point you at the right fix, I need to narrow it down a bit:
• Which Linux distro and version are you on — Ubuntu, Mint, Debian, Fedora, Manjaro, something else?
• What printer model and driver are you using (vendor .deb/.rpm, built-in driverless queue, or a PPD from the manufacturer)?
• In the CUPS error_log, what exact “Filter failed” or “No such file or directory” message do you see? For a cups-filter path mismatch we’re looking for lines like Unable to execute /usr/lib/cups/filter/rastertoXYZ: No such file or directory even though that file actually lives in a different cups-filters directory.

Once we know which filter CUPS is trying to run and where it really lives, we can decide whether to fix cups-filter with a symlink, reinstall the cups-filters package, or tweak the PPD so the path matches your system.
Customer
I’m on Linux Mint based on Ubuntu. The printer is a Samsung laser using the vendor .deb driver. It used to work, but after a recent update every job stops with Filter failed. In /var/log/cups/error_log I see:
Unable to execute filter program: No such file or directory
and right after that:
[Job 57] Unable to execute /usr/lib/cups/filter/rastertospl: No such file or directory.
The weird part is that when I check, the file actually exists at /usr/lib/cups/filters/rastertospl (notice the extra “s”). So it looks like a cups filter path mismatch but I’m not sure what the safest way is to fix it.
Technician avatar Technician
Perfect, that log snippet is exactly what we needed.

What’s going on is a classic Linux cups-filter path mismatch. Your PPD or vendor driver was written for a system that expects filters in /usr/lib/cups/filter/ (no “s”), but your current cups-filters package installs them in /usr/lib/cups/filters/ instead. When CUPS prints, it reads the PPD, tries to run /usr/lib/cups/filter/rastertospl, and the kernel returns No such file or directory even though the real binary sits in the “filters” directory.

That’s why you see Filter failed in the CUPS web UI and jobs move to “Stopped”. The actual printer and USB/network connection are fine — CUPS never gets as far as talking to the printer because the rasterto… cups-filter binary never launches.

We can fix this in a few different ways:
1) Edit the PPD so it points to the right path.
2) Reinstall a distribution-provided driver that already uses the correct cups-filters path.
3) Or, most simply, create a symlink from the path CUPS expects to the path where the filter really lives. That’s the typical cups-filter symlink fix and works well if you’re careful.
Customer
Yeah, when I run ls /usr/lib/cups/filters | grep rastertospl I see the file there, and ls /usr/lib/cups/filter shows nothing because that directory doesn’t even exist. So CUPS is definitely calling the wrong path.

I’m comfortable with the terminal but I don’t want to break packages. Is the recommended approach here really just to symlink the missing cups filter path? If so, which way should the link go so future updates to cups-filters still work?
Technician avatar Technician
Great question — you’re right to think about package safety first.

On most modern Ubuntu/Mint systems the cups-filters package owns the /usr/lib/cups/filters/ directory and puts things like foomatic-rip, gstoraster, rastertopdf, and vendor filters there. Old vendor PPDs, however, still hardcode paths under /usr/lib/cups/filter/ or even /usr/libexec/cups/filter/.

Before we touch anything, I’d like you to double-check two things:
• Run grep -i rastertospl /etc/cups/ppd/*.ppd and confirm that your printer’s PPD references /usr/lib/cups/filter/rastertospl.
• Run dpkg -S /usr/lib/cups/filters/rastertospl to see which package owns the working filter file.

If the PPD is indeed pointing at /usr/lib/cups/filter while the package owns the binary under /usr/lib/cups/filters, the safest fix is to create a small symlink in the non-existent directory that points back to the real filter. That way, updates to cups-filters still manage the real file, and our symlink simply follows along.
Customer
That matches what I’m seeing. The PPD under /etc/cups/ppd clearly calls /usr/lib/cups/filter/rastertospl, and dpkg -S shows the actual binary belongs to the Samsung driver package in /usr/lib/cups/filters.

This machine is 64-bit, but the vendor driver is pretty old so I’m guessing it was built for a slightly different cups layout. Could you walk me through the cups-filter symlink fix step by step? I’d prefer to just link this one filter instead of messing with every printer on the system.
Technician avatar Technician
Absolutely — here’s the careful way I fix a Linux cups-filter path mismatch when the only problem is that “filter” vs “filters” directory.

1) Create the legacy directory if needed.
sudo mkdir -p /usr/lib/cups/filter

2) Create a symlink for the specific filter binary. Adjust the name to match what your error_log shows (in your case, rastertospl):
sudo ln -s /usr/lib/cups/filters/rastertospl /usr/lib/cups/filter/rastertospl

3) Restart CUPS so it forgets the failed job state:
sudo systemctl restart cups

4) Print a test page from the CUPS web interface or your desktop settings and watch error_log in another terminal with:
sudo journalctl -u cups -f or sudo tail -f /var/log/cups/error_log.

If the only issue was a cups filter path mismatch, you’ll see the job run through rastertospl without No such file or directory and the page should come out normally. This approach doesn’t overwrite any package files — it just provides the legacy path that your PPD expects.
Customer
That makes sense. On another laptop I have a similar error but the path is different: CUPS tries /usr/lib/cups/filter/foomatic-rip, while the real one is under /usr/libexec/cups/filter/foomatic-rip on Fedora. So it’s a slightly different cups-filter path mismatch but the idea seems the same.

Is it okay to create multiple symlinks like this — one for foomatic-rip, one for rastertopdf, etc. — or is there a better way to fix this globally?
Technician avatar Technician
You’ve got it — Fedora and some other distros prefer /usr/libexec/cups/filter, so vendor drivers that assume /usr/lib/cups/filter will break there too.

When you have more than one missing filter, you have two main strategies:
• Targeted symlinks per binary — for each error_log line (“Missing filter / Filter failed / No such file or directory”), create a symlink from the legacy path to the real cups-filters path. This is the most controlled option and works well when only a few vendor filters are affected.
• Directory-level symlink — in some setups, admins create /usr/lib/cups/filter as a symlink to /usr/libexec/cups/filter (or to /usr/lib/cups/filters). That’s cleaner, but you must be absolutely sure the target directory exists and is the one your distro owns, otherwise you can confuse CUPS or future packages.

For home and small-office systems, I usually start with per-filter symlinks for the drivers that complain. It keeps the cups-filter symlink fix minimal and easy to revert later if you switch to newer, driverless queues.
Customer
Got it. One thing I worry about is updates. If a future cups-filters or printer driver update moves things around again, could these symlinks cause issues or block the upgrade? I’ve seen “file exists in filesystem” errors before when I messed with system paths.
Technician avatar Technician
Great that you’re thinking ahead — that’s how you avoid painful surprises.

A few safety notes about this cups-filter path mismatch fix:
• We’re creating symlinks only in paths that are currently unused by your distro (/usr/lib/cups/filter in your case). The package manager doesn’t own those files, so updates to cups or cups-filters won’t conflict with the symlink.
• The “file already exists in filesystem” problem usually happens when people manually copy filter binaries over the top of package-managed files. We’re not doing that — the real filters stay where the package put them.
• If you ever install a newer driver that expects the modern path, the symlink quietly continues to work; if the vendor finally updates their PPD, you can simply remove the link with sudo rm /usr/lib/cups/filter/rastertospl.

If you absolutely want to avoid touching /usr, the alternative is to edit the PPD Filter lines so they reference the correct cups-filters path. That works too, but it’s more fragile if you later delete and recreate the queue, so most admins prefer the symlink approach you’re considering.
Customer
Makes sense. I also have a second printer that uses the generic IPP Everywhere / driverless queue and that one still prints fine. I don’t want to break that working setup while fixing this cups-filter issue for the Samsung driver.

Is there anything I should double-check so the cups-filter symlink fix only affects the broken queue and not the driverless one?
Technician avatar Technician
Good news: the driverless / IPP Everywhere queue uses different filters (often the generic pdftopdf, gstoraster, etc.) and the correct paths are already present, so adding a legacy path for your Samsung filter won’t disturb it.

To be safe, you can:
• Run lpstat -t to list all queues and confirm which one uses the vendor PPD vs “driverless”.
• Check each PPD with grep -i Filter /etc/cups/ppd/*.ppd — you’ll see the Samsung queue hardcoding /usr/lib/cups/filter/... while the driverless printer uses the modern cups-filters path.
• After creating the symlink, print a test page to both printers and watch error_log in real time. You should see the driverless printer behave exactly as before, while the Samsung queue finally runs the rastertospl filter without “No such file or directory”.

In other words, you’re just giving CUPS an extra door to reach the filter binary it already knows how to use.
Customer
That clears it up. One last question: this printer worked fine for years and only started showing Filter failed after a system upgrade. Why do cups-filter path mismatches tend to appear right after distro updates or migrating from one distro to another?
Technician avatar Technician
Great observation — you’ve bumped into one of those “moving target” problems in the Linux printing world.

Over the years, different distros have changed how they lay out CUPS filters and backends: some use /usr/lib/cups/filter, others /usr/lib/cups/filters, others /usr/libexec/cups/filter, and recent “/usr merge” changes have shuffled paths again. The cups-filters project follows distro policies, but many vendor drivers and PPDs were written once, hardcoded to a specific directory, and never updated.

When you upgrade your OS, the distro packages move filters to the new standard path, but your old printer queue keeps the original hardcoded filter path in its PPD. CUPS happily keeps using that outdated path until one day it can’t find the filter anymore — and you start seeing Filter failed / No such file or directory for binaries that are still installed, just in a different directory.

That’s why the Linux cups-filter symlink fix is so effective: instead of rewriting every legacy PPD after each upgrade, you provide a small compatibility bridge from the old path to the new one and let CUPS continue working.
Customer
That all makes sense now. For this machine I just want a reliable fix so Linux apps can print again without CUPS filter errors. Can you summarize the exact steps we should take to fix a cups-filter path mismatch, and if needed, could you help double-check my commands one-on-one?
Technician avatar Technician
Absolutely — here’s the practical recipe I use whenever Linux cups-filters throw “Filter failed” because of a path mismatch:

1) Check error_log for the exact missing filter path (for example, /usr/lib/cups/filter/rastertospl) and confirm the real binary exists under /usr/lib/cups/filters or /usr/libexec/cups/filter.
2) Verify the PPD for that queue references the legacy path with grep -i Filter /etc/cups/ppd/YourPrinter.ppd.
3) Create the legacy directory if required and add a symlink from the bad path to the real cups-filters path (e.g., sudo ln -s /usr/lib/cups/filters/rastertospl /usr/lib/cups/filter/rastertospl).
4) Restart CUPS, print a test page, and confirm that jobs no longer stop with “Filter failed” and the printer actually outputs pages.

If you’d like, I can walk through your exact CUPS logs, PPDs, and cups-filters paths live, check your commands before you run them, and make sure we don’t break anything else on the system. Open the chat and I’ll help you repair the cups-filter path mismatch so your Linux printers behave again.

Quick answer: the accepted fix

Accepted fix when a Linux cups-filter path mismatch causes CUPS “Filter failed” errors: identify the missing filter path in error_log, confirm the real cups-filters binary exists in your distro’s filter directory, then create a symlink from the legacy path CUPS expects to the real filter location. Restart CUPS and reprint; jobs should complete without “No such file or directory”. When possible, also update or replace the old PPD so it uses the correct cups-filters path going forward.


Why your Linux cups-filter path doesn’t match the CUPS filter location

When Linux printers suddenly stop working after an update and CUPS logs show Filter failed or Unable to execute /usr/lib/cups/filter/..., it’s often because cups-filters moved while your PPD did not. Distros like Ubuntu, Fedora, Arch, and Manjaro ship different default paths for foomatic-rip, gstoraster, and other CUPS filters — some use /usr/lib/cups/filter, others /usr/lib/cups/filters or /usr/libexec/cups/filter. Old vendor drivers and PPDs hardcode one layout, so after a distro upgrade CUPS is left calling a filter path that no longer exists, even though the real cups-filter binary is installed elsewhere.

How to verify the cups-filter symlink fix restored printing

After you create the cups-filter compatibility symlink and restart the CUPS service, test the setup when the system is quiet. Open the CUPS web interface or your desktop’s printer settings and print a test page. At the same time, watch error_log with tail -f or journalctl -f -u cups. A successful fix means the job passes through the named filter (for example, rastertospl or foomatic-rip) without any new No such file or directory lines. The printer should wake up, the job status should change to “completed”, and your Linux applications should print again without CUPS filter errors.

Linux cups-filters — quick tips for CUPS “Filter failed” errors

Before you reinstall everything, trace what CUPS is really trying to run.

Quick path: enable debug logging in CUPS → print a test page → check error_log for the exact filter that fails with No such file or directory → confirm where that binary actually lives under /usr/lib/cups or /usr/libexec/cups → fix any cups-filter path mismatch with a small symlink or by updating the PPD. Avoid randomly copying filter binaries between directories; it’s safer to let the cups-filters package own the real files and use symlinks or updated PPDs for compatibility.

Disclaimer: This information is AI-generated and intended for general guidance only. Always follow your distribution’s documentation and the official CUPS/cups-filters recommendations. For advice specific to your Linux distribution, printer model, and CUPS configuration, please consult a verified expert on Whizz-Tech before changing system directories or permissions.


Getting Started Is Easy

Ask for help, 24/7

Members enjoy round-the-clock access to 12,000+ verified Experts, including Linux printing specialists, CUPS administrators, and desktop support pros who fix cups-filters and CUPS “Filter failed” errors every day.

Expert will respond in minutes

We match you with an Expert who specializes in CUPS, cups-filters, Ghostscript, and Linux printer drivers, so you get precise help for path mismatches, missing filters, and filter failed logs instead of generic “reinstall everything” advice.

Save time & money

Skip hours of log-digging and trial-and-error. We’ll help you repair cups-filter path mismatches, clean up broken vendor drivers, and get reliable Linux printing again without unnecessary hardware replacements.

FAQ

What does “Filter failed” mean in CUPS on Linux?

In CUPS, a “Filter failed” status usually means one of the programs that converts your document into printer-ready data crashed or couldn’t be executed. When the log shows No such file or directory for a path like /usr/lib/cups/filter/rasterto..., it’s often a cups-filter path mismatch where the PPD points to a directory that no longer exists even though the real filter binary is installed elsewhere.

How do I know if I have a cups-filter path mismatch?

Check /var/log/cups/error_log (or journalctl -u cups) after a failed print. If you see lines such as Unable to execute /usr/lib/cups/filter/foomatic-rip: No such file or directory, but ls shows the filter in /usr/lib/cups/filters or /usr/libexec/cups/filter, you have a Linux cups-filter path mismatch and can usually fix it with a small compatibility symlink or by updating the PPD.

Is it safe to create symlinks in /usr/lib/cups/filter to fix cups-filters?

Creating a symlink from a legacy cups-filter path to the real filter binary is generally safe if the legacy path isn’t owned by any package and you only link specific binaries. Avoid overwriting existing files or copying filters between directories. When in doubt, check which package owns the real filter with your package manager and keep that file as the source of truth.

Can I fix cups-filter path mismatches without touching system directories?

Yes. Instead of symlinks you can edit the PPD file for the affected printer and change Filter lines to use your distro’s current cups-filters path. This avoids writing into /usr/lib, but you’ll need to repeat the change if you recreate the queue or install the driver again. Many admins prefer the small symlink approach because it works for all queues that reference the old path.

Sources

Matt Verified Icon
Matt ● replies in < 1 min
Technician Expert
⭐⭐⭐⭐⭐ Trusted by 27,000+ customers
Avatar
Alex · Expert's Assistant