Printing via CUPS in the Terminal


Here's how to print in the terminal on Linux.

CUPS

CUPS is a printing system that has come standard on Linux for a long time. It should detect printers on the same network and allow you to address them

Available printers

To see available printers, run:

lpstat -p | awk '{print $2}'

This will return a list of printers, something like:

AirPrint
CUPS-BRF-Printer
EPSON-ET-2650-Series
EPSON_ET_3850_Series

Default Printer

To set a default printer:

lpoptions -d EPSON_ET_3850_Series

This will return the options on that printer, as currently set:

copies=1 device-uri=ipps://EPSON%20ET-3850%20Series._ipps._tcp.local/ finishings=3 job-cancel-after=10800 job-hold-until=no-hold job-priority=50 job-sheets=none,none marker-change-time=0 number-up=1 print-color-mode=color printer-commands=none printer-info='EPSON ET-3850 Series' printer-is-accepting-jobs=true printer-is-shared=false printer-is-temporary=true printer-location printer-make-and-model='EPSON EPSON ET-3850 Series' printer-state=3 printer-state-change-time=1781303188 printer-state-reasons=none printer-type=83890204 printer-uri-supported=ipp://localhost/printers/EPSON_ET_3850_Series

Now run the command to print:

lp recipes.txt

Bonus: Ensure plaintext

In my case, when I print a .txt file, I get:

lp recipes.txt
lp: Unsupported document-format "application/x-idx-doc".

The bytes are plaintext, but lp mis-detects it. To ensure plain text, you can pipe to lp:

cat recipes.txt | lp

Bonus: See/Manage Print Jobs

Let's say there was some sort of hiccup in the printing, as there often is. See what jobs you have in the print queue:

lpstat -o
EPSON-ET-3850-Series-139 jaketrent      4838792   Wed 05 Aug 2026 06:27:07 PM MDT
EPSON-ET-3850-Series-140 jaketrent      4769792   Wed 05 Aug 2026 06:28:09 PM MDT

I have a job with an id of 139 and 140. I can cancel one of them that has a problem:

cancel EPSON-ET-3850-Series-139

And I can resume the printing of all others

cupsenabel EPSON-ET-3850-Series