本文基于Orange Pi CM4介绍了Linux下的开源打印系统CUPS(Common UNIX Printing System),文章内容涵盖CUPS的核心功能与常用操作指令解析,助力快速实现Linux系统打印功能的开发。
CUPS(Common UNIX Printing System)是 Linux/UNIX 系统下的开源打印系统。其通过IPP协议实现跨平台的打印任务管理,提供了队列调度、驱动兼容及多设备并行控制的功能。开发者可通过命令行操作或者Web界面快速配置打印机、监控任务状态并支持PDF/图像等格式解析,大大简化了打印功能的集成流程。
核心特性:
CUPS 架构:
sudo apt update
sudo apt install cups
sudo systemctl start cups # 启动
sudo systemctl restart cups # 重启
(1) 命令行添加(推荐)
基本语法:
sudo lpadmin -p [打印机名称] -v [设备URI] -m [驱动] -E
输出示例:
sudo lpadmin -p HP_LaserJet-v "ipp://192.168.1.100/ipp/print" -m everywhere -E
参数说明:
设备 URI 是打印机的物理或网络地址,具体的格式取决于连接协议:
连接类型 | URI 格式 | 示例 | 适用场景 |
---|---|---|---|
IPP 协议 | ipp:// |
ipp://192.168.1.100/ipp/print | 支持 IPP 的现代网络打印机 |
Socket | socket:// |
socket://192.168.1.100:9100 | 传统网络打印机(如 HP JetDirect) |
USB | usb://<制造商>/<型号>?serial=XXX | usb://HP/Deskjet-2130?serial=1234 | 直接连接的 USB 打印机 |
LPD | lpd:// |
lpd://192.168.1.100/LPT1 | 支持 LPD 协议的旧打印机 |
驱动选择:
驱动类型 | 参数示例 | 说明 |
---|---|---|
通用驱动 | -m everywhere | 适用于大多数打印机,支持基础功能(推荐优先尝试) |
厂商专用驱动 | -m hp-laserjet.ppd | 需提前安装驱动包(如 printer-driver-hpcups) |
自定义 PPD 文件 | -m /path/to/driver.ppd | 手动指定驱动文件路径(需提前下载或生成) |
(2) Web界面添加
你可以通过浏览器访问CUPS的Web管理界面,在CUPS配置页面将打印机添加到系统中:
CUPS提供了两种设置默认打印机的方法,分别是用户级别的 lpoptions 和系统级别的 lpadmin。
(1) lpoptions -d(用户级默认打印机)
基本语法:
lpoptions -d <打印机名称>
(2) lpadmin -d(系统级默认打印机)
基本语法:
sudo lpadmin -d <打印机名称>
基本语法:
lp [选项] <文件路径>
常用选项:
选项 | 作用 |
---|---|
-d <打印机名称> | 指定目标打印机(覆盖默认打印机) |
-n <份数> | 设置打印份数(例如 -n 2) |
-o landscape | 横向打印 |
-o media=A4 | 指定纸张大小(如 A4) |
-o fit-to-page | 自动缩放内容适应纸张 |
(1) 列出所有打印队列中的任务:
lpstat -o
输出示例:
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -o
HPB0227A57280A-71 root 583680 Tue 29 Apr 2025 08:22:21 AM UTC
HPB0227A57280A-72 root 601088 Tue 29 Apr 2025 08:22:34 AM UTC
root@orangepicm4:~/jeff/orthocone-qt/build#
(2) 查看特定打印机的任务:
lpstat -o -P <打印机名称>
(3) 查看更详细的任务信息:
lpq -a
(1) 取消单个任务:
cancel <任务ID>
输出示例:
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -o
HPB0227A57280A-77 root 601088 Tue 29 Apr 2025 08:28:49 AM UTC
root@orangepicm4:~/jeff/orthocone-qt/build# cancel HPB0227A57280A-77
(2) 取消所有任务(需管理员权限):
sudo cancel -a
(3) 取消某用户的所有任务:
cancel -u <用户名>
(1) 查看当前已添加的打印机:
lpstat -p
输出示例:
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -p
printer CP9101c8df3 is idle. enabled since Tue 29 Apr 2025 02:34:41 AM UTC
printer HPB0227A57280A is idle. enabled since Tue 29 Apr 2025 08:28:59 AM UTC
(2) 移除指定打印机:
sudo lpadmin -x PrinterName
输出示例:
#查看当前系统所有的打印机
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -p
printer CP9101c8df3 is idle. enabled since Tue 29 Apr 2025 02:34:41 AM UTC
printer HPB0227A57280A is idle. enabled since Tue 29 Apr 2025 08:28:59 AM UTC
#移除指定打印机
root@orangepicm4:~/jeff/orthocone-qt/build# lpadmin -x CP9101c8df3
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -p
printer HPB0227A57280A is idle. enabled since Tue 29 Apr 2025 08:28:59 AM UTC
root@orangepicm4:~/jeff/orthocone-qt/build# lpadmin -x HPB0227A57280A
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -p
lpstat: No destinations added.
root@orangepicm4:~/jeff/orthocone-qt/build#
(3) 打印机搜索(扩展):
在 Linux 系统中,命令 avahi-browse -rt _ipp._tcp 用于通过零配置网络(Zeroconf/mDNS) 发现并列出局域网内所有支持 IPP(Internet Printing Protocol) 协议的打印机或其他打印服务,我们可以通过此命令来搜索网络中所有支持IPP协议的打印机。
命令/参数 | 作用 |
---|---|
avahi-browse | Avahi 工具的命令,用于在网络中浏览和发现服务(基于 mDNS/DNS-SD 协议)。 |
-r | 解析详细信息(Resolve),显示服务的完整配置(如 IP、端口等)。 |
-t | 单次扫描并退出(Terminate),不持续监听,仅执行一次扫描。 |
_ipp._tcp | 指定目标服务类型为 IPP 协议(用于网络打印)。 |
输出示例:
root@orangepicm4:~/jeff/orthocone-qt/build# avahi-browse -rt _ipp._tcp
+ wlan0 IPv4 CanonCP910 Internet Printer local
+ wlan0 IPv4 HPB0227A57280A (HP Laser MFP 131 133 135-138) Internet Printer local
= wlan0 IPv4 HPB0227A57280A (HP Laser MFP 131 133 135-138) Internet Printer local
hostname = [HPB0227A57280A.local]
address = [192.168.8.124]
port = [631]
txt = ["mopria-certified=2.0" "Staple=F" "Sort=F" "Punch=0" "PaperCustom=T" "Duplex=F" "Copies=T" "Color=F" "Collate=F" "Bind=F" "URF=CP255,FN3,IFU0,IS1-2-19,MT1-2-3-4,OB10,PQ4,RS300,V1.4,W8" "PaperMax=legal-A4" "Scan=T" "Fax=F" "kind=document,envelope,label" "print_wfds=T" "UUID=16a65700-007c-1000-bb49-b0227a57280a" "MDL=HP Laser MFP 136w" "MFG=HP" "usb_CMD=MFG:HP;CMD:SPL,URF,FWV,PIC,RDS,AMPV,PWGRaster,EXT;PRN:4ZB86A;MDL:HP Laser MFP 131 133 135-138;CLS:PRINTER;CID:HPLJPCLMSMV1;MODE:SCN,SPL3,R000105;" "usb_MDL=HP Laser MFP 136w" "usb_MFG=HP" "adminurl=http://HPB0227A57280A.local./sws/index.html?link=/sws/app/settings/network/AirPrint/AirPrint.html" "pdl=application/octet-stream,application/x-QPDL,image/urf,application/PCLm" "product=(HP Laser MFP 136w)" "priority=51" "qtotal=1" "rp=ipp/print" "ty=HP Laser MFP 131 133 135-138" "note=" "txtvers=1"]
= wlan0 IPv4 CanonCP910 Internet Printer local
hostname = [CP9101c8df3.local]
address = [192.168.8.177]
port = [631]
txt = ["note=" "kind=photo" "URF=W8,SRGB24,V1.3,RS300,IS7,MT11,PQ4,OB9,IFU0,OFU0,CP99" "Staple=F" "Sort=F" "Scan=F" "Punch=F" "PaperMax= "PaperCustom=T" "Fax=F" "Duplex=F" "Copies=T" "Color=T" "Collate=F" "Bind=F" "TBCP=F" "Binary=F" "Transparent=F" "UUID=4d701b50-0439-4af1-a33d-d8492f1c8df3" "usb_CMD=URF" "usb_MDL=CP910_ipp" "usb_MFG=Canon" "adminurl=http://CP9101c8df3.local:8008/index.html" "pdl=image/urf,image/jpeg,application/octet-stream" "product=(Canon CP910_ipp)" "ty=Canon CP910_ipp" "priority=50" "qtotal=1" "rp=ipp/print" "txtvers=1"]
root@orangepicm4:~/jeff/orthocone-qt/build#
tail -f /var/log/cups/error_log # 实时监控错误日志
若打印机未识别,尝试安装 printer-driver-* 软件包:
sudo apt install printer-driver-gutenprint
确保用户属于 lpadmin 组:
sudo usermod -aG lpadmin $USER