Printer worked on 42.1, now "Unsupported format" on 15.1

Sorry to have to come begging here, but after 2 days of experimentation I’m out of ideas.

I have a Lexmark MS312dn laser printer, attached via ethernet/IPP, which worked on Leap 42.1. I just (finally!) upgraded with a fresh install of 15.1, and attempting to print most files – from commandline, libreoffice, okular, evince, or even a test page from the CUPS server at http://localhost:631/printers/ – fails with an “Unsupported format” error. Examples:

Unsupported document-format "application/pdf".
Unsupported document-format "application/postscript".
Unsupported document-format "text/plain".
Unsupported format "application/vnd.cups-pdf-banner".
Unsupported document-format "image/x-portable-pixmap"

But somehow printing JPEG or PNG files with lp does work.

I’ve tried both the PPD file that was working on 42.1, which has “PPD-O-MATIC (4.0.0 or newer) generated this PPD file”, and a PPD downloaded directly from Lexmark’s website – they provide excellent support for Linux with RPMs, plus firmware updates which can be installed without running Microsoft software. Each time I changed the PPD file in /etc/cups/ppd I first stopped, and then restarted the CUPS service (with YaST Services Manager). Both PPDs give the same errors.

I believe the problem is with CUPS filtering – I can access both CUPS and the printer’s web interfaces, lpq works, etc. The CUPS logs always show the “Unsupported document-format” errors, but none for the successful JPEG/PNG output.

I’ve tried to install the same CUPS and associated packages in 15.1 that I had in 42.1, or as much as possible given that things have changed between the two releases. On 15.1 I have:

$ rpm -qa | sort | egrep -i 'cups|foom|ppd|guten'
Lexmark-ADS-PPD-Files-1.0-02242017.x86_64
OpenPrintingPPDs-4.0.0.2-lp151.2.1.noarch
OpenPrintingPPDs-ghostscript-4.0.0.2-lp151.2.1.noarch
OpenPrintingPPDs-hpijs-4.0.0.2-lp151.2.1.noarch
OpenPrintingPPDs-postscript-4.0.0.2-lp151.2.1.noarch
cups-2.2.7-lp151.5.2.x86_64
cups-backends-1.1-lp151.2.1.noarch
cups-client-2.2.7-lp151.5.2.x86_64
cups-config-2.2.7-lp151.5.2.x86_64
cups-filters-1.20.3-lp151.2.4.x86_64
cups-pk-helper-0.2.6-lp151.2.2.x86_64
cups-pk-helper-lang-0.2.6-lp151.2.2.noarch
gutenprint-5.2.14-lp151.2.3.x86_64
libcups2-2.2.7-lp151.5.2.x86_64
libcups2-32bit-2.2.7-lp151.5.2.x86_64
libcupscgi1-2.2.7-lp151.5.2.x86_64
libcupsimage2-2.2.7-lp151.5.2.x86_64
libcupsmime1-2.2.7-lp151.5.2.x86_64
libcupsppdc1-2.2.7-lp151.5.2.x86_64
manufacturer-PPDs-10.2-lp151.4.1.noarch
python2-appdirs-1.4.3-lp151.2.1.noarch
python2-pycups-1.9.73-lp151.2.4.x86_64
python3-appdirs-1.4.3-lp151.2.1.noarch
python3-cupshelpers-1.5.7-lp151.6.3.noarch
python3-pycups-1.9.73-lp151.2.4.x86_64

On 42.1 I had:

$ rpm -qa | sort | egrep -i 'cups|foom|ppd|guten'
Lexmark-ADS-PPD-Files-1.0-02242017.x86_64
OpenPrintingPPDs-4.0.0.2-3.1.noarch
OpenPrintingPPDs-ghostscript-4.0.0.2-3.1.noarch
OpenPrintingPPDs-hpijs-4.0.0.2-3.1.noarch
OpenPrintingPPDs-postscript-4.0.0.2-3.1.noarch
cups-1.7.5-7.1.x86_64
cups-client-1.7.5-7.1.x86_64
cups-filters-1.0.58-12.1.x86_64
cups-filters-cups-browsed-1.0.58-12.1.x86_64
cups-filters-foomatic-rip-1.0.58-12.1.x86_64
cups-filters-ghostscript-1.0.58-12.1.x86_64
cups-libs-1.7.5-7.1.x86_64
cups-libs-32bit-1.7.5-7.1.x86_64
cups-pk-helper-0.2.5-5.1.x86_64
cups-pk-helper-lang-0.2.5-5.1.noarch
gutenprint-5.2.10-3.2.x86_64
libzypp-plugin-appdata-1.0.1-11.2.noarch
manufacturer-PPDs-10.2-272.1.noarch
python-cups-1.9.72-2.2.x86_64
python-cupshelpers-1.5.7-3.6.noarch
python3-cups-1.9.72-3.2.x86_64

Any suggestions on what’s wrong? My guess is that the problem is very simple. I really don’t want to have to go back to 42.1 to use the printer. I’ll gladly provide any further info, command output, or test results needed to help diagnose the problem. Thanks for any and all help.

Is /etc/cups/cups-files.conf current? (I’m just wondering if any paths may have changes here.) In any case, worth checking that config files in /etc/cups/ are not from previous distro CUPS version perhaps.

Let’s also check

rpm -qf /usr/lib/cups/filter/
ls -l /usr/lib/cups/filter/

Thanks, but this is a fresh 15.1 install on a newly-formatted disk partition, so nothing carried over. Looking at the 42.1 vs 15.1 installs now shows differences in the comments in /etc/cups/cups-file.conf but none in the actual configuration lines:

# cat /etc/os-release 
NAME="openSUSE Leap"
VERSION="15.1 "
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.1"
PRETTY_NAME="openSUSE Leap 15.1"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.1"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"

# egrep -v '^(#|$)' /etc/cups/cups-files.conf
SystemGroup root
AccessLog /var/log/cups/access_log
ErrorLog /var/log/cups/error_log
PageLog /var/log/cups/page_log

# egrep -v '^(#|$)' /mnt/openSUSE_42.1/etc/cups/cups-files.conf
SystemGroup root
AccessLog /var/log/cups/access_log
ErrorLog /var/log/cups/error_log
PageLog /var/log/cups/page_log

(Probably obvious, but I mount previous releases’ partitions when I want to reference them without rebooting.)

Should there be information on file-/mime-types in cups-files.conf?

I note that there is a more generic postscript PPD listed in http://www.openprinting.org/printer/Lexmark/Lexmark-MS312dn

It is also present on my system (no manufacturer-specific Lexmark PPD installed)…

# lpinfo -m |grep MS312
OpenPrintingPPDs/postscript/Lexmark-MS312dn.Postscript-Lexmark.ppd.gz Lexmark MS310 Series
OpenPrintingPPDs/postscript/Lexmark-MS312dn.Postscript.ppd.gz Lexmark MS312dn Foomatic/Postscript

which are provided by the OpenPrintingPPDs-postscript package.

Have you tried using this PPD?

I’d checked /usr/lib/cups/filter but didn’t know what to look for – only saw that 15.1 had more than 42.1 so I figured it was good. Looking at it now I see that 42.1 has pdftoippprinter but 15.1 doesn’t (has sys5ippprinter instead). Is that a meaningful clue?

$ ls -alRF /usr/lib/cups/filter 
/usr/lib/cups/filter:
total 2.3M
drwxr-xr-x 2 root root 4.0K Sep 13 21:41 ./
drwxr-xr-x 9 root root 4.0K Jun  7  2018 ../
-rwxr-xr-x 1 root root 531K Sep 13 13:54 CommandFileFilterG2*
-rwxr-xr-x 1 root root  56K Mar 17 04:40 bannertopdf*
-rwxr-xr-x 1 root root 2.4K Mar 17 04:40 brftoembosser*
-rwxr-xr-x 1 root root 3.3K Mar 17 04:40 brftopagedbrf*
lrwxrwxrwx 1 root root   11 Mar 17 04:40 cgmtopdf -> vectortopdf*
lrwxrwxrwx 1 root root   11 Mar 17 04:40 cmxtopdf -> vectortopdf*
-rwxr-xr-x 1 root root  11K Dec 17  2018 commandtocanon*
-rwxr-xr-x 1 root root  11K Dec 17  2018 commandtoepson*
-rwxr-xr-x 1 root root  11K Mar 17 04:40 commandtoescpx*
-rwxr-xr-x 1 root root  11K Mar 17 04:40 commandtopclx*
-rwxr-xr-x 1 root root  15K May  3 15:08 commandtops*
lrwxrwxrwx 1 root root   11 Mar 17 04:40 emftopdf -> vectortopdf*
-rwxr-xr-x 1 root root 108K Mar 17 04:40 foomatic-rip*
-rwxr-xr-x 1 root root  555 Mar 17 04:40 gstopdf*
-rwxr-xr-x 1 root root  558 Mar 17 04:40 gstopxl*
-rwxr-xr-x 1 root root  23K Mar 17 04:40 gstoraster*
-rwxr-xr-x 1 root root  11K May  3 15:08 gziptoany*
-rwxr-xr-x 1 root root 440K Apr 20 18:23 hpcups*
-rwxr-xr-x 1 root root  31K Apr 20 18:23 hpcupsfax*
-rwxr-xr-x 1 root root  23K Apr 20 18:23 hpps*
-rwxr-xr-x 1 root root 3.7K Mar 17 04:40 imagetobrf*
-rwxr-xr-x 1 root root  39K Mar 17 04:40 imagetopdf*
-rwxr-xr-x 1 root root  988 Mar 17 04:40 imagetops*
-rwxr-xr-x 1 root root  52K Mar 17 04:40 imagetoraster*
lrwxrwxrwx 1 root root   10 Mar 17 04:40 imagetoubrl -> imagetobrf*
-rwxr-xr-x 1 root root 6.5K Mar 17 04:40 imageubrltoindexv3*
-rwxr-xr-x 1 root root 6.6K Mar 17 04:40 imageubrltoindexv4*
-rwxr-xr-x 1 root root 1.8K Mar 17 04:40 musicxmltobrf*
-rwxr-xr-x 1 root root  23K Mar 17 04:40 pdftoijs*
-rwxr-xr-x 1 root root 148K Mar 17 04:40 pdftoopvp*
-rwxr-xr-x 1 root root 152K Mar 17 04:40 pdftopdf*
-rwxr-xr-x 1 root root  39K Mar 17 04:40 pdftops*
-rwxr-xr-x 1 root root  35K Mar 17 04:40 pdftoraster*
-rwxr-xr-x 1 root root  51K May  3 15:08 pstops*
-rwxr-xr-x 1 root root 1.1K Apr 20 18:22 pstotiff*
lrwxrwxrwx 1 root root   13 May  3 15:08 rastertodymo -> rastertolabel*
-rwxr-xr-x 1 root root  19K May  3 15:08 rastertoepson*
-rwxr-xr-x 1 root root  31K Mar 17 04:40 rastertoescpx*
-rwxr-xr-x 1 root root  48K Dec 17  2018 rastertogutenprint.5.2*
-rwxr-xr-x 1 root root  19K May  3 15:08 rastertohp*
-rwxr-xr-x 1 root root  23K May  3 15:08 rastertolabel*
-rwxr-xr-x 1 root root  563 Mar 17 04:40 rastertopclm*
-rwxr-xr-x 1 root root  35K Mar 17 04:40 rastertopclx*
-rwxr-xr-x 1 root root  84K Mar 17 04:40 rastertopdf*
-rwxr-xr-x 1 root root  15K Mar 17 04:40 rastertops*
-rwxr-xr-x 1 root root  15K May  3 15:08 rastertopwg*
lrwxrwxrwx 1 root root   11 Mar 17 04:40 svgtopdf -> vectortopdf*
-rwxr-xr-x 1 root root  27K Mar 17 04:40 sys5ippprinter*
-rwxr-xr-x 1 root root 3.6K Mar 17 04:40 textbrftoindexv3*
lrwxrwxrwx 1 root root   16 Mar 17 04:40 textbrftoindexv4 -> textbrftoindexv3*
-rwxr-xr-x 1 root root 6.0K Mar 17 04:40 texttobrf*
-rwxr-xr-x 1 root root  58K Mar 17 04:40 texttopdf*
-rwxr-xr-x 1 root root  982 Mar 17 04:40 texttops*
-rwxr-xr-x 1 root root  23K Mar 17 04:40 texttotext*
-rwxr-xr-x 1 root root 2.5K Mar 17 04:40 vectortobrf*
-rwxr-xr-x 1 root root 2.2K Mar 17 04:40 vectortopdf*
lrwxrwxrwx 1 root root   11 Mar 17 04:40 vectortoubrl -> vectortobrf*
lrwxrwxrwx 1 root root   11 Mar 17 04:40 wmftopdf -> vectortopdf*
lrwxrwxrwx 1 root root   11 Mar 17 04:40 xfigtopdf -> vectortopdf*

$ ls -alRF /mnt/openSUSE_42.1/usr/lib/cups/filter                      
/mnt/openSUSE_42.1/usr/lib/cups/filter:
total 2.1M
drwxr-xr-x 2 root root 4.0K Aug 16  2018 ./
drwxr-xr-x 9 root root 4.0K May 25  2017 ../
-rwxr-xr-x 1 root root 531K Aug 16  2018 CommandFileFilterG2*
-rwxr-xr-x 1 root root  44K Jan 12  2016 bannertopdf*
-rwxr-xr-x 1 root root  11K Sep 11  2015 commandtocanon*
-rwxr-xr-x 1 root root  11K Sep 11  2015 commandtoepson*
-rwxr-xr-x 1 root root  11K Jan 12  2016 commandtoescpx*
-rwxr-xr-x 1 root root  11K Jan 12  2016 commandtopclx*
-r-xr-xr-x 1 root root  15K Jul  4  2016 commandtops*
-rwxr-xr-x 1 root root 109K Jan 12  2016 foomatic-rip*
lrwxrwxrwx 1 root root   12 Jul 16  2016 foomatic-rip-hplip -> foomatic-rip*
-rwxr-xr-x 1 root root 8.2K Jan 12  2016 gstopxl*
-rwxr-xr-x 1 root root  19K Jan 12  2016 gstoraster*
-r-xr-xr-x 1 root root  11K Jul  4  2016 gziptoany*
-rwxr-xr-x 1 root root 380K Oct 25  2015 hpcups*
-rwxr-xr-x 1 root root  27K Oct 25  2015 hpcupsfax*
-rwxr-xr-x 1 root root  12K Oct 25  2015 hpps*
-rwxr-xr-x 1 root root  35K Jan 12  2016 imagetopdf*
-rwxr-xr-x 1 root root  989 Jan 12  2016 imagetops*
-rwxr-xr-x 1 root root  52K Jan 12  2016 imagetoraster*
-rwxr-xr-x 1 root root  23K Jan 12  2016 pdftoijs*
-rwxr-xr-x 1 root root  27K Jan 12  2016 pdftoippprinter*
-rwxr-xr-x 1 root root 132K Jan 12  2016 pdftoopvp*
-rwxr-xr-x 1 root root 152K Jan 12  2016 pdftopdf*
-rwxr-xr-x 1 root root  35K Jan 12  2016 pdftops*
-rwxr-xr-x 1 root root  35K Jan 12  2016 pdftoraster*
-rwxr-xr-x 1 root root 7.4K Jan 12  2016 pstopdf*
-r-xr-xr-x 1 root root  51K Jul  4  2016 pstops*
-rwxr-xr-x 1 root root  962 Oct 25  2015 pstotiff*
lrwxrwxrwx 1 root root   13 Jul 16  2016 rastertodymo -> rastertolabel*
-r-xr-xr-x 1 root root  19K Jul  4  2016 rastertoepson*
-rwxr-xr-x 1 root root  31K Jan 12  2016 rastertoescpx*
-rwxr-xr-x 1 root root  44K Sep 11  2015 rastertogutenprint.5.2*
-r-xr-xr-x 1 root root  19K Jul  4  2016 rastertohp*
-r-xr-xr-x 1 root root  23K Jul  4  2016 rastertolabel*
-rwxr-xr-x 1 root root  31K Jan 12  2016 rastertopclx*
-rwxr-xr-x 1 root root  68K Jan 12  2016 rastertopdf*
-r-xr-xr-x 1 root root  15K Jul  4  2016 rastertopwg*
-rwxr-xr-x 1 root root 3.5K Jan 12  2016 textonly*
-rwxr-xr-x 1 root root  46K Jan 12  2016 texttopdf*
-rwxr-xr-x 1 root root  983 Jan 12  2016 texttops*
-rwxr-xr-x 1 root root  43K Jan 12  2016 urftopdf*

Without rebooting 42.1 I get the following (first time I’ve used “–dbpath”, seems to work):

$ rpm -qf /usr/lib/cups/filter/ | sort                                 
cups-2.2.7-lp151.5.2.x86_64
cups-filters-1.20.3-lp151.2.4.x86_64
hplip-3.18.6-lp151.1.1.x86_64
hplip-hpijs-3.18.6-lp151.1.1.x86_64

$ rpm --dbpath /mnt/openSUSE_42.1/var/lib/rpm -qf /usr/lib/cups/filter/ | sort
cups-1.7.5-7.1.x86_64
cups-filters-1.0.58-12.1.x86_64
cups-filters-foomatic-rip-1.0.58-12.1.x86_64
cups-filters-ghostscript-1.0.58-12.1.x86_64
hplip-3.14.6-3.10.x86_64
hplip-hpijs-3.14.6-3.10.x86_64

Like I said, the repositories document that there were changes in the cups-filters packages (there’s now only plain “cups-filters”).

BTW, I also previously checked that there were no changes in:

$ cmp {/mnt/openSUSE_42.1,}/usr/lib/cups/filter/CommandFileFilterG2 
$

No, I think that all looks as expected. (I was also checking file ownership.)

I’m also not convinced that the Lexmark manufacturer drivers are suitable for a modern CUPS environment. Others more familiar with such hardware/drivers may be able to advise further on that. Which is also why I requested in my last post that you just the OpenPrinting PPDs instead. They just use foomatic-rip…

*cupsFilter:    "application/vnd.cups-postscript 100 foomatic-rip"
*cupsFilter:    "application/vnd.cups-pdf 0 foomatic-rip"

unlike the Lexmark PPD which relies on the CommandFileFilterG2 binary (which may not be compatible with CUPS 2.x subsystem perhaps).

I’ll definitely try it but I’m doubtful for a number of reasons. The PPD I got directly from Lexmark (from their MS312dn support page) and am currently using has:

Copyright 2012,2016,2017 Lexmark International, Inc. All rights reserved.
...
FileVersion: "2.1.0"

vs the one from Printer: Lexmark MS312dn | OpenPrinting - The Linux Foundation

Copyright 2012 Lexmark International, Inc.  All rights reserved.  
...
Lexmark-MS312dn-Postscript-Lexmark.ppd:*FileVersion: "1.0"

And isn’t mime-type filtering done by CUPS itself, with the PPD only controlling printer-specific things like page sizes, etc.?

Wait … my installed PPD (FileVersion: “2.1.0”) has:

$ fgrep cupsFilter Lexmark-MS312dn-Postscript-Lexmark.ppd /etc/cups/ppd/lexmark.ppd
/etc/cups/ppd/lexmark.ppd:*cupsFilter: "image/jpeg 0 -"
/etc/cups/ppd/lexmark.ppd:*cupsFilter: "image/gif 0 -"
/etc/cups/ppd/lexmark.ppd:*cupsFilter: "image/png 0 -"
/etc/cups/ppd/lexmark.ppd:*cupsFilter: "image/bmp 0 -"
/etc/cups/ppd/lexmark.ppd:*cupsFilter: "image/x-pcx 0 -"
/etc/cups/ppd/lexmark.ppd:*cupsFilter: "image/x-dcx 0 -"
/etc/cups/ppd/lexmark.ppd:*cupsFilter: "text/html 0 -"
/etc/cups/ppd/lexmark.ppd:*cupsFilter: "application/vnd.cups-command 0 /usr/lib/cups/filter/CommandFileFilterG2"

Maybe that’s inhibiting/conflicting with something in CUPS as I can print JPEGs and PNGs but nothing else, although doesn’t the PPD just control printer page layout and the like? Wait a minuute …

HOLD THE FORT! GOT IT!!!

I tried printing an HTML file and a GIF, and both worked (although the HTML was poorly formatted). So maybe the “cupsFilters” in the PPD override anything else in CUPS and because they don’t include PDF, postscript, etc. those can’t print. So I commented those lines out of the PPD (and stopped and restarted CUPS – didn’t work without that) and now I can print normally: PDF, postscript, from commandline, from libreoffice. (Well, plain ascii text files produce no output with lp but I’ll work on that.)

Lots of dark alleys in this CUPS stuff. Thanks for all your help – you led me to the solution. Don’t know how long I’d have beat my head against these walls without getting any results.

Glad to read of your progress here. I suspect if you’d moved to using the OpenPrinting PPD, this wouldn’t have been an issue to begin with.

Yes, in retrospect that would have done it, but this was a very difficult problem to debug. I think I was perfectly reasonable in assuming that the most recent PPD from the printer manufacturer would be a good choice, and nothing in the error ouputs or logs led me to doubt that. Even when I started learning a tiny bit about CUPS filtering it led me (and you also) to the /usr/lib/cups/filter directory which turned out to be a red herring. Note also that the PPD that was working in 42.1 but failed on 15.1 also had “*cupsFilter” lines in it, so even if I had suspected that as the problem I would have been misled into dismissing it.

It was an interlocking set of conflicts, which are always the worst ones. At the bottom it was a classical case of “version-itis”. As you pointed out:

I’m also not convinced that the Lexmark manufacturer drivers are suitable for a modern CUPS environment.

These kinds of incompatibilities will always sneak in, although strong adherence to a MAJOR.MINOR.MICRO versioning scheme goes a long way towards solving them. Note from my previous post:

$ rpm -qf /usr/lib/cups/filter/ | sort
cups-2.2.7-lp151.5.2.x86_64
...

$ rpm --dbpath /mnt/openSUSE_42.1/var/lib/rpm -qf /usr/lib/cups/filter/ | sort
cups-1.7.5-7.1.x86_64
...

So a warning message of “Using 1.x PPD configuration file on CUPS 2.x server” would have led me to a fix much faster. But actually the PPDs do have “*FormatVersion” and “*FileVersion” tags, although I’m not sure those are CUPS versions (and the bad Lexmark one has "*FileVersion: “2.1.0” but still didn’t match cups-2.x.y). Or maybe it did, and I just needed the deeper knowledge of how CUPS filtering works. Some kind of command, cups-config --filter-chain that dumps the info would have helped.

I’m not laying any blame here; just happy to have a working printer without having to buy a new one or roll back my openSUSE release because of 8 lines in a configuration file. Again, thanks for all your help.

Yes, in retrospect that would have done it, but this was a very difficult problem to debug.

Yes, it was a curly one. :wink:

So a warning message of “Using 1.x PPD configuration file on CUPS 2.x server” would have led me to a fix much faster. But actually the PPDs do have “*FormatVersion” and “*FileVersion” tags, although I’m not sure those are CUPS versions (and the bad Lexmark one has "*FileVersion: “2.1.0” but still didn’t match cups-2.x.y).

I agree, such a message would be helpful. It can be challenging when a vendor doesn’t keep up to date with changes with CUPS though. Thankfully, generic postscript drivers often suffice in these situations.

Or maybe it did, and I just needed the deeper knowledge of how CUPS filtering works. Some kind of command, cups-config --filter-chain that dumps the info would have helped.

I’m at the limits of my knowledge here too - it’s still not clear to me why the other filter entries are in the PPD file anyway, and why they impact the way they apparently did.

I’m not laying any blame here; just happy to have a working printer without having to buy a new one or roll back my openSUSE release because of 8 lines in a configuration file. Again, thanks for all your help.

Well done with identifying those lines. This may help others who come searching.