一文详解 Linux下的开源打印系统CUPS(Common UNIX Printing System)_linux cups
文章目录
- 前言
- 一、CUPS 简介
- 二、CUPS 常用指令解析
-
- 2.1 安装 CUPS
- 2.2 启动/重启服务
- 2.3 添加打印机(核心操作)
- 2.4 设置默认打印机
- 2.5 打印文件
- 2.6 查看打印任务
- 2.7 取消打印任务
- 2.8 查看、移除已添加的打印机
- 三、调试与常见问题
-
- 3.1 日志查看
- 3.2 驱动问题
- 3.3 权限问题
- 四、注意事项
前言
本文基于Orange Pi CM4介绍了Linux下的开源打印系统CUPS(Common UNIX Printing System),文章内容涵盖CUPS的核心功能与常用操作指令解析,助力快速实现Linux系统打印功能的开发。
一、CUPS 简介
CUPS(Common UNIX Printing System)是 Linux/UNIX 系统下的开源打印系统。其通过IPP协议实现跨平台的打印任务管理,提供了队列调度、驱动兼容及多设备并行控制的功能。开发者可通过命令行操作或者Web界面快速配置打印机、监控任务状态并支持PDF/图像等格式解析,大大简化了打印功能的集成流程。
核心特性:
- 支持本地和网络打印机(USB/Socket)
- 提供 Web 管理界面(端口 631)
- 兼容多种打印协议(IPP、Socket、USB)
- 支持 PDF/PostScript/图像等格式转换
- 提供 API 供开发者集成
CUPS 架构:
- Scheduler(cupsd):核心守护进程,管理打印队列和任务分发。
- Filters:格式转换模块(如 PDF 转 PostScript)。
- Backends:与物理打印机通信的驱动接口。
二、CUPS 常用指令解析
2.1 安装 CUPS
sudo apt updatesudo apt install cups
2.2 启动/重启服务
sudo systemctl start cups # 启动sudo systemctl restart cups # 重启
2.3 添加打印机(核心操作)
(1) 命令行添加(推荐)
基本语法:
sudo lpadmin -p [打印机名称] -v [设备URI] -m [驱动] -E
输出示例:
sudo lpadmin -p HP_LaserJet-v \"ipp://192.168.1.100/ipp/print\" -m everywhere -E
参数说明:
- -p:指定打印机名称(自定义打印机名称,如 HP_LaserJet,建议用英文/数字,避免空格)。
- -v:打印机设备地址(URI),取决于连接方式(如WiFi/USB/网络等)请看下文。
- -m:指定打印机的驱动(PPD 文件)(或使用 -m everywhere 自动选择 IPP Everywhere 通用驱动)。
- -E: 启用打印机。
设备 URI 是打印机的物理或网络地址,具体的格式取决于连接协议:
驱动选择:
(2) Web界面添加
你可以通过浏览器访问CUPS的Web管理界面,在CUPS配置页面将打印机添加到系统中:
- 打开浏览器,输入 http://localhost:631 访问CUPS管理界面。
- 选择 Administration。
- 选择 Add Printer,在系统会显示网络中可用的打印机。
- 选择你的打印机(根据打印机名称,如CanonCP910)。
- 输入打印机的IP地址(192.168.176.236)并选择协议。通常选择 IPP 或 LPD。
- 选择对应的打印机型号,或者手动下载并安装Canon的驱动程序。
2.4 设置默认打印机
CUPS提供了两种设置默认打印机的方法,分别是用户级别的 lpoptions 和系统级别的 lpadmin。
(1) lpoptions -d(用户级默认打印机)
基本语法:
lpoptions -d <打印机名称>
- 功能:用于查看或设置用户级别的打印选项,包括默认打印机、纸张大小、打印质量等。
- 用户级配置:设置保存在当前用户的 ~/.cups/lpoptions 文件中,仅对当前用户生效。
- 无需管理员权限:普通用户可以直接使用,无需 sudo。
(2) lpadmin -d(系统级默认打印机)
基本语法:
sudo lpadmin -d <打印机名称>
- 作用范围:设置系统全局默认打印机(影响所有未设置用户级默认的用户)。
- 权限要求:需要管理员权限,需使用 sudo。
2.5 打印文件
基本语法:
lp [选项] <文件路径>
常用选项:
2.6 查看打印任务
(1) 列出所有打印队列中的任务:
lpstat -o
输出示例:
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -oHPB0227A57280A-71 root 583680 Tue 29 Apr 2025 08:22:21 AM UTCHPB0227A57280A-72 root 601088 Tue 29 Apr 2025 08:22:34 AM UTCroot@orangepicm4:~/jeff/orthocone-qt/build#
(2) 查看特定打印机的任务:
lpstat -o -P <打印机名称>
(3) 查看更详细的任务信息:
lpq -a
2.7 取消打印任务
(1) 取消单个任务:
cancel <任务ID>
输出示例:
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -oHPB0227A57280A-77 root 601088 Tue 29 Apr 2025 08:28:49 AM UTCroot@orangepicm4:~/jeff/orthocone-qt/build# cancel HPB0227A57280A-77
(2) 取消所有任务(需管理员权限):
sudo cancel -a
(3) 取消某用户的所有任务:
cancel -u <用户名>
2.8 查看、移除已添加的打印机
(1) 查看当前已添加的打印机:
lpstat -p
输出示例:
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -pprinter CP9101c8df3 is idle. enabled since Tue 29 Apr 2025 02:34:41 AM UTCprinter 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 -pprinter CP9101c8df3 is idle. enabled since Tue 29 Apr 2025 02:34:41 AM UTCprinter HPB0227A57280A is idle. enabled since Tue 29 Apr 2025 08:28:59 AM UTC#移除指定打印机root@orangepicm4:~/jeff/orthocone-qt/build# lpadmin -x CP9101c8df3root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -pprinter HPB0227A57280A is idle. enabled since Tue 29 Apr 2025 08:28:59 AM UTCroot@orangepicm4:~/jeff/orthocone-qt/build# lpadmin -x HPB0227A57280Aroot@orangepicm4:~/jeff/orthocone-qt/build# lpstat -plpstat: No destinations added.root@orangepicm4:~/jeff/orthocone-qt/build#
(3) 打印机搜索(扩展):
在 Linux 系统中,命令 avahi-browse -rt _ipp._tcp 用于通过零配置网络(Zeroconf/mDNS) 发现并列出局域网内所有支持 IPP(Internet Printing Protocol) 协议的打印机或其他打印服务,我们可以通过此命令来搜索网络中所有支持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=<legal-A4\" \"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#
三、调试与常见问题
3.1 日志查看
tail -f /var/log/cups/error_log # 实时监控错误日志
3.2 驱动问题
若打印机未识别,尝试安装 printer-driver-* 软件包:
sudo apt install printer-driver-gutenprint
3.3 权限问题
确保用户属于 lpadmin 组:
sudo usermod -aG lpadmin $USER
四、注意事项
- 网络打印机需开放端口:确保防火墙允许 631(IPP)或 9100(Socket)。
- ARM 架构兼容性:部分厂商驱动可能不支持 aarch64,优先使用通用驱动。