openSUSE® Leap supports printing with many types of printers, including remote network printers. Printers can be configured manually or with YaST. For configuration instructions, refer to Chapter 17, Setting up a printer. Both graphical and command line utilities are available for starting and managing print jobs. If your printer does not work as expected, refer to Section 7.8, “Troubleshooting”.
CUPS (Common Unix Printing System) is the standard print system in openSUSE Leap.
Printers can be distinguished by interface, such as USB or network, and printer language. When buying a printer, make sure that the printer has an interface that is supported (USB, Ethernet or Wi-Fi) and a suitable printer language. Printers can be categorized on the basis of the following three classes of printer languages:
PostScript is the printer language in which most print jobs in Linux and Unix are generated and processed by the internal print system. If PostScript documents can be processed directly by the printer and do not need to be converted in additional stages in the print system, the number of potential error sources is reduced.
Currently PostScript is being replaced by PDF as the standard print job format. PostScript+PDF printers that can directly print PDF (in addition to PostScript) already exist. For traditional PostScript printers PDF needs to be converted to PostScript in the printing workflow.
For known printer languages, the print system can convert PostScript jobs to the respective printer language with Ghostscript. This processing stage is called interpreting. The best-known languages are PCL (which is used by HP printers and their clones) and ESC/P (which is used by Epson printers). These printer languages are normally supported by Linux and produce an adequate print result. Linux may not be able to address certain special printer functions. Except for HP and Epson, there are currently no printer manufacturers who develop Linux drivers and make them available to Linux distributors under an open source license.
These printers do not support any of the common printer languages. They use their own undocumented printer languages, which are subject to change when a new edition of a model is released. Normally, only Windows drivers are available for these printers. See Section 7.8.1, “Printers without standard printer language support” for more information.
Before you buy a new printer, refer to the following sources to check how well the printer you intend to buy is supported:
The OpenPrinting home page with the printer database. The database shows the latest Linux support status. However, a Linux distribution can only integrate the drivers available at production time. Accordingly, a printer currently rated as “perfectly supported” may not have had this status when the latest openSUSE Leap version was released. Thus, the databases may not necessarily indicate the correct status, but only provide an approximation.
The Ghostscript Web page.
/usr/share/doc/packages/ghostscript/catalog.devices
List of built-in Ghostscript drivers.
The user creates a print job. The print job consists of the data to print plus information for the spooler. This includes the name of the printer or the name of the print queue, and optionally, information for the filter, such as printer-specific options.
At least one dedicated print queue exists for every printer. The spooler holds the print job in the queue until the desired printer is ready to receive data. When the printer is ready, the spooler sends the data through the filter and back-end to the printer.
The filter converts the data generated by the application that is printing (normally PostScript or PDF, but also ASCII, JPEG, etc.) into printer-specific data (PostScript, PCL, ESC/P, etc.). The features of the printer are described in the PPD files. A PPD file contains printer-specific options with the parameters needed to enable them on the printer. The filter system makes sure that options selected by the user are enabled.
If you use a PostScript printer, the filter system converts the data into printer-specific PostScript. This does not require a printer driver. If you use a non-PostScript printer, the filter system converts the data into printer-specific data. This requires a printer driver suitable for your printer. The back-end receives the printer-specific data from the filter then passes it to the printer.
There are multiple possibilities for connecting a printer to the system. The configuration of CUPS does not distinguish between a local printer and a printer connected to the system over the network. For more information about the printer connection, read the article CUPS in a Nutshell at https://en.opensuse.org/SDB:CUPS_in_a_Nutshell.
When connecting the printer to the machine, do not forget that only USB devices can be plugged in or unplugged during operation. To avoid damaging your system or printer, shut down the system before changing any connections that are not USB.
PPD (PostScript printer description) is the computer language that describes the properties, like resolution, and options, such as the availability of a duplex unit. These descriptions are required for using printer options in CUPS. Without a PPD file, the print data would be forwarded to the printer in a “raw” state, which is not desired.
To configure a PostScript printer, the best approach is to get a suitable
PPD file. Many PPD files are available in the packages
manufacturer-PPDs
and
OpenPrintingPPDs-postscript
. See
Section 7.7.3, “PPD files in multiple packages” and
Section 7.8.2, “No suitable PPD file available for a PostScript printer”.
New PPD files can be stored in the directory
/usr/share/cups/model/
or added to the print system
with YaST as described in Section 17.1.1, “Adding drivers with YaST”.
Subsequently, the PPD file can be selected during the printer setup.
Be careful if a printer manufacturer wants you to install entire software packages. This kind of installation may result in the loss of the support provided by openSUSE Leap. Also, print commands may work differently and the system may no longer be able to address devices of other manufacturers. For this reason, the installation of manufacturer software is not recommended.
A network printer can support multiple protocols. Although most of the supported protocols are standardized, certain manufacturers modify the standard. Manufacturers then provide drivers for only a few operating systems and Linux drivers are rarely provided. The current situation is such that you cannot act on the assumption that every protocol works smoothly in Linux. Therefore, you may need to experiment with several options to achieve a functional configuration.
CUPS supports the socket
,
LPD
, IPP
and
smb
protocols.
Socket refers to a connection in which the plain
print data is sent directly to a TCP socket. Socket port numbers
that are commonly used are 9100
or 35
.
The device URI (uniform resource identifier) syntax is:
socket://IP.OF.THE.PRINTER:PORT,
for example: socket://192.168.2.202:9100/
.
The LPD protocol is described in RFC 1179. Under this protocol,
specific job-related data, such as the ID of the print queue, is sent
before the actual print data is sent. Therefore, a print queue must be
specified when configuring the LPD protocol. The implementations of
diverse printer manufacturers are flexible enough to accept any name as
the print queue. If necessary, the printer manual should indicate what
name to use. LPT, LPT1, LP1 or similar names are often used. The port
number for an LPD service is 515
. An example device URI
is
lpd://192.168.2.202/LPT1
.
IPP is based on the HTTP protocol. With
IPP, more job-related data is transmitted than with the other protocols.
CUPS uses IPP for internal data transmission. The name of the print queue
is necessary to configure IPP correctly. The port number for IPP is
631
. Example device URIs are
ipp://192.168.2.202/ps
and
ipp://192.168.2.202/printers/ps
.
CUPS also supports printing on printers connected to Windows shares. The
protocol used for this purpose is SMB. SMB uses the port numbers
137
, 138
and 139
.
Example device URIs are
smb://user:password@workgroup/smb.example.com/printer
,
smb://user:password@smb.example.com/printer
, and
smb://smb.example.com/printer
.
The protocol supported by the printer must be determined before
configuration. If the manufacturer does not provide the needed information,
the command nmap
(which comes with the
nmap
package) can be used to ascertain the
protocol. nmap
checks a host for open ports. For example:
>
nmap -p 35,137-139,515,631,9100-10000 IP.OF.THE.PRINTER
CUPS can be configured with command line tools like
lpinfo
, lpadmin
and
lpoptions
. You need a device URI consisting of a
back-end, such as USB, and parameters. To determine valid device URIs on
your system use the command lpinfo -v | grep ":/"
:
>
sudo
lpinfo -v | grep ":/" direct usb://ACME/FunPrinter%20XL network socket://192.168.2.253
With lpadmin
the CUPS server administrator can add,
remove or manage print queues. To add a print queue, use the following
syntax:
>
sudo
lpadmin -p QUEUE -v DEVICE-URI -P PPD-FILE -E
Then the device (-v
) is available as
QUEUE (-p
), using the specified
PPD file (-P
). This means that you must know the PPD file
and the device URI to configure the printer manually.
Do not use -E
as the first option. For all CUPS commands,
-E
as the first argument sets use of an encrypted
connection. To enable the printer, -E
must be used as shown
in the following example:
>
sudo
lpadmin -p ps -v usb://ACME/FunPrinter%20XL -P \ /usr/share/cups/model/Postscript.ppd.gz -E
The following example configures a network printer:
>
sudo
lpadmin -p ps -v socket://192.168.2.202:9100/ -P \ /usr/share/cups/model/Postscript-level1.ppd.gz -E
For more options of lpadmin
, see the man page of
lpadmin(8)
.
During printer setup, certain options are set as default. These options can be modified for every print job (depending on the print tool used). Changing these default options with YaST is also possible. Using command line tools, set default options as follows:
First, list all options:
>
sudo
lpoptions -p QUEUE -l
Example:
Resolution/Output Resolution: 150dpi *300dpi 600dpi
The activated default option is identified by a preceding asterisk
(*
).
Change the option with lpadmin
:
>
sudo
lpadmin -p QUEUE -o Resolution=600dpi
Check the new setting:
>
sudo
lpoptions -p QUEUE -l Resolution/Output Resolution: 150dpi 300dpi *600dpi
When a normal user runs lpoptions
, the settings are
written to ~/.cups/lpoptions
. However,
root
settings are written to
/etc/cups/lpoptions
.
To print from the command line, enter lp -d
QUEUENAME FILENAME,
substituting the corresponding names for
QUEUENAME and
FILENAME.
Several applications rely on the lp
command for printing.
In this case, enter the correct command in the application's print dialog,
normally without specifying FILENAME, for example,
lp -d
QUEUENAME.
Several CUPS features have been adapted for openSUSE Leap. The most important changes are covered here.
After completing a default installation of openSUSE Leap,
firewalld
is active and the network interfaces are configured to be in
the public
zone, which blocks incoming traffic.
When firewalld
is active, you may need to configure it to
allow clients to browse network printers by allowing
mdns
and ipp
through
the internal network zone. The public zone should never
expose printer queues.
(More
information about the firewalld
configuration is available in
Book “Security and Hardening Guide”, Chapter 23 “Masquerading and firewalls”, Section 23.4 “firewalld
” and at
https://en.opensuse.org/SDB:CUPS_and_SANE_Firewall_settings.)
Normally, a CUPS client runs on a regular workstation located in a trusted
network environment behind a firewall. In this case, it is recommended to
configure the network interface to be in the Internal
Zone
, so the workstation is reachable from within the network.
If the CUPS server is part of a trusted network environment protected by a
firewall, the network interface should be configured to be in the
Internal Zone
of the firewall. It is not recommended to
set up a CUPS server in an untrusted network environment unless you ensure
that it is protected by special firewall rules and secure settings in
the CUPS configuration.
CUPS servers regularly announce the availability and status information of shared printers over the network. Clients can access this information to display a list of available printers in printing dialogs, for example. This is called “browsing”.
CUPS servers announce their print queues over the network either via the
traditional CUPS browsing protocol, or via Bonjour/DNS-SD. To enable browsing network print queues, the service
cups-browsed
needs to run on all
clients that print via CUPS servers.
cups-browsed
is not started by
default. To start it for the active session, use sudo systemctl
start cups-browsed
. To ensure it is automatically started after
booting, enable it with sudo systemctl enable
cups-browsed
on all clients.
In case browsing does not work after having started
cups-browsed
, the CUPS servers
announce the network print queues via Bonjour/DNS-SD. In this case,
you need to additionally install the package
avahi
and start the associated
service with sudo systemctl start avahi-daemon
on all
clients.
See Section 7.7.1, “CUPS and firewall” for information
on allowing printer browsing through firewalld
.
The YaST printer configuration sets up the queues for CUPS using the PPD
files installed in /usr/share/cups/model
. To find the
suitable PPD files for the printer model, YaST compares the vendor and
model determined during hardware detection with the vendors and models in
all PPD files. For this purpose, the YaST printer configuration generates
a database from the vendor and model information extracted from the PPD
files.
The configuration using only PPD files and no other information sources has
the advantage that the PPD files in
/usr/share/cups/model
can be modified freely. For
example, if you have PostScript printers the PPD files can be copied
directly to /usr/share/cups/model
(if they do not
already exist in the manufacturer-PPDs
or
OpenPrintingPPDs-postscript
packages) to achieve
an optimum configuration for your printers.
Additional PPD files are provided by the following packages:
gutenprint
: the Gutenprint driver and its matching PPDs
splix
: the SpliX driver and its matching PPDs
OpenPrintingPPDs-ghostscript
: PPDs for Ghostscript built-in drivers
OpenPrintingPPDs-hpijs
: PPDs for the HPIJS driver for non-HP printers
The following sections cover the most frequently encountered printer hardware and software problems and ways to solve or circumvent these problems. Among the topics covered are GDI printers, PPD files and port configuration. Common network printer problems, defective printouts, and queue handling are also addressed.
These printers do not support any common printer language and can only be addressed with special proprietary control sequences. Therefore they can only work with the operating system versions for which the manufacturer delivers a driver. GDI is a programming interface developed by Microsoft* for graphics devices. Usually the manufacturer delivers drivers only for Windows, and since the Windows driver uses the GDI interface these printers are also called GDI printers. The actual problem is not the programming interface, but that these printers can only be addressed with the proprietary printer language of the respective printer model.
Certain GDI printers can be switched to operate either in GDI mode or in one of the standard printer languages. Check the manual of the printer to see whether this is possible. Specific models require special Windows software to do the switch. For example, the Windows printer driver may always switch the printer back into GDI mode when printing from Windows. For other GDI printers there are extension modules for a standard printer language available.
Several manufacturers provide proprietary drivers for their printers. The disadvantage of proprietary printer drivers is that there is no guarantee that these work with the installed print system or that they are suitable for the multiple hardware platforms. In contrast, printers that support a standard printer language do not depend on a special print system version or a special hardware platform.
Instead of spending time trying to make a proprietary Linux driver work, it may be more cost-effective to purchase a printer which supports a standard printer language (preferably PostScript). This would solve the driver problem once and for all, eliminating the need to install and configure special driver software and obtain driver updates that may be required because of new developments in the print system.
If the manufacturer-PPDs
or
OpenPrintingPPDs-postscript
packages do not
contain a suitable PPD file for a PostScript printer, it should be possible
to use the PPD file from the driver CD of the printer manufacturer or
download a suitable PPD file from the Web page of the printer manufacturer.
If the PPD file is provided as a zip archive (.zip) or a self-extracting
zip archive (.exe
), unpack it with
unzip
. First, review the license terms of the PPD file.
Then use the cupstestppd
utility to check if the PPD
file complies with “Adobe PostScript Printer Description File Format
Specification, version 4.3.” If the utility returns
“FAIL,” the errors in the PPD files are serious and cause major
problems. The problem spots reported by
cupstestppd
should be eliminated. If necessary, ask the
printer manufacturer for a suitable PPD file.
Connect the printer directly to the computer. For test purposes, configure the printer as a local printer. If this works, the problems are related to the network.
The TCP/IP network and name resolution must be functional.
lpd
Use the following command to test if a TCP connection can be established
to lpd
(port 515
) on
HOST:
>
netcat -z HOST 515 && echo ok || echo failed
If the connection to lpd
cannot be established,
lpd
may not be active or there may be basic network
problems.
Provided that the respective
lpd
is active and the host accepts queries, run the following command as root
to query a status report for
QUEUE on remote
HOST:
#
echo -e "\004queue" \
| netcat -w 2 -p 722 HOST 515
If lpd
does not respond, it may not be active or
there may be basic network problems. If lpd
responds,
the response should show why printing is not possible on the
queue
on host
. If you receive a
response like that shown in Example 7.1, “Error message from lpd
”, the problem is
caused by the remote lpd
.
lpd
#lpd: your host does not have line printer access lpd: queue does not exist printer: spooling disabled printer: printing disabled
cupsd
A CUPS network server can broadcast its queues by default every 30
seconds on UDP port 631
. Accordingly, the following
command can be used to test whether there is a broadcasting CUPS network
server in the network. Make sure to stop your local CUPS daemon before
executing the command.
>
netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID
If a broadcasting CUPS network server exists, the output appears as shown in Example 7.2, “Broadcast from the CUPS network server”.
ipp://192.168.2.202:631/printers/queue
The following command can be used to test if a TCP connection can be
established to cupsd
(port 631
) on
HOST:
>
netcat -z HOST 631 && echo ok || echo failed
If the connection to cupsd
cannot be established,
cupsd
may not be active or there may be basic network
problems. lpstat -h
HOST
-l -t returns a status report for all queues on
HOST, provided the respective
cupsd
is active and the host accepts queries.
The next command can be used to test if the QUEUE on HOST accepts a print job consisting of a single carriage-return character. Nothing should be printed. A blank page may be ejected.
>
echo -en "\r" \
| lp -d queue -h HOST
Spoolers running in a print server machine sometimes cause problems when they need to deal with multiple print jobs. Since this is caused by the spooler in the print server machine, there no way to resolve this issue. As a work-around, circumvent the spooler in the print server machine by addressing the printer connected to the print server machine directly with the TCP socket. See Section 7.4, “Network printers”.
In this way, the print server machine is reduced to a converter between the
multiple forms of data transfer (TCP/IP network and local printer
connection). To use this method, you need to know the TCP port on the
print server machine. If the printer is connected to the print server machine
and turned on, this TCP port can normally be determined with the
nmap
utility from the nmap
package certain time after the print server machine is powered up. For example,
nmap
IP-address may
deliver the following output for a print server machine:
Port State Service 23/tcp open telnet 80/tcp open http 515/tcp open printer 631/tcp open cups 9100/tcp open jetdirect
This output indicates that the printer connected to the print server machine
can be addressed via TCP socket on port 9100
. By
default, nmap
only checks several commonly known
ports listed in /usr/share/nmap/nmap-services
. To
check all possible ports, use the command nmap
-p
FROM_PORT-TO_PORT IP_ADDRESS.
For further information, refer to the man page of
nmap
.
Enter a command like
>
echo -en "\rHello\r\f" | netcat -w 1 IP-address port
cat file | netcat -w 1 IP-address port
to send character strings or files directly to the respective port to test if the printer can be addressed on this port.
For the print system, the print job is completed when the CUPS back-end completes the data transfer to the recipient (printer). If further processing on the recipient fails (for example, if the printer is not able to print the printer-specific data) the print system does not notice this. If the printer cannot print the printer-specific data, select a PPD file that is more suitable for the printer.
If the data transfer to the recipient fails entirely after several
attempts, the CUPS back-end, such as USB
or
socket
, reports an error to the print system (to
cupsd
). The back-end determines how many unsuccessful
attempts are appropriate until the data transfer is reported as impossible.
As further attempts would be in vain, cupsd
disables
printing for the respective queue. After eliminating the cause of the
problem, the system administrator must re-enable printing with the command
cupsenable
.
If a CUPS network server broadcasts its queues to the client hosts via
browsing and a suitable local cupsd
is active on the
client hosts, the client cupsd
accepts print jobs from
applications and forwards them to the cupsd
on the
server. When cupsd
on the server accepts a print job, it
is assigned a new job number. Therefore, the job number on the client host
is different from the job number on the server. As a print job is usually
forwarded immediately, it cannot be deleted with the job number on the
client host This is because the client cupsd
regards the
print job as completed when it has been forwarded to the server
cupsd
.
To delete the print job on the server, use a command such as lpstat
-h cups.example.com -o
to determine the job number on the server. This
assumes that the server has not already completed the print job by sending
it to the printer. Use the obtained job number to delete the print job on
the server as follows:
>
cancel -h cups.example.com QUEUE-JOBNUMBER
If you switch the printer off or shut down the computer during the printing
process, print jobs remain in the queue. Printing resumes when the computer
(or the printer) is switched back on. Defective print jobs must be removed
from the queue with cancel
.
If a print job is corrupted or an error occurs in the communication between the host and the printer, the printer cannot process the data correctly and prints numerous sheets of paper with unintelligible characters. To fix the problem, follow these steps:
To stop printing, remove all paper from ink jet printers or open the paper trays of laser printers. High-quality printers have a button for canceling the current printout.
The print job may still be in the queue, because jobs are only removed
after they are sent to the printer. Use lpstat -o
or
lpstat -h cups.example.com -o
to check which queue is
currently printing. Delete the print job with
cancel
QUEUE-JOBNUMBER or
cancel -h cups.example.com
QUEUE-JOBNUMBER.
Certain data may still be transferred to the printer even though the print job has been deleted from the queue. Check if a CUPS back-end process is still running for the respective queue and stop it.
Reset the printer by switching it off for a while. Then insert the paper and turn on the printer.
Use the following generic procedure to locate problems in CUPS:
Set LogLevel debug
in
/etc/cups/cupsd.conf
.
Stop cupsd
.
Remove /var/log/cups/error_log*
to avoid having to
search through large log files.
Start cupsd
.
Repeat the action that led to the problem.
Check the messages in /var/log/cups/error_log*
to
identify the cause of the problem.
In-depth information about printing on openSUSE Leap is presented in the openSUSE Support Database at https://en.opensuse.org/Portal:Printing.