一文詳解 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.pswp.cn/web/78166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78166.shtml
英文地址,請注明出處:http://en.pswp.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 服務 步驟五:驗收成果 步驟六:手動…