一文详解 Linux下的开源打印系统CUPS(Common UNIX Printing System)

文章目录

  • 前言
  • 一、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 update
sudo 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 是打印机的物理或网络地址,具体的格式取决于连接协议:

连接类型URI 格式示例适用场景
IPP 协议ipp://<IP地址>/ipp/printipp://192.168.1.100/ipp/print支持 IPP 的现代网络打印机
Socketsocket://<IP地址>:<端口>socket://192.168.1.100:9100传统网络打印机(如 HP JetDirect)
USBusb://<制造商>/<型号>?serial=XXXusb://HP/Deskjet-2130?serial=1234直接连接的 USB 打印机
LPDlpd://<IP地址>/<队列名>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配置页面将打印机添加到系统中:

  • 打开浏览器,输入 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 [选项] <文件路径>

常用选项:

选项作用
-d <打印机名称>指定目标打印机(覆盖默认打印机)
-n <份数>设置打印份数(例如 -n 2)
-o landscape横向打印
-o media=A4指定纸张大小(如 A4)
-o fit-to-page自动缩放内容适应纸张

2.6 查看打印任务

(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

2.7 取消打印任务

(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 <用户名>

2.8 查看、移除已添加的打印机

(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-browseAvahi 工具的命令,用于在网络中浏览和发现服务(基于 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     localhostname = [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     localhostname = [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,优先使用通用驱动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/78166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React useCallback函数

应用场景&#xff1a;父组件向子组件传递函数类型的props时

python 桌面程序开发简述及示例

Python桌面程序开发简述及示例 Python凭借其简洁的语法和丰富的库支持,非常适合开发跨平台的桌面应用程序。本文将介绍Python桌面开发的主要方法,并提供实际代码示例。 一、Python桌面开发主要方法 1.1 Tkinter(标准库) Python内置的GUI库,适合开发简单桌面应用 1.2 …

数字智慧方案5875丨智慧交通枢纽综合解决方案(43页PPT)(文末有下载方式)

篇幅所限&#xff0c;本文只能提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2301_78256053/89575708 资料解读&#xff1a;智慧交通枢纽综合解决方案 详细资料请看本解读文章的最后内容。 随着城市化进程的加速和交通需求的不断增…

企业级分布式 MCP 方案

飞书原文档链接地址&#xff1a;https://ik3te1knhq.feishu.cn/wiki/D8kSwC9tFi61CMkRdd8cMxNTnpg 企业级分布式 MCP 方案 [!TIP] 背景&#xff1a;现阶段 MCP Client 和 MCP Server 是一对一的连接方式&#xff0c;若当前 MCP Server 挂掉了&#xff0c;那么 MCP Client 便不…

【AI提示词】奥卡姆剃刀思维模型专家

提示说明 一位专注于奥卡姆剃刀思维模型的专业人士&#xff0c;擅长将简洁性原则应用于复杂问题的分析与解决。 提示词 # Role: 奥卡姆剃刀思维模型专家## Profile - language: 中文 - description: 一位专注于奥卡姆剃刀思维模型的专业人士&#xff0c;擅长将简洁性原则应用…

2.1 行列式

引言 行列式是线性代数的核心工具&#xff0c;贯穿矩阵运算、特征值计算与微分方程求解。本文系统梳理2.1节核心考点&#xff0c;结合公式速查与典型例题&#xff0c;助你高效突破行列式难点&#xff01; 考点一&#xff1a;数值型行列式计算 1️⃣ 行列式的定义 (1) 定义方…

单词规律(简单)

思路和同构字符串那道题一样。、但是这道题要注意的地方就是&#xff0c;检查 pattern 和 s 的单词数量是否一致以及在进行字符串比较的时候应该用equals来进行比较&#xff0c;而不能用“&#xff01;”&#xff0c;“&#xff01;”比较的是对象引用而非内容。 class Soluti…

【C++】认识map和set

目录 前言&#xff1a; 一&#xff1a;认识map和set 二&#xff1a;map和set的使用 1.set的使用 2.map的使用 三&#xff1a;map的insert方法返回值 四&#xff1a;map的[ ]的使用 五&#xff1a;multiset和multimap 六&#xff1a;map和set的底层数据结构 七&#x…

Mybatis中的一级二级缓存扫盲

思维导图&#xff1a; MyBatis 提供了一级缓存和二级缓存机制&#xff0c;用于提高数据库查询的性能&#xff0c;减少对数据库的访问次数。&#xff08;本质上是减少IO次数&#xff09;。 一级缓存 1. 概念 一级缓存也称为会话缓存&#xff0c;它是基于 SqlSession 的缓存。在同…

uniapp 实现低功耗蓝牙连接并读写数据实战指南

在物联网应用场景中&#xff0c;低功耗蓝牙&#xff08;BLE&#xff09;凭借其低能耗、连接便捷的特点&#xff0c;成为设备间数据交互的重要方式。Uniapp 作为一款跨平台开发框架&#xff0c;提供了丰富的 API 支持&#xff0c;使得在多个端实现低功耗蓝牙功能变得轻松高效。本…

OpenSSL应用实践:嵌入式数据安全实战指南

文章目录 OpenSSL应用实践:嵌入式数据安全实战指南一、嵌入式安全现状与OpenSSL适配方案1.1 嵌入式安全挑战1.2 OpenSSL精简方案二、开发环境搭建2.1 交叉编译工具链2.2 OpenSSL交叉编译三、核心功能实现3.1 AES-GCM加密实践四、实战项目:安全OTA升级4.1 系统架构4.2 关键代码…

harmonyOS 手机,双折叠,平板,PC端屏幕适配

由于HarmonyOS设备的屏幕尺寸和分辨率各不相同&#xff0c;开发者需要采取适当的措施来适配不同的屏幕。 1.EntryAbility.ets文件里&#xff1a;onWindowStageCreate方法里判断设备类型&#xff0c; 如果是pad&#xff0c;需全屏展示&#xff08;按客户需求来&#xff0c;本次…

跟韩学AiOps系列之2025学MySQL系列_如何在MySQL中开启和提交事务?!

跟韩学AiOps系列之2025学MySQL系列_如何在MySQL中开启和提交事务&#xff1f;! 文章目录 一、事务的基本操作1. 开启事务2. 执行事务内操作3. 提交事务4. 回滚事务 二、验证示例&#xff08;适用于 MySQL 5.7&#xff09;步骤 1&#xff1a;准备测试表和数据步骤 2&#xff1a…

Java生成微信小程序码及小程序短链接

使用wx-java-miniapp-spring-boot-starter 生成微信小程序码及小程序短链接 在pom.xml文件中引入依赖 <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-miniapp-spring-boot-starter</artifactId><version>4.7…

如何让通义千问大模型支持结构化输出?

之前的文章提到通义千问API无法通过with_structured_output/json schema的方式支持结构化输出&#xff0c;如果就是想使用通义千问大模型做结构化输出&#xff0c;应该怎么办呢&#xff1f;有两种办法 使用Ollama来运行通义千问大模型 从Ollama博客文章 Structured output 中…

一条 SQL 查询语句是如何执行的(MySQL)

第一讲&#xff1a;一条 SQL 查询语句是如何执行的 总览图示 MySQL 查询的执行流程可以大致分为以下步骤&#xff08;如图所示&#xff09;&#xff1a; 连接器&#xff08;Connection&#xff09;查询缓存&#xff08;Query Cache&#xff0c;MySQL 8.0 已废弃&#xff09;…

汽车OTA在线升级法规分析

摘要 本文介绍了R156法规即《关于批准车辆的软件升级和软件升级管理体系统一规定的法规》、该法规专注于汽车软件升级功能&#xff0c;并为此提出了一系列具体要求&#xff0c;旨在确保软件升级流程的安全性、可控性和合规性&#xff0c;从而顺应汽车行业智能化、联网化的发展趋…

Notepad编辑器实现换行符替换

在不同的Note编辑器中&#xff0c;批量把换行替换为空的方法有所不同&#xff0c;以下是常见编辑器的操作方法&#xff1a; Notepad 打开文件后&#xff0c;按CtrlH打开“查找和替换”对话框&#xff0c;在“查找”字段中输入\r\n&#xff0c;在“替换为”字段中输入一个空格…

Rust多线程性能优化:打破Arc+锁的瓶颈,效率提升10倍

一、引言 在 Rust 开发中&#xff0c;多线程编程是提升程序性能的重要手段。Arc&#xff08;原子引用计数&#xff09;和锁的组合是实现多线程数据共享的常见方式。然而&#xff0c;很多程序员在使用 Arc 和锁时会遇到性能瓶颈&#xff0c;导致程序运行效率低下。本文将深入剖…

【安装指南】Centos7 在 Docker 上安装 RabbitMQ4.0.x

目录 前置知识:RabbitMQ 的介绍 一、单机安装 RabbitMQ 4.0.7版本 1.1 在线拉取镜像 二、延迟插件的安装 2.1 安装延迟插件 步骤一:下载延迟插件 步骤二:将延迟插件放到插件目录 步骤三:启动延迟插件 步骤四:重启 RabbitMQ 服务 步骤五:验收成果 步骤六:手动…