使用CUPS打印服務

1. 測試環境

Printer: Xprinter XP-58IIH
指令支持: ESC/POS
接口: USB, 藍牙
Linux系統: Arch Linux
$ sudo pacman -Qi cups
Name : cups
Version : 2.2.11-1
Description : The CUPS Printing System - daemon package
Architecture : x86_64
URL : https://www.cups.org/
Licenses : GPL
Groups : None
Provides : None
Depends On : acl pam libcups>=2.2.11 cups-filters bc dbus systemd
libpaper hicolor-icon-theme
Optional Deps : xdg-utils: xdg .desktop file support [installed]
colord: for ICC color profile support [installed]
Required By : None
Optional For : None
Conflicts With : None
Replaces : None
Installed Size : 13.92 MiB
Packager : Andreas Radke <andyrtr@archlinux.org>
Build Date : Sun 24 Mar 2019 06:39:26 PM CST
Install Date : Sun 07 Apr 2019 05:07:53 PM CST
Install Reason : Explicitly installed
Install Script : Yes
Validated By : Signaturephp

2. CUPS介紹

https://www.ibm.com/developerworks/cn/linux/l-lpic1-108-4/index.html
管理打印機和打印 Ian Shields 2018 年 3 月 14 日發佈
CUPS 原先爲通用 UNIX 打印系統 (Common UNIX Printing System) 的首字母縮寫,是 Linux 的打印機和打印做業管理器。
System 也有一個打印守護程序。它的功能相似於 Berkeley LPD,但採用不一樣的命令集。您將會常常看到兩種具備不一樣選項但完成相同任務的命令。
例如,來自 Berkeley 實施的 lpr和來自 System V 實施的 lp 均可打印文件。
CUPS 打印系統的核心是做爲守護進程運行的 cupsd 打印服務器。
html

2.1 CUPS的配置文件

2.1.1 cupsd.conf

CUPS 配置文件一般位於 /etc/cups/cupsd.conf 中。
原先 cupsd.conf 中容許的文件、目錄和用戶配置指令,如今改成存儲在 cups-files.conf 中。這樣可防止某些類型的特權升級攻擊。
前端

2.1.2 cups-files.conf

$ sudo cat /etc/cups/cups-files.conf
# Location of the file listing all of the local printers...
#Printcap /etc/printcaplinux

2.1.3 printcap

自動生成的 /etc/printcap 文件。這是 LPD 打印服務器的配置文件名稱,部分應用仍使用它來肯定可用的打印機及其屬性。
$ sudo cat /etc/printcap
# This file was automatically generated by cupsd(8) from the
# /etc/cups/printers.conf file. All changes to this file
# will be lost.
Xprint|Xprint:rm=tompc:rp=Xprint:git

2.1.4 printers.conf

$ sudo cat /etc/cups/printers.conf
# Printer configuration file for CUPS v2.2.11
# Written by cupsd on 2019-04-09 14:41
# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING
<Printer Xprint>
UUID urn:uuid:192cdccd-05bc-3ef7-4582-c6233773ef56
Info Xprint
Location pc
MakeModel Zijiang ZJ-58
DeviceURI usb://Unknown/Printer?serial=?
State Idle
StateTime 1554792072
ConfigTime 1554792065
Type 53252
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer
</Printer>
github

2.2 SPOOL假脫機

https://zh.wikipedia.org/zh-hans/假脫機
假脫機(外部設備聯機並行操做,SPOOL,Simultaneous Peripheral Operations On-line)是一種數據緩衝,指傳輸數據的過程當中,將數據存放在臨時工做區中。
最多見的假脫機的應用是打印緩存,即把打印任務加入到隊列。
根據文件系統層次結構標準 (FHS),假脫機文件默認狀況下存儲在 /var/spool 文件系統中。shell

2.3 CUPS 支持各類打印機,包括:

Local Printers本地鏈接: 數據庫

  • 並行打印機和 USB 打印機

Network Printers網絡連接:ubuntu

  • Backend Error Handler 後端錯誤處理程序
  • LPD/LPR 主機或打印機
  • AppSocket/HP JetDirect
  • 互聯網打印協議 (http)
  • 互聯網打印協議 (https)
  • 互聯網打印協議 (ipp)
  • 互聯網打印協議 (ipps)

2.4 CUPS的beh

Backend Error Handler beh 後端錯誤處理程序
https://wiki.linuxfoundation.org/openprinting/database/backenderrorhandler
下載 beh.txt 腳本:http://www.openprinting.org/download/files/beh
當CUPS後端和打印機之間的通訊出現錯誤時,CUPS禁用打印隊列!!!
對於桌面/家庭用戶來講, 這常常發生,一般家用打印機只會在偶爾須要使用時纔打開。
而常常發送打印任務後,才發現打印機還沒開,或網線沒有插...這時候就須要重新啓用打印服務...
此類問題能夠經過安裝beh腳本解決,此腳本使得後端錯誤處理可配置:
讓隊列根本不被禁用。簡單的方法,但工做會丟失。
重複給定次數。
常常無限重複,直到工做最終經過。這是LPRng的標準,它消除了工做的損失。
也能夠配置兩次嘗試運行後端之間的時間間隔。
對每一個打印隊列獨立完成配置。所以,能夠區別對待本地打印機和網絡打印機。
只需下載腳本,將其複製到CUPS後端目錄(一般/usr/lib/cups/backend/),而後使用「 chmod 755 beh。
而後從新啓動它註冊新後端的CUPS,一般使用「 killall -HUP cupsd」或「/etc/init.d/cups restart」。
若是你作的都正確,那麼在「 beh」的輸出中必須有一行包含「 lpinfo -v」。
beh是一個包裝器,由CUPS調用代替一般的後端,beh如今稱爲後端。
這種方式beh能夠根據其配置重複調用後端,或者只是隱藏後端的錯誤狀態,使其不被CUPS守護程序看到。
後端

2.5 使用beh

要使用打印隊列beh,請獲取root並調用命令,以下所示:
lpadmin -p <queue name> -E -v beh:/<dd>/<att>/<delay>/<originaluri>

  • <queue name>:打印隊列的名稱
  • <dd>:若是「 1」 beh始終以零狀態退出,請不要禁用,所以當原始後端退出並出現錯誤時,隊列永遠不會被禁用。「 0」將後端的最後一次調用(<att>重試後)的錯誤狀態傳送到CUPS,所以隊列一般被禁用。
  • <att>:嘗試,在出現錯誤時嘗試調用後端的次數。「 0」表示無限重試。在這種狀況下<dd>變得毫無心義。
  • <delay>:兩次嘗試調用beckend之間的延遲,以秒爲單位給出,並做爲整數。沒有意義,若是<att>是一個。
  • <originaluri>:您的隊列以前擁有 的原始URI(使用「 lpstat -v」來顯示您的隊列的URI)。

全部參數,特別是<dd>,<att>和<delay>一直被指定,即便其中一人是沒有意義的,因爲其餘的設置。
beh與除了每一個後端工做hp從後端HPLIP。若是beh與hp後端一塊兒使用,HP Toolbox將沒法再找到打印機。
示例URI:
beh:/1/3/5/socket://printer:9100
在主機名爲「 printer」 的網絡打印機上,嘗試訪問3次,嘗試之間有5秒的延遲。若是做業仍然失敗,則不會禁用隊列(並丟棄做業)。
beh:/0/10/60/socket://printer:9100
每隔一分鐘重試10次,在仍未成功時禁用隊列。
beh:/1/0/60/usb://Brother/HL-5040%20series
在USB上的Brother HL-5040上無限次地嘗試,直到打印機返回,間隔爲一分鐘。這樣,當打印機關閉時,做業不會丟失,而且能夠經過簡單地關閉打印機來有意地延遲打印。桌面打印機和/或家庭用戶的理想配置。

2.6 安裝cups,並激活

這裏將安裝在 Arch Linux 系統上。其餘Linux系統主要是安裝命令有差別,其餘命令基本相同。
$ sudo pacman -S cups //安裝在Arch Linux系統上使用pacman命令。
$ sudo systemctl start org.cups.cupsd //啓動
$ sudo systemctl status org.cups.cupsd //查看狀態
$ sudo systemctl enable org.cups.cupsd //設置開啓啓動

3. 打印機驅動

lpinfo 命令還可幫助您識別可用設備類型和驅動程序。使用 -v 選項可列出受支持的設備,-m 選項可列出驅動程序。

3.1 lpinfo -m列出已有驅動程序

$ lpinfo -m |grep hp
$ lpinfo -m |grep epson
drv:///sample.drv/epson9.ppd Epson 9-Pin Series
drv:///sample.drv/epson24.ppd Epson 24-Pin Series
所有列出,不方便查看,加上過濾條件,如上,沒找到hp的打印機驅動,但有2個Epson的驅動。若是使用相似方式找到裏匹配你正在使用的打印機,能夠跳過下一節(添加更多的驅動。)

3.2 添加更多的驅動

請訪問 OpenPrinting.org(參閱相關主題),查看是否有用於您的特定打印機的驅動程序。
Foomatic:Linux Foundation的OpenPrinting工做組的foomatic爲許多打印機驅動程序提供PPD,包括free和nonfree。有關foomatic的功能的更多信息,請參閱Developer's View中的Foomatic。
要使用foomatic,請安裝foomatic-db-engine以及至少如下之一:

  • foomatic-db - foomatic-db-engine用於生成PPD文件的XML文件集合。
  • foomatic-db-ppds - 預建的PPD文件。(60Mb)
  • foomatic-db-nonfree - 來自打印機制造商的XML文件集合,由foomatic-db-engine用於生成PPD文件的非免費許可證。
  • foomatic-db-nonfree-ppds - 非免費許可下的預建PPD文件。

$ sudo pacman -S foomatic-db-engine
$ sudo pacman -S foomatic-db-ppds //安裝好這個預建的PPD文件, 有(60Mb)多,有好幾千個打印機驅動了。
「PPD文件」(PostScript打印機描述文件)
再使用過濾條件列出已添加的驅動,找到匹配的驅動後,就能夠進入下一節了,若是仍是沒有,上面4選1,把試過沒有的卸載掉,繼續嘗試其餘的,也能夠挨個兒所有安裝,添加更多的驅動再找。
$ lpinfo -m |grep 過濾關鍵字

4. 打印相關命令:

https://www.computerhope.com/unix/ulpadmin.htm
https://www.computerhope.com/unix/ulp.htm
https://www.computerhope.com/unix/ulpstat.htm

4.1 有2個打印命令

  • lp - 在System V操做系統上打印文件。
  • lpr - 提交打印請求。

*lpr 會以靜默方式實現做業假脫機,而 lp 則會顯示假脫機做業的編號
*lp 具備與 lpr 類似的選項,但名稱可能不一樣;例如,lpr 上的 -# 與 lp 上的 -n 等效
       lpr 的選項選項 及 用途

  1. -C、-J 或 -T 設置做業名。
  2. -P 選擇特定打印機。
  3. -# 指定副本數量。請注意,這與您在 lp 命令中看到的 -n 選項不一樣。
  4. -m 做業完成時發送電子郵件。
  5. -l 指示已設置打印文件的格式以進行打印。與 -o raw 等效。
  6. -o 設置做業選項。
  7. -p 使用陰影標題設置文本文件格式。與 -o prettyprint 等效。
  8. -q 使做業暫掛(或排隊),以便稍後打印。
  9. -r 實現文件假脫機以進行打印後,移除此文件。

4.2 打印任務管理

lpq - 列出可用打印機的狀態,列出打印做業。
lprm - 從打印隊列中刪除請求。

4.3 查看打印機狀態

lpstat - 列出LP打印服務的狀態。

  • -a 顯示打印機的接受狀態。
  • -c 顯示打印類。
  • -p 顯示打印狀態:已啓用或已禁用。
  • -s 顯示默認的一個或多個打印機和類。等效於 -d、 -c 和 -v。請注意,必須將多個選項隔開,由於可爲許多選項指定值。
  • -s 顯示打印機及其設備。

lpstat -d; lpstat -v HL-2280DW; lpstat -s; lpstat -a XP-610; lpstat -p -a;

$ lpstat -s
system default destination: XPRINT
device for XPRINT: usb://Unknown/Printer?serial=?
$ lpstat -p
printer XPRINT disabled since Mon 08 Apr 2019 05:10:17 PM CST -
reason unknown

4.4 控制打印機狀態

可經過 cupsaccept 和 cupsreject 命令控制是啓用仍是禁用排隊
可經過 cupsenable 和 cupsdisable 命令控制是啓用仍是禁用打印
#cupsdisable queue_name //停用打印機
#cupsenable queue_name //激活打印機
#cupsaccept queue_name //將打印機設置爲接受做業

4.5 打印機設置

$ lpoptions -d xxx //設置默認打印機
$ lpoptions -p xxx -l //列出選項 List the options
$ lpoptions -p xxx -o option=value //設置一個選項 Set an option
好比:$ lpoptions -p HP_DESKJET_940C -o PageSize=A4

5. 添加打印機

掌握了基本信息後,安裝了cups,找到了打印機驅動,就可使用 lpadmin 命令來配置打印機.
命令行方式 適用於幾乎全部打印機

5.1 找到打印機

從新插拔USB設備後運行,列出最近的設備變更信息。
$ dmesg --color=always |tail

以USB打印機爲例,使用 lpinfo命令查找打印機的uri。
$ sudo lpinfo -v
...
direct usb://Unknown/Printer?serial=?
這裏找到就是USB打印機的uri了,不一樣的打印機,這裏會很不同。
注:能夠先不插USB,執行以上命令;再插上USB打印機,再執行以上命令,這樣就很容易分辨了。
$ /usr/lib/cups/backend/snmp ip_address #使用SNMP查找URI

5.2 找到打印機驅動

使用$ lpinfo -m命令加過濾找到打印機驅動model
$ lpinfo -m |grep 58
lsb/usr/cupsfilters/zj58.ppd Zijiang ZJ-58
若是正好找到了,就能夠跳到下一節添加打印機了。

5.2.1 添加更多的驅動

參照3.2 添加更多的驅動
而後再lpinfo1 -m查找,大部分都能經過以上方式或打印機廠商網站找到。

5.2.2 安裝第三方驅動(20190412補充)

若是以上方式都沒有適合的驅動,正好買到了小衆的打印機,有些國產或者山寨等,也能夠向店家請教。
好比這裏找到了github上的驅動。
https://github.com/klirichek/zj-58
下載,參照readme的指導安裝便可
$ sudo pacman -S cmake //安裝編譯工具
下載,解壓縮.
$ cd /home/toma/Downloads/xp/zj58 //進入解壓縮的目錄
$ mkdir build //創建構建二進制用的目錄
$ cmake /home/toma/Downloads/xp/zj58 //編譯
$ sudo make install //安裝
...
[100%] Linking C executable rastertozj
[100%] Built target rastertozj
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/lib/cups/filter/rastertozj
-- Installing: /usr/share/cups/model/zjiang/zj58.ppd
-- Installing: /usr/share/cups/model/zjiang/xp58.ppd
-- Installing: /usr/share/cups/model/zjiang/tm20.ppd
-- Installing: /usr/share/cups/model/zjiang/zj80.ppd
$ lpinfo -m |grep xp58
zjiang/xp58.ppd J-speed XP-58 

5.3 添加打印機

$ sudo lpadmin -p queue_name -E -v uri -m model
queue_name, 改成打印機名稱。
uri,前面lpinfo找到的字符串。
model,前面找到的打印機驅動,指定PPD文件。

https://lists.cups.org/pipermail/cups/2004-December/031341.html
有兩種方法能夠指定PPD:-m標準模型 或 -P絕對路徑的ppd文件
"-m ppdfile.ppd」或「-m subdir/ppdfile.ppd"這個「-m」參數
指定標準的CUPS「模型」(一般位於「/usr/share/cups/model/」)或者在子目錄中
「在/usr/share/cups/model/subdir/」。就是使用lpinfo -m找到的ppd文件。
注:指定標準模型或PPD文件,如上只須要使用文件名,或子目錄\文件名便可,不須要註明具體的路徑。
另注:查看當前ArchLinux系統的ppd文件在這裏:/usr/share/ppd/cupsfilters/

「-P /path/to/ppdfile.ppd」或「-P ../path/to/ppdfile.ppd」。這個「-P」
參數採用絕對或相對路徑來查找 ppdfile.ppd。這類是標準庫裏找不到,從其餘地方獲取的,須要手動指定,則須要絕對路徑,好比:/home/toma/Download/zj58.ppd

https://wiki.archlinux.org/index.php/CUPS 上的添加示例

  • #lpadmin -p HP_01 -E -v "usb://HP...uri" -m drv:///HP...ppd.gz //指定標準模型
  • #lpadmin -p AirPrint -E -v "ipp://10.0.1.25/ipp/print" -m everywhere #無驅動(Apple AirPrint或IPP Everywhere)
  • #lpadmin -p Print02 -m raw #Raw queue; 沒有PPD或過濾器
  • #lpadmin -p Print03 -E -v "ipp://10.0.1.3/ipp/print" -m pxlmono.ppd #指定PPD而不是模型

本機添加(錯誤嘗試記錄):
$ sudo lpadmin -p Xprint -E -v "usb://Unknown/Printer?serial=?" -m zj58.ppd
lpadmin: Unable to copy PPD file.
注:zj58.ppd並非標準庫裏的,我是從github上找到的,手動複製到標準模型的目錄下,
$ sudo cp zj58.ppd /usr/share/ppd/cupsfilters/zj58.ppd
而後使用-m指定ppd文件來添加打印機,結果報錯:「沒法複製PPD文件」。
這時就須要使用-P指定絕對路徑的方式了:
$ sudo lpadmin -p Xprint -E -v "usb://Unknown/Printer?serial=?" -P /usr/share/ppd/cupsfilters/zj58.ppd
添加成功後,會將ppd文件複製到/etc/cups/ppd/Xprint.ppd
單純指定一個ppd文件,能夠添加成功,查看打印機狀態也OK,但發送打印任務永遠都是stoped狀態。

正確的方式是標準庫裏的PPD模型,或者下載廠商提供的驅動程序,我這裏使用的是第三方驅動,(20190412添加)
5.2.2 安裝第三方驅動
這是再查找出 -v, -m 參數,而後添加打印機:
$ sudo lpinfo -v
direct usb://Unknown/Printer?serial=?
$ lpinfo -m |grep xp58
zjiang/xp58.ppd J-speed XP-58
$ sudo lpadmin -p Xprint58 -E -v "usb://Unknown/Printer?serial=?" -m zjiang/xp58.ppd

5.3.1 設置默認打印機

$ lpstat -s
no system default destination
device for Xprint58: usb://Unknown/Printer?serial=?
[toma@tompc build]$ lpstat -p
printer Xprint58 is idle. enabled since Fri 12 Apr 2019 11:41:10 AM CST
[toma@tompc build]$

$ lpoptions -d Xprint58
copies=1 device-uri=usb://Unknown/Printer?serial=? finishings=3 job-cancel-after=10800 job-hold-until=no-hold job-priority=50 job-sheets=none,none marker-change-time=0 number-up=1 printer-commands=none printer-info=Xprint58 printer-is-accepting-jobs=true printer-is-shared=true printer-is-temporary=false printer-location printer-make-and-model='J-speed XP-58' printer-state=3 printer-state-change-time=1555040470 printer-state-reasons=none printer-type=53252 printer-uri-supported=ipp://localhost/printers/Xprint58

$ lpstat -p
printer Xprint58 is idle. enabled since Fri 12 Apr 2019 11:41:10 AM CST
[toma@tompc build]$ lpstat -s
system default destination: Xprint58
device for Xprint58: usb://Unknown/Printer?serial=?

5.3.2 更改選項

#列出選項
$ lpoptions -p Xprint58 -l
PageSize/Media Size: *X48MMY65MM X48MMY105MM X48MMY210MM X48MMY297MM X48MMY3276MM Custom.WIDTHxHEIGHT
CutMedia/Cut Media: *None EndOfPage EndOfJob
OptionCash1/Cash drawer 1: *False True
OptionCash2/Cash drawer 2: *False True
OptionCutter/Cutter: *False True
FeedDist/Feed distance: 0feed3mm 1feed6mm *2feed9mm 3feed12mm 4feed15mm 5feed18mm 6feed21mm 7feed24mm 8feed27mm 9feed30mm 10feed33mm 11feed36mm 12feed39mm 13feed42mm 14feed45mm
FeedWhere/When to feed: None AfterPage *AfterJob
BlankSpace/Blank space at page's end: True *False
CashDrawer1Setting/Cash Drawer 1: *None 1BeforePrinting 1AfterPrinting
CashDrawer2Setting/Cash Drawer 2: *None 2BeforePrinting 2AfterPrinting
CashDrawer1PulseOn/Cash Drawer 1 pulse ON time: None 10XMS 20XMS 30XMS *40XMS 50XMS 60XMS 70XMS 80XMS
CashDrawer1PulseOff/Cash Drawer 1 pulse OFF time: None 10XMS 20XMS 30XMS 40XMS *50XMS 60XMS 70XMS 80XMS
CashDrawer2PulseOn/Cash Drawer 2 pulse ON time: None 10XMS 20XMS 30XMS *40XMS 50XMS 60XMS 70XMS 80XMS
CashDrawer2PulseOff/Cash Drawer 2 pulse OFF time: None 10XMS 20XMS 30XMS 40XMS *50XMS 60XMS 70XMS 80XMS
Resolution/Resolution: *203x203dpi

激活打印機
#cupsenable Xprint58
將打印機設置爲接受做業
#cupsaccept Xprint58

5.3.3 檢查狀態

$ lpstat -s
system default destination: Xprint58
device for Xprint58: usb://Unknown/Printer?serial=?
$ lpstat -p
printer Xprint58 is idle. enabled since Sun 07 Apr 2019 09:37:27 PM CST

禁用打印機後再查看情況
#cupsenable Xprint
$ lpstat -p
printer Xprint disabled since Sun 07 Apr 2019 09:54:03 PM CST -
Unable to send data to printer.

5.3.4 測試打印

$ lpr file
$ lpr -# 17 file # print the file 17 times
$ echo 'Hello, world!' | lpr -p # print the result of a command. The -p switch adds a header.

5.3.5 打印任務

列出打印隊列
$ lpq
$ lpq -a # on all queues
移除打印任務
# lprm # remove last entry only
# lprm - # remove all entries

5.4 添加打印機-圖形界面

部分廠商提供獨立的打印驅動安裝程序,參照廠商說明安裝好驅動,而後打開CUPS的網頁添加打印機便可。
http://127.0.0.1:631

5.5 刪除打印機

首先將其設置爲拒絕全部傳入的條目:
$ sudo cupsreject XPRINT
$ lpstat -p
printer XPRINT disabled since Mon 08 Apr 2019 05:10:17 PM CST -
Rejecting Jobs

而後禁用它。
$ sudo cupsdisable XPRINT
$ lpstat -p
printer XPRINT disabled since Mon 08 Apr 2019 05:10:17 PM CST -
Paused

最後刪除它。
$ sudo lpadmin -x XPRINT
$ lpstat -p
lpstat: No destinations added.
$ lpstat -s
no system default destination
lpstat: No destinations added.
lpstat: No destinations added.

6. 其餘參考(只有連接和部分摘要,具體請打開連接看原文)

https://www.cups.org/faq.html
https://www.cups.org/doc/options.html
http://localhost:631/help
https://en.wikipedia.org/wiki/CUPS

6.1 本機使用的打印機Xprinter XP-58的第三方驅動

Printer name is "Xprinter", model: XP-58IIH. Support USB and Bluetooth.
https://github.com/klirichek/zj-58
Zj-58, Zj-80 and other receipt printers
CUPS filter for cheap thermal receipt printers as Zijiang ZJ-58, XPrinter XP-58, JZ-80 with cutter, Epson TM-T20, and may be any other printers understanding ESC/POS commands.
Originally it was reverse-engineered filter for Zijiang zj-58 with it's specific PPD, but later it is revealed that it actually works with many other cheap 58mm printers, like Xprinter XP-58.
https://github.com/klirichek/zj-58/blob/master/zj58.ppd

6.2 異常問題檢查

https://wiki.ubuntu.com/DebuggingPrintingProblems
Debugging Printing Problems

打開終端/控制檯並檢查是否加載了usb內核模塊:
$ lsmod | grep usb

檢查USB子系統是否正確檢測到打印機並肯定其USB供應商/產品ID以及USB總線和設備地址:
$ lsusb
注意:若是關閉或拔下打印機電源,USB總線和設備地址會發生變化。若是須要,請從新運行此命令。

檢查打印機的設備文件是否已建立,全部權(「root lp」)和權限(非HP:「crw-rw-r--」,HP:「crw-rw-r - +」)是否正確設置:
$ ls -l /dev/usb/lp*
$ ls -l /dev/bus/usb/*/*

6.3 開發人員觀點中的Foomatic如何運做?(有流程圖)

http://www.openprinting.org/download/kpfeifle/LinuxKongress2002/Tutorial/IV.Foomatic-Developer/IV.tutorial-handout-foomatic-development.html

6.4 其餘Linux系統的參考

https://wiki.archlinux.org/index.php/CUPS
https://wiki.archlinux.org/index.php/CUPS/Printer-specific_problems
https://wiki.gentoo.org/wiki/Printing
https://wiki.debian.org/Printing
https://wiki.debian.org/SystemPrinting

6.5 openprinting.org的(絕望指南)

http://www.openprinting.org/download/kpfeifle/LinuxKongress2002/Tutorial/VII.cups-help/VII.cups-help.html
(VII。)故障排除 - CUPS-並尋求幫助HOWTO(絕望指南)
https://www.cups.org/documentation.html

6.6 查看錯誤日誌

http://127.0.0.1:631/admin/log/error_log?
E [09/Apr/2019:10:23:28 +0800] [cups-driverd] Unable to open \"/usr/share/cups/model/zj58.ppd\" - No such file or directory
/usr/share/cups/model/zj58.ppd

E [09/Apr/2019:20:34:56 +0800] Xprint: File \"/usr/lib/cups/filter/rastertozj\" not available: No such file or directory

/usr/lib/cups/filter/rastertozj

6.7 OpenPrinting CUPS快速入門

https://wiki.linuxfoundation.org/openprinting/database/foomatic
https://wiki.linuxfoundation.org/openprinting/database/cupsdocumentation
Foomatic計劃分爲三個部分:
數據庫
該數據庫包含許多XML文件,這些文件詳細說明了如何執行給定的打印機驅動程序。有兩個前端使用這些文件:(1)人類可讀的前端生成全部「執行細節」頁面上顯示的信息; (2)PPD-O-Matic PPD生成器計算Adobe兼容的PPD文件,您須要配置打印隊列。
PPD文件
數據庫生成的PPD文件包含有關重要打印機功能,可用選項以及如何構建渲染器(一般爲Ghostscript)命令行的全部信息,具體取決於用戶對選項的選擇。foomatic-rip讀取它以瞭解如何執行打印做業。GUI前端讀取它以構建用戶能夠調整選項的對話框。除了一般的東西,PPD文件包含以「* Foomatic ...」開頭的各類額外行。這些包含驅動程序命令行的詳細信息,選項是否接受任意數字(而不只僅是PPD文件中列出的選項)等信息。CUPS和應用程序忽略了這些額外的行。
過濾器
過濾腳本'foomatic-rip'由CUPS調用,具備各類輸入; 輸入包括PPD文件名和用戶選擇的各類選項。foomatic-rip打開PPD,提取全部選項及其可能的設置,還提供命令行以使用適當的驅動程序執行Ghostscript。它解析PostScript打印文件以進行選項設置。這些選項設置可能已被CUPS或應用程序填入; foomatic-rip自己還會在打印數據流中插入其餘PostScript代碼,以便根據須要設置選項。它還將標準CUPS選項類型按摩爲數據庫使用的更通用的打印機/驅動程序特定格式。

6.8 使用CUPS打印的基礎知識

https://wiki.linuxfoundation.org/openprinting/database/cupsprintingtutorial
本教程介紹了使用CUPS打印的基礎知識,包括
設置本地(USB,並行)PostScript和非PostScript打印機
多功能設備
爲以太網鏈接的打印機分配IP地址
在網絡中共享打印機
高可用性 - 冗餘CUPS隊列和服務器
使用Samba將打印機共享到Windows機器
和更多 …

6.9 用戶角度的教程

http://www.openprinting.org/download/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.tutorial-handout-foomatic-user.html
(II。)從用戶的角度看起來頗有用:
在Foomatic的幫助下安裝打印機
設置打印機的一個大問題是使假脫機程序調用正確的過濾器並使用戶能夠控制打印機的功能。大多數GNU / Linux發行版使用本身的工具,這些工具一般不支持最新的打印機型號,也只能訪問很是基本的驅動程序選項。
爲了改善這種狀況,Printing-HOWTO的做者Grant Taylor創建了一個數據庫,用於提供有關免費軟件打印機驅動程序以及打印機以及如何使用免費軟件支持它們的信息。這個名爲Foomatic的數據庫位於linuxprinting.org上而我目前正在維護它。如今,數據庫列出了全部免費軟件打印機驅動程序及其命令行和全部可用選項以及全部打印機,咱們能夠獲取有關它們支持程度的信息。數據庫是用XML實現的,Perl腳本能夠自動建立配置文件,甚至能夠爲全部已知的免費緩衝器完成打印機隊列:LPD,LPRng,GNUlpr,CUPS,PPR,PDQ和無後臺打印。經過這些隊列,用戶能夠訪問所使用的打印機驅動程序的所有功能,並得到與假脫機程序無關的用戶界面,以便他能夠以相同的方式操做全部的假脫機程序。
http://www.linuxprinting.org/
http://www.openprinting.org/download/
http://www.openprinting.org/download/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.Foomatic-User.pdf
https://wiki.linuxfoundation.org/openprinting/start
https://wiki.linuxfoundation.org/openprinting/database/foomatic
https://wiki.linuxfoundation.org/openprinting/database/aboutfoomatic
Foomatic是一個數據庫驅動的系統,用於在Unix下將免費軟件打印機驅動程序與常見的解析器集成。
它支持CUPS,LPRng,LPD,GNUlpr,Solaris LP,PPR,PDQ,CPS,以及咱們已知的每一個免費軟件打印機驅動程序以及已知使用這些驅動程序的每一個打印機的直接打印。

https://en.opensuse.org/Concepts_printing
https://en.opensuse.org/SDB:CUPS_in_a_Nutshell

6.10 打印爲PDF

跨平臺的辦公軟件LibreOffice自帶PDF輸出,因此大部分需有直接在這裏就能實現了。如下是CUPS的cups-pdf的軟件包,能夠直接輸出爲PDF文件。https://wiki.archlinux.org/index.php/CUPSIf you intend to "print" into a PDF document, also install the cups-pdf package. By default, pdf files are stored in /var/spool/cups-pdf/username/. The location can be changed in /etc/cups/cups-pdf.conf.$ sudo pacman -S cups-pdfhttp://distro.ibiblio.org/smeserver/contribs/rvandenaker/testing/smeserver-cups/documentation/howtos/cups-pdf-printer.html

相關文章
相關標籤/搜索