↑ arvau

ArchWiki / CUPS/Printer-specific problems

ja:CUPS/プリンター別の問題 ru:CUPS (Русский)/Printer-specific problems zh-hans:CUPS/打印机特定问题

This article contains printer or manufacturer-specific instructions for CUPS. See OpenPrinting if your printer is not already listed here, or if none of the listed drivers work.

If you add a printer to this list, consider contributing your entry to OpenPrinting - that way users of other distributions will also benefit!

Brother

Some printer models can be found in several entries because there are several packages or drivers for them.

Drivers for several models:Drivers for one model:

Network printers

For network printers, use ipp://printer_ip/ipp/port1 as printer address. For some older printers, this might not work. If not, try lpd://printer_ip/BINARY_P1 instead.

Some printers use the socket protocol. For these printers, use socket://printer_ip:9100. For http, use http://printer_ip/POSTSCRIPT_P1.

Custom drivers

Brother provides custom drivers on their website, either in source tarball, rpm, or deb form. Packaging Brother printer drivers covers creating PKGBUILDs from the existing RPM packages.

The source packages might be a better alternative to the rpm packages, provided they contain all the needed files.

Manually installing from the RPM packages

Install the rpmextract package, and extract both rpm packages using rpmextract.sh. Extracting both files will create a var and a usr directory - move the contents of both directories into the corresponding root directories.

Run the cups wrapper file in /usr/local/Brother/cupswrapper. This should automatically install and configure your brother printer.

For some of the drivers 32 bit libraries may need to be installed from multilib.

Updating the firmware

Network printers

Install net-snmp and run:

$ snmpwalk -c public $PRINTER_IP | grep -A 1 3.6.1.4.1.2435.2.4.3.99.3.1.6.1.2

Or alternatively:

$ snmpwalk -v 2c -c public 192.168.23.11 iso.3.6.1.4.1.2435.2.4.3.99.3.1.6.1.2

At this point, you will have the relevant data to get a valid firmware download link from Brother. The file should look similar to the one below:

<REQUESTINFO>
    <FIRMUPDATETOOLINFO>
        <FIRMCATEGORY>MAIN</FIRMCATEGORY>
        <OS>LINUX</OS>
        <INSPECTMODE>1</INSPECTMODE>
    </FIRMUPDATETOOLINFO>
 
    <FIRMUPDATEINFO>
        <MODELINFO>
            <SELIALNO></SELIALNO>
            <NAME>MFC-9330CDW</NAME>
            <SPEC>0401</SPEC>
            <DRIVER></DRIVER>
            <FIRMINFO>
                <FIRM>
                    <ID>MAIN</ID>
                    <VERSION>R1506121801:4504</VERSION>
                </FIRM>
                <FIRM>
                    <ID>SUB1</ID>
                    <VERSION>1.07</VERSION>
                </FIRM>
                <FIRM>
                    <ID>SUB2</ID>
                    <VERSION>L1505291600</VERSION>
                </FIRM>
            </FIRMINFO>
        </MODELINFO>
        <DRIVERCNT>1</DRIVERCNT>
        <LOGNO>2</LOGNO>
        <ERRBIT></ERRBIT>
        <NEEDRESPONSE>1</NEEDRESPONSE>
    </FIRMUPDATEINFO>
 </REQUESTINFO>
request.xml

Post this file to Brother:

$ curl -X POST -d @request.xml https://firmverup.brother.co.jp/kne_bh7_update_nt_ssl/ifax2.asmx/fileUpdate -H "Content-Type:text/xml" > response.xml

In response.xml you will find a <PATH> tag that contains the firmware download URL. Next, download the firmware, push it to the printer, and let the printer process it. Before that is done, change the Admin password to something known, it will be used as the user to log into the FTP site (VERY bad practice, do not do this).

$ wget https://web.archive.org/web/20210515183359/http://update-akamai.brother.co.jp/CS/LZ4266_W.djf
$ ftp $PRINTER_IP|
ftp> bin
ftp> hash
ftp> send LZ4266_W.djf
ftp> bye

With that, the printer will restart, and the latest firmware will be installed and (hopefully) your printing woes will be solved.

USB connected printers

Should also work for network printers with USB connection.

Disconnect printer USB cable. On powered on printer enter Maintenance mode by pressing Menu, then Start, LCD should blank out for 1-2 seconds, and during that time, when LCD is blank, press + button four times. Now enter code 77 using numpad or + / - buttons. This should print maintenance information. Now go back to main screen of the mode by pressing Stop button, on 16x2 LCDs it should look like this: ▮▮MAINTENANCE▮▮▮

To get proper firmware file You'll need to craft request.xml file similar to the one for network printers. Use information from maintenance printout to fill mandatory tags, for NAME use model name (i.e. "DCP-L2500D series"), for SPEC use country code (i.e. "1004") and for DRIVER repeat the model name. This is a crafted file for DCP-L2500D printer:

<REQUESTINFO>
    <FIRMUPDATETOOLINFO>
        <FIRMCATEGORY>MAIN</FIRMCATEGORY>
        <OS>LINUX</OS>
        <INSPECTMODE>null</INSPECTMODE>
    </FIRMUPDATETOOLINFO>
 
    <FIRMUPDATEINFO>
        <MODELINFO>
            <SELIALNO></SELIALNO>
            <NAME>DCP-L2500D series</NAME>
            <SPEC>1004</SPEC>
            <DRIVER>DCP-L2500D series</DRIVER>
            <FIRMINFO>
                <FIRM>
                    <ID>MAIN</ID>
                    <VERSION>B0000000000</VERSION>
                </FIRM>
            </FIRMINFO>
        </MODELINFO>
        <DRIVERCNT>1</DRIVERCNT>
        <LOGNO>2</LOGNO>
        <ERRBIT></ERRBIT>
        <NEEDRESPONSE>1</NEEDRESPONSE>
    </FIRMUPDATEINFO>
 </REQUESTINFO>
request.xml

Post this file to Brother:

$ curl -X POST -d @request.xml https://firmverup.brother.co.jp/kne_bh7_update_nt_ssl/ifax2.asmx/fileUpdate -H "Content-Type:text/xml" > response.xml

In response.xml you will find a <PATH> tag that contains the firmware download URL. Next, download the firmware and connect PC with the printer (still in maintenance mode) using USB cable. PC should report in kernel log different USB product ID, i.e. for DCP-L2500D it was 0152 instead of usual 0321, and a generic serial number string like B01234567890. Now push the firmware to the printer /dev/usb/lpX, where X is a number of Your printer. Example command flow for DCP-L2500D:

$ wget http://update-akamai.brother.co.jp/CS/LZ5100_E.djf
# cat LZ5100_E.djf > /dev/usb/lp0

On LCD You should see now information about firmware updating. After update printer will automatically reboot to normal state with new firmware version in place.

IPP-over-USB

You might experience some trouble while using the USB port on certain models.

Brother provides a shell script to create udev rules to prevent the use of IPP-over-USB. This might solve USB printing problems but means that you need to use the legacy LPR driver. See the FAQ article.

Canon

There are many possible drivers for Canon printers. Many Canon printers are supported by Gutenprint and foomatic-db-ppds. Some of Canon's LBP, iR, and MF printers use a driver supporting the UFR II/UFR II LT/LIPSLX protocols, #UFRII . Others use the #CARPS, or #cnijfilter (cnijfilter2), or Canon CAPT drivers.Some Canon printers will use a similar setup to the iP4500, so consider modifying the cnijfilter-ip4500 package for other, similar printers.

UFRII

Many LBP, iR, and MF printers use a protocol that has had several names over the years: UFR II, UFR II LT, LIPSLX. There are multiple packages for these printers in AUR, and at least the imageCLASS MF4570dn is reported to only work with the older v3.70 version. The i-SENSYS MF633C is confirmed to work with the 6.00 version.

cnrdrvcups-lb v 6.10: latest version built from source

cnrdrvcups-lb-bin v 6.00: binary build that allows choosing between repackaging rpm or deb build.

ufrii-print 3-1 : binary build that repackages the .deb archive from canon . pkgver does not reflect the driver version but the 3-1 uses version 6.20

Older versions

cndrvcups-lb-bin v3.70: uses Canon provided binaries with location/config adjustments to make them work on Arch Linux

cndrvcups-lt v5.00: uses Canon provided binaries for other printers (e.g. LBP6030).

CARPS

Some of Canon's printers use Canon's proprietary CARPS (Canon Advanced Raster Printing System) driver. Rainbow Software have managed to reverse engineer the CARPS data format and have successfully created a CARPS CUPS driver, which is available as carps-cups-git. The project's GitHub page includes a list of working printers.

USB over IP (BJNP)

Some Canon printers use Canon's proprietary USB over IP BJNP protocol to communicate over the network. There is a CUPS backend for this, which is available as cups-bjnp.

cnijfilter

Some printers using the cnijfilter drivers support the cnijnet protocol. To find the printer URI run

$ cnijnetprn --search auto

and use the cnijnet:/ URI in the output.

Other driver versions, as is the case for the current version of cnijfilter2, provide the cnijlgmon3 binary to search for available printers.

network cnijbe2://Canon/?port=net&serial=60-12-81-A7-7D-34 "Canon MB2300 series" "Canon-MB2300-series_60-12-81-A7-7D-34"
$ cnijlgmon3

The printer can be added to cups using the cnijbe2 url and an appropriate .ppd file, which should be shipped with your driver.

$ lpadmin -p CustomPrinterNameMB2300 -P /usr/share/cups/model/canonmb2300.ppd -v "cnijbe2://Canon/?port=net&serial=60-12-81-A7-7D-34" -E

The argument serial in the cnijbe2 url corresponds to the MAC address of the printer.

IPP Everywhere

For recent Canon printers, like the G7000 series, it can be hard to find a valid driver. However, it is possible to use a driverless installation using IPP Everywhere.

If you have installed avahi, CUPS should be able to detect your printer automatically.

However, if it fails, you can always enter your printer settings manually. In CUPS web interface select Internet Printing Protocol (ipp) and enter the IPP URL of the printer. Then at the driver selection screen selectGeneric > {current_make_and_model} - IPP Everywhere ™.

For the G7000 series the IPP URL is ipp://<printer_ip> or ipps://<printer_ip>.

Dell

Epson

Inkjet

Most models are covered by the official Epson Inkjet Printer Driver for Linux, either epson-inkjet-printer-escpr or epson-inkjet-printer-escpr2, which are sets of CUPS drivers for printers using the ESC/P-R or ESC/P-R 2 specifications of the ESC/P protocol, respectively.

Drivers using the original ESC/P protocol are distributed across multiple packages:

Laser

Some printers require a PPD file, which can be obtained from Epson's driver download page. Others are supported through packaged drivers:

TM Series

Utilities

Epson Printer Utility

epson-printer-utility provides a graphical interface for managing Epson printers. It can be used to check ink levels, view error messages and other printer status information, perform nozzle checks and head cleanings, and manage print settings. The utility integrates with CUPS and is designed to complement the ESC/P-R driver packages.

escputil

escputil is part of the gutenprint package, and performs some utility functions on Epson printers such as nozzle cleaning.

ReInkPy

This is a Python utility that allows resetting of the Waste Ink Counters (WIC), in case of a message similar to "A printer's ink pad is at the end of its service life".

The ReInkPy repo on Codeberg contains instructions to install and use, but one should replace pip with pipx from python-pipx to install the utility in a virtual environment.

Note that physical servicing (either by replacing the Ink Pad tray with a new one or by manually cleaning the pad) might actually be needed. This utility merely resets the internal counters that act as a heuristic as to when to change the pads.

mtink

This is a printer status monitor which enables to get the remaining ink quantity, to print test patterns, to reset printer and to clean nozzle. It use an intuitive graphical user interface.

Stylus-toolbox

This is a GUI using escputil and cups drivers. It supports nearly all USB printer of Epson and displays ink quantity, can clean and align print heads and print test patterns.

Adding missing paper sizes

Some of the PPD files in epson-inkjet-printer-escpr2 are missing paper size definitions for media that is supported by the printers and the filter. It is relatively straightforward to add the missing media types to the PPD files.

To begin, download the PKGBUILD for the epson-inkjet-printer-escpr2 package, either with an AUR helper or from a snapshot tarball. Once in the directory with the PKGBUILD, download and extract the source of the package by running makepkg --nobuild.

Change directory to src/epson-inkjet-printer-escpr2-$PKGVER. Open the file src/optBase.h in a text editor for reference.

Identify the PPD used by your printer in the ppd directory. For example, a Workforce 7710 printer uses Epson-WF-7710_Series-epson-escpr2-en.ppd. Let us call it your_ppd_filename. Convert the relevant PPD to a PPD compiler source file using the ppdi utility from the cups package.

$ ppdi -o your_ppd_filename.drv ppd/your_ppd_filename.ppd

Open the newly-created your_ppd_filename.drv in a text editor. Identify the section of the file with a lot of lines starting with CustomMedia. Duplicate one such line to modify. For example:

CustomMedia "Legal/US Legal" 612.00 1008.00 8.40 8.40 8.40 8.40 "<</PageSize[612.00 1008.00]/ImagingBBox null>>setpagedevice" "<</PageRegion[612.00 1008.00]/ImagingBBox null>>setpagedevice"

The pair of numbers 612.00 1008.00 represents the width and height of the paper in inches, multiplied by 72. Replace all three instances of these numbers with the dimensions of the paper you want to add. For example to add 11"x17" paper, replace the numbers with 792.00 1224.00.

The string "Legal/US Legal" identifies the paper. On the left side of the slash, Legal is a magic identifier that the filter uses to identify the paper size. Replace it with the one you want to use. Refer to the mediaSizeData array in optBase.h for a list of possible values. The string to the right of the slash can be set to any human-readable value.

If you want to enable borderless printing for a paper size, prefix the magic identifier string you just found with the letter T. So Letter would become TLetter. Additionally, change the four numbers 8.40 8.40 8.40 8.40 to 0.00 0.00 0.00 0.00.

For example, I was able to add 11x17 paper to the PPD for a Workforce 7710 by adding the following lines:

CustomMedia "USB/US B(11x17 in)" 792.00 1224.00 8.40 8.40 8.40 8.40 "<</PageSize[792.00 1224.00]/ImagingBBox null>>setpagedevice" "<</PageRegion[792.00 1224.00]/ImagingBBox null>>setpagedevice"
CustomMedia "TUSB/US B(11x17 in) (Borderless)" 792.00 1224.00 0.00 0.00 0.00 0.00 "<</PageSize[792.00 1224.00]/ImagingBBox null>>setpagedevice" "<</PageRegion[792.00 1224.00]/ImagingBBox null>>setpagedevice"

Once you have added your custom size, recompile your_ppd_filename.drv into a PPD file with ppdc (also from cups):

$ ppdc your_ppd_filename.drv

This will create a ppd file in the ppd directory with a file name derived from the PCFileName parameter in your_ppd_filename.drv. You can test this file by uploading it to the CUPS web interface, or install it permanently by overwriting the original PPD file and making the package with makepkg.

HP

Most HP printers will use hplip, see also CUPS/Troubleshooting#HP issues.

Some may use hpoj, while for multifunction laser printers hpuld might be required. Some laser printers are also supported by foo2zjs-nightly.

Notice that if lpinfo -m tells you that the driver "requires proprietary plugin", you need to install hplip-plugin.

HPLIP

* As of hplip v3.17.11, hpijs is no longer available. If you have printers using hpijs they will fail to print. You must modify them and select the new hpcups driver instead. * Since at least with hplip v3.22.10, hp-setup crashes when it uses hpfax:// to access a printer, with the message Unable to communicate with the device. Please check the device and try again. This is likely due to the missing hplip-plugin, but can be bypassed by disabling fax support on the printer itself. * As of hplip v3.24.4, hp-setup crashes when you manually supply a path to the PPD. See this bug report for a patch

hplip provides drivers for HP DeskJet, OfficeJet, Photosmart, Business Inkjet, and some LaserJet printers, and also provides an easy to use setup tool. See https://developers.hp.com/hp-linux-imaging-and-printing/supported_devices/index for the list of supported printers.

hplip requires python-pyqt5 to run the GUI qt frontend. hp-setup requires CUPS to be installed and cups.service to be started to save the printer. hp-setup also requires the lsusb software, which is provided by the usbutils package.

To run the setup tool with the GUI qt frontend:

$ hp-setup -u

To run the setup tool with the command line frontend:

$ hp-setup -i

To set up directly the configuration of a network connected HP printer:

$ hp-setup -i ip_address

To run systray spool manager:

$ hp-systray

To generate a URI for a given ip address:

# hp-makeuri <ip address>

PPD files are in /usr/share/ppd/HP/.

If your printer is listed as requiring a binary plugin, install the hplip-plugin package from AUR. If the binary plugin hplip-plugin is a requirement you will need to start the cups.service before the PPD is recognized by hplip. If that does not work, reboot and log in with the printer off. Then switch it on and run a test print.

hplip depends on foomatic-db-engine which prevents the drivers list from appearing when a printer is added to CUPS via the web user interface (Unable to get list of printer drivers). Possible workarounds: * Either: Install hplip first, then retrieve the PPD file that matches your printer from /usr/share/ppd/HP/. Next, remove hplip entirely as well as any unnecessary dependencies. Finally, install the printer manually using the CUPS web UI, selecting the PPD file you retrieved, and then re-install hplip. After a reboot, you should have a fully working printer. * Or: Remove hplip, foomatic-db and foomatic-db-engine along with any unnecessary dependencies. Reinstall hplip and restart CUPS. Install your printer using the CUPS web UI, which should now be able to find the drivers automatically. No reboot needed.

HPULD

See Debian:CUPSPrintQueues#hpuld for more information.

The package hpuld collects the sparse "HP + ULD" packages into one single package.

foo2zjs

foo2zjs supports some HP LaserJet printers. As of June 2018 the hplip package interferes with foo2zjs-nightly, as described at this forum post and 58815.

Konica Minolta

foo2zjs

#foo2zjs, mentioned above for supporting some HP printers, also support some Minolta printers.

Lexmark

Note that most Lexmark printers are now supported by CUPS without needing further installation. See also SANE/Scanner-specific problems#Lexmark for Lexmark scanners issues.

Utilities

Lexmark provides a utility called lexijtools with the drivers.

Custom drivers

Lexmark does provide Linux drivers for all their hardware. The following packages are required:

The drivers will need to be downloaded from Lexmark's website. Preferably, create a package (see Creating packages) and install it. Here is a basic PKGBUILD that still needs work but will give an idea of what is required.


# Contributor: Todd Partridge (Gen2ly) toddrpartridge (at) yahoo

pkgname=cups-lexmark-Z2300-2600
pkgver=1
pkgrel=1
pkgdesc="Lexmark Z2300 and 2600 Series printer driver for cups"
arch=('i686')
url="http://www.lexmark.com/"
license=('custom')
depends=('cups' 'glibc' 'ncurses' 'libusb' 'libxext' 'libxtst' 'libxi' 'libstdc++5' 'krb5' 'lua' 'java-runtime')
conflicts=('z600' 'cjlz35le-cups' 'cups-lexmark-700')
source=(lexmark-inkjet-08-driver-1.0-1.i386.tar.gz.sh)
md5sums=(3c37eb87e3dad4853bf29344f9695134)

package() {
  # Extract installer
  sh lexmark-inkjet-08-driver-1.0-1.i386.tar.gz.sh --target Installer-Files
  cd Installer-Files
  mkdir Driver
  tar xvvf instarchive_all --lzma -C Driver/
  cd Driver
  tar xv lexmark-inkjet-08-driver-1.0-1.i386.tar.gz -C $pkgdir
}
PKGBUILD

Keep in mind you can use the automated installer but doing so will leave the resulting changes untracked. The PPD will be installed into /usr/local/lexmark/lxk08/etc/ or similar, depending on the printer model.

Oki

Ricoh

Install openprinting-ppds-pxlmono-ricoh if your device is black and white, or openprinting-ppds-pxlcolor-ricoh if it is color. Note that Ricoh copiers are sometimes branded as Savin, Gestetner, Lanier, Rex-Rotary, Nashuatec, and/or IKON. So, if you have a device bearing one of these brands, it may be supported by these drivers as well.

SG or GX series printers requiring RPCS drivers may be suppported by ricoh-rpcs-cups-bin, which provides PPDs and needed filter programs found on the Japanese Ricoh website.

Samsung

Since 2016, or 2017, Samsung is no longer in the printers/scanners business. As of 2019, HP partially support some of Samsung printers/scanners. Before 2016, Samsung was a major player. Which is why there are still many Samsung machines around. In addition, Linux, and cups, keep evolving. The bottom line of all this is that supporting Samsung products is at a flux.

A major site for information about Samsung printers/scanners is Samsung Unified Linux Driver Repository. Despite its name, it is not affiliated by Samsung (HP). Neither it is devoted only to samsung-unified-driver. Yet the actual drivers suggested are the closed source from Samsung (HP). samsung-unified-driver, on the other hand, also encompass Windows and Mac. It might be the first stop to get a driver for a Samsung printer and scanner as it, or was, claim to support practically every one of these. Note that samsung-unified-driver includes software that can stand on its own, not tied to cups. If you can not get the printer to work with cups, you might try this route.

That said, there are more options. An overview is at alternatives.

  • For Samsung Printer Language, there is splix. For a list of models that are supported, see its home page. Other SPL Samsung printers, even though not in that list, might work with splix.

  • QPDL (Quick Page Description Language) printers, some of which are supported by splix, are also supported by by foo2qpdl, provided by the #foo2zjs package. A list of known to work models is here.

splix and foo2zjs are free software.

You should also note that many Samsung printers support PostScript. Chances are that it will work with CUPS generic postscript printer, especially if it is only black & white and only printer, without a scanner added to it. Generic driver may be missing functionality or limited, for example in their support for duplex, color control, and resolution settings, and print quality may be lower.

Xerox or FujiXerox

Custom drivers

Phaser 3100MFP

Once you have downloaded the drivers, execute the driver installer and accept the licence:

# cd printer
# ./XeroxPhaser3100.install

Note that the driver is 32 bit, so some 32 bit libraries will be required on an x86_64 system: lib32-libpng12, lib32-zlib, lib32-libjpeg6-turbo, lib32-libcups, lib32-libxext, lib32-libx11, lib32-gcc-libs, lib32-libstdc++5

For the scanner, create an /etc/sane.d directory if it does not already exist, because it is needed by the installer:

# mkdir -p /etc/sane.d

Now install the driver:

# cd scanner/
# ./XeroxPhaser3100sc.install

Again, on an x86_64 install, 32 bit libraries will be needed.

Phaser 6125N

FujiXerox does not support Linux on this model. A slightly adapted custom driver has been found to work out of the box.

To install the tarball, run:

# tar -C / --keep-newer-files -xvzf cups-xerox-phaser-6125n-1.0.0.tar.gz

Phaser 6510

This Xerox printer should work with IPP Everywhere.

The PPD file is still available in the AUR if needed. Double-sided duplex printing in the PPD file must be enabled with a special flag -o XRXOptionDuplexTrue passed to lpadmin.