文章目錄
- 前言
- 一、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/print | ipp://192.168.1.100/ipp/print | 支持 IPP 的現代網絡打印機 |
Socket | socket://<IP地址>:<端口> | socket://192.168.1.100:9100 | 傳統網絡打印機(如 HP JetDirect) |
USB | usb://<制造商>/<型號>?serial=XXX | usb://HP/Deskjet-2130?serial=1234 | 直接連接的 USB 打印機 |
LPD | lpd://<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-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 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,優先使用通用驅動。