- Command-Line Printer Administration
- How to add and configure printers through the CUPS web interface?
- Command-Line Printing and Options
- How to Install and Configure Cups Print Server on Centos 7
事情的起因是读了这篇 Bye CUPS: Printing with Netcat,因此打算对几种常见的打印方法做个收集。
最简单的方法
网络打印机支持多种协议,其中套接字协议一般使用 9100 端口。
套接字 是指将纯文本打印数据直接发送到 TCP 套接字的连接。一些常用的套接字端口号包括
9100
或35
。设备 URI(统一资源标识符)的语法为socket://打印机 IP:端口
,例如socket://192.168.2.202:9100/
。
# 一个简易的 Python 例子
client_socket = socket.create_connection(('my.laser.local', 9100))
client_socket.send(fileInBytes)
client_socket.close()
大多数系统都携带了 netcat 工具,可以用来发送文件。
# 英文字符的纯文本文件和 PostScript/PDF 文件应该是直接支持的
nc $PRINTER_IP 9100 < $FILENAME;
如果需要打印包含中文字符的文本文件,可以转换为 PostScript 文件。在 macOS 上可以使用 paps。
brew install paps
使用 --font
参数指定字体字号。
# 使用 LiSong Pro 字体,10 号字
$ paps --font="LiSong Pro 10" sample.txt > sample.ps
$ nc my.laser.local 9100 < sample.ps
# 使用管道
paps --font="LiSong Pro 8" sample.txt | nc my.laser.local 9100
# 使用函数
function printthis() {
paps --font="LiSong Pro 8" $1 | nc my.laser.local 9100
}
一种查看本机字体的方法是使用 fc-list
。
fc-list : file family |grep \/Library
双面打印
在安装了 CUPS 的系统上可以通过 lpstat -p -d
查看系统连接了哪些打印机。
$ lpstat -p -d
printer DocuCentre_V_3065_ is idle. enabled since Sat 20 Nov 2021 08:17:16 AM CST
printer HP_Color_LaserJet_MFP_M281fdw_ is idle. enabled since Sat 20 Nov 2021 08:17:17 AM CST
printer HP_LaserJet_MFP_M227sdn_ is idle. enabled since Sat 20 Nov 2021 08:17:18 AM CST
printer HP_LaserJet_Pro_M428f_M429f_ is idle. enabled since Sat 20 Nov 2021 08:17:18 AM CST
system default destination: HP_LaserJet_MFP_M227sdn_
默认打印机可以通过 lpoptions -d [打印机名称]
设置。
lpoptions -d HP_LaserJet_MFP_M227sdn_
双面打印只要修改 sides
参数(前提是打印机支持)。
lp -o sides=two-sided-short-edge testdoubleside.pdf