Explaining Print Management Commands in Linux With Examples

This lesson we’re going to talk about How you can manage CUPS printers from the command line.

Introduction

Now as you know you can use the CUPS web-based administration utility to manage the CUPS service running on a Linux system.

However, you can also use a variety of different command-line tools to manage CUPS as well.

In this lesson we’re going to review what these command-line tools are.

So, let’s begin by discussing How you can send a print job to a CUPS printer directly from the command line.

lp Command

You can send a print job to a CUPS printer using the lp command at the command line.

Send a print job to a CUPS printer

The lp command can send a particular file to your CUPS printer, the syntax is doing this as shown here.

Syntax: lp [options] [printer_name] [filename]

We run lp -d followed by the printer that you want to send the print job to and then the name of the file that you want to print.

An example is shown here where we send a file named projectschedule.txt to a printer named HPLJ5 using the lp command.

# lp -d HPLJ5 projectschedule.txt
request id is HPLJ5-2 (1 file(s))

Now notice that when we do this the print job is created and it’s assigned an ID number, in this case it’s HPLJ5-2.

The print job is added to the print queue and then sent directly to the printer.

Now the lp utility can use some other options besides the -d option.

Set the number of copies to Print

We can also use the -n option with the command to specify how many copies of the print job we want to print.

I want to Print 5 copies for which I can run the following command.

# lp -n 5 projectschedule.txt

Send an email when the job is completed

We can use the -m option to specify that lp send a confirmation email message to the user that sent the print job when the print job is finished printing.

# lp -m projectschedule.txt

Set the print job priority

You can use the -q option followed by number to set the priority of the print job.

For example, I want to give first priority to this print for which I have to run the following command.

# lp -q 1 projectschedule.txt

Print in Landscape format instead of Portrait

You can use the -o landscape option to specify that the file be printed in Landscape format instead of Portrait format.

# lp -o landscape projectschedule.txt

Print on both sides of the paper

And if your printer supports duplex printing you can use the -o sides=2 option to specify that we print on both sides of the paper.

# lp -o sides=2 projectschedule.txt

lpstat Command

In addition to the lp command you can also use another utility called lpstat at the command line.

The lpstat utility is used to display CUPS printer information and probably one of the most useful options you can use the lpstat -t.

This will cause lpstat to display all information about all cups printers on the system.

The example shown here, I ran lpstat and we see that I have just one printer configured on the system his name is HPLJ5.

# lpstat -t
scheduler is running
no system default destination
device for HPLJ5: parallel: /dev/lp0
HPLJ5 accepting requests since Thu 20 2021 03:55:13 AM MDT
printer HPLJ5 is idle. enabled since Thu 20 2021 03:55:13 AM MDT
Printer is now online

And you can see that it’s connected with a Parallel Port connection, we can also see how long it’s been up it tells us it’s been accepting requests since Thu 20 2021 03:55:13 AM IST.

We also see what its status is, we see that it’s currently idle meaning that it’s not actually processing any print jobs and we also see that it is online and waiting it’s available to take print jobs.

In addition, if this printer were not idle but we were actively processing print jobs, A list of all the pending print jobs in the queue would also be listed in the output of the lpstat command.

cancel Command

Now if you have a print job pending that print job is in the print queue and you realize that you do not want that job to actually print you can use the cancel command to kill that print job.

Syntax: cancel job_ID

Now in order to do this you first have to have the print jobs job ID number and you could use the lpstat command to find out what that job ID number is.

Once you know it you just enter cancel and in this case, we’re cancelling the HPLJ5-4 print job.

# cancel HPLJ5-4

When I do it kills the job, it stops it from printing and removes the the print job file from the print queue.

lpoptions Command

Now if I have more than one CUPS printer defined then I can use the lpoptions command to specify which printer is going to be the default printer for my system.

Syntax: lpoptions [options] [printer]

And this is done using the -d option followed by the name of the printer that you want to be the default printer.

Set default Printer in Linux

For example, if I want to set the HPLJ5 printer as my default printer I would enter the following command.

# lpoptions -d HPLJ5

This will set the default printer for all users on the same system.

Now be aware that individual users can override this default printer setting however to do this they create a hidden file in their home directory named .lpoptions.

Remember that the dot(.) at the beginning of file name indicates that this is a hidden file and then within that file they add directive default SPACE(Press Space Bar on Keyboard) and then the name of the printer that they want to be their default printer.

Here is an example.

# vi .lpoptions

default HPLJ2

For example, let’s say I had two printers connected to the system one is HPLJ5 and the others HPLJ2.

By creating this file in my home directory and putting this text in there then my default printer will always be HPLJ2 no matter what the system administrator entered with the lpoptions command.

View your printers configuration settings

In addition, you can also use the lpoptions command to view your printers configuration settings.

To do this you use the -l option with the lpoptions command.

# lpoptions -l HPLJ2

How to enable or disable the print queue

Now in addition to the lpoptions command there are other commands that you can use to either enable or disable a printers print queue.

You can use the cupsaccept command to enable a print queue and you can use the cupsreject command to disable a print queue.

Syntax:

  • Enable a printer’s queue: cupsaccept printer_name
  • Disable a printer’s queue: cupsreject printer_name

Disable the print queue

In this example, I use the cupsreject HPLJ5 command to disable the HPLJ5 printers print queue.

# cupsreject HPLJ5

If we look at the output of the lpstat command beneath it we see that HPLJ5 is not accepting request and tells us when basically the cupsreject command was run it tells us that it’s rejecting jobs.

# lpstat -t
scheduler is running
system default destination: HPLJ5
device for HPLJ5: parallel: /dev/lp0
HPLJ5 not accepting requests since Thu 20 2021 03:55:13 AM IST - Rejecting Jobs
printer HPLJ5 is idle. enabled since Thu 20 2021 03:55:13 AM IST
Rejecting Jobs

Now understand that if we use the cupsreject command the printer itself will continue processing all queued print jobs will it ever happen to be in the queue at the time we ran the cupsreject command.

Even though it will continue processing any queued print jobs the CUPS daemon will not allow any new jobs to enter the queue.

So, if we want to work on the printer and we use the the printer and we use the cupsreject command we’ll have to wait for all the pending jobs to finish before we can take it offline.

Now if you want you could use the -hold parameter with the cupsreject command.

This will tell the printer to stop printing after the current job is complete instead of going through every single job in the print queue.

Enable the print queue

When I’m done working on the printer, I can re-enable it by entering cupsaccept followed by the name of the printer at the shell prompt and you’ll start processing the queue again.

# cupsaccept HPLJ5

So basically, cupsaccept and cupsreject enable or disable the print queue itself but not the printer.

How to enable or disable the printer itself

Now we can accomplish this same task from a different perspective using different commands.

For example, if we wanted to disable the printer itself but not the print queue, we would use a different command.

Disable the printer

We use the cupsdisable command instead of the cupsreject command, the syntax is the same we enter cupsdisable followed by the name of the printer.

Syntax: cupsdisable printer_name

An example of that is shown right here.

# cupsdisable HPLJ5

Now when I run this command the print queue itself associate with the HPLJ5 printer will continue to accept new jobs but none of them will actually be sent to the physical printer.

They’ll just be queued up waiting for you to do whatever it is you need to do.

You can see this in the output of the lpstat command notice down here it tells us that the status of the printer is paused.

# lpstat -t
scheduler is running
system default destination: HPLJ5
device for HPLJ5: parallel: /dev/lp0
HPLJ5 accepting requests since Thu 20 2021 03:55:13 AM IST
printer HPLJ5 is disabled since Thu 20 2021 03:55:13 AM IST
Paused

It’s the print queue itself is still accepting requests but the printer is disabled.

Enable the printer

None of the jobs being sent to the print queue will actually be printed until you are enabling the printer using the cupsenable command.

You enter cupsenable followed by the name of the printer.

Syntax: cupsenable printer_name

So to enable a printer type the following command.

# cupsenable HPLJ5

Releases pending jobs for printing

And you typically use the --release option with the cupsenable command to release all pending jobs in the queue to be printed.

# cupsenable --release HPLJ5

Manage print jobs using Line Printer Daemon(lpd) commands

Now you can also use Line Printer Daemon(lpd) commands to manage print jobs on the system, these are called lpd(Line Printer Daemon) commands.

Now by far CUPS is the preferred printing system for modern Linux distributions, however many years ago the preferred printing system was the Line Printer Daemon(lpd).

Now most of the lpd commands have a functionality that’s similar to that offered by a CUPS command.

The key thing to remember is that most of these lpd commands still work with the CUPS daemon even though they were designed to work with the lpd daemon.

Send a file to the Printer for Printing

For example to send a file to the printer you use this command here, lpr -P (Capital P) followed by the name of the printer followed by the name of the file that you want to print.

# lpr -P HPLJ5

Query the status of the Printer

You can query the status of the printer using the lpc status command.

# lpc status

View a list of pending Print Jobs

You can view a list of pending print jobs in the print queue by entering the lpq command.

# lpq

Delete a pending job from the Print Queue

And you can delete a pending job from the print queue using the lprm command followed by the job number of the print job that you want to get rid of.

Here is an example.

# lprm HPLJ5-4

Conclusion

I hope you have learned something from this article.

I have tried my best to include all the Print Management Commands.

Now I’d like to hear your thoughts.

Was this guide useful to you?

Or maybe you have some queries.

Have I not included any command in this guide?

Leave a comment below.

If you like our content, please consider buying us a coffee.

Buy Me A Coffee

We are thankful for your never ending support.

Leave a Comment