108.4 Manage printers and printing
Weight: 2
Candidates should be able to manage print queues and user print jobs using CUPS and the LPD compatibility interface.
Key Knowledge Areas
- Basic CUPS configuration (for local and remote printers).
- Manage user print queues.
- Troubleshoot general printing problems.
- Add and remove jobs from configured printer queues.
Terms and Utilities
- CUPS configuration files, tools and utilities
- /etc/cups/
- lpd legacy interface (lpr, lprm, lpq)
CUPS
Most Linux distros use CUPS for printing. CUPS stands for Common Unix Printing System. There are different interfaces for CUPS link command line tools, web based interface and GUIs. CUPS is designed to simplify the printing on various printers from different manufactures.
CUPS web interface
The general way to access the CUPS configuration and info page is going to the servers IP on port 631 from a browser. That will be localhost:631 or 127.0.0.1:631 from your browser.
Important parts on this webpage are:
|Jobs tab|to check the jobs the CUPS is handling|
|Administration|For adding printers, managing jobs and configuring the CUPS server|
|Printers|Show the printers|
as soon as you push the Add Printer button, you will need to give CUPS admin user password
Suggested Activity: Visit your CUPS web interface and add a printer
Good news is that the CUPS has most of the common printer drivers installed. You just need to choose the printer from the dropdown menu.
configuration files
As any other linux program, CUPS saves its configuration at /etc
directory.
# ls /etc/cups
cups-browsed.conf interfaces raw.types subscriptions.conf
cupsd.conf ppd snmp.conf subscriptions.conf.O
cups-files.conf raw.convs ssl
One important file is cupsd.conf
. Have a look at it; it is very easy to understand. For example the Listen localhost:631
line tells the CUPS to listen on localhost port 631.
All the printer data is saved at /etc/cups/printers.conf
. The web interface or any other GUI is actually editing this file.
# Printer configuration file for CUPS v2.1.0
# Written by cupsd
# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING
<DefaultPrinter Apple-Dot-Matrix>
UUID urn:uuid:0f6c2f2b-6338-388a-76de-09f2ef1994d5
Info Apple Dot Matrix
Location Fake Location
MakeModel Apple Dot Matrix Foomatic/appledmp (recommended)
DeviceURI ipp://fakeprinter/
State Idle
StateTime 1453402271
ConfigTime 1453402271
Type 8433668
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
</DefaultPrinter>
legacy tools
Just like the MTA programs, CUPS support all the legacy command line programs too.
command | usage |
---|---|
lpr | print a file |
lpq | show print queue/jobs |
lprm | rm/remove a file from priner queue |
lpc | printer control / troubleshooting program |
lpq
The q is for queue therefor lpq
shows the printer queue and is used when you want to see the jobs. If you use the -a
switch, the lpq will show the jobs of all printers. Alternatively you can use the -P
switch to show the jobs of a specific printer. So the following command will show the jobs of a printer called Apple-Dot-Matrix:
# lpq -PApple-Dot-Matrix
Apple-Dot-Matrix is ready and printing
Rank Owner Job File(s) Total Size
active unknown 1 unknown 7168 bytes
1st unknown 2 unknown 2048 bytes
It is strange but there should not be ANY space between
-P
and the printers name
lpr
This command is used to send a job to a printer. Again the printer is specified by -P
.
$ lpr -PApple-Dot-Matrix for_print.txt
lpq
Apple-Dot-Matrix is ready and printing
Rank Owner Job File(s) Total Size
active jadi 1 Untitled Document 1 7168 bytes
1st jadi 2 Untitled1 2048 bytes
2nd jadi 3 for_print.txt 1024 bytes
If no printer is specified, the default printer will be used
lprm
The rm is for remove so the lprm
will remove jobs from the queue. You need to provide the Job ID to this command.
$ lpq
Apple-Dot-Matrix is ready and printing
Rank Owner Job File(s) Total Size
active jadi 1 Untitled Document 1 7168 bytes
1st jadi 2 Untitled1 2048 bytes
2nd jadi 3 for_print.txt 1024 bytes
jadi@funlife:/tmp$ lprm 2
jadi@funlife:/tmp$ lpq
Apple-Dot-Matrix is ready and printing
Rank Owner Job File(s) Total Size
active jadi 1 Untitled Document 1 7168 bytes
1st jadi 3 for_print.txt 1024 bytes
Only root can remove other peoples print jobs
If you need to remove ALL the jobs of a specific printer, you can go with -Pprinter_name -
. Yes! that is only one dash (-
) after the printer name; that's why this is called a legacy command.
the
lprm -
will remove all the print jobs
lpc
Here, the c is for control. lpc
lets you check the status (via lpc status
) and troubleshoot your printers.
$ lpc status
Apple-Dot-Matrix:
printer is on device 'ipp' speed -1
queuing is enabled
printing is enabled
2 entries
daemon present
Here,
- queuing is enabled tell us that the queue can accept new print jobs. If the queue is disabled, you can not even send new jobs to the printer.
- printing is enabled means that the printer is actually can print on the paper. This will be on the disable state if the printer is out of ink or paper or experiencing a paper jam.
If you are having problems with your printer or need to prevent it from accepting new jobs or let it accept jobs but not print, these four commands will let you achieve your needs:
command | usage |
---|---|
cupsaccept | tells the printer queue to accept new jobs |
cupsreject | tells the printer to reject any new job |
cupsenable | enables the actual/physical printing of the jobs |
cupsdisable | disables the physical printing of the jobs |
In all cases you have to provide the printer name of the printer. it is also possible to provide a reason using
-r
switch.
$ cupsdisable Apple-Dot-Matrix -r "need more paper"
$ lpc status
Apple-Dot-Matrix:
printer is on device 'ipp' speed -1
queuing is enabled
printing is disabled
2 entries
daemon present