使用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 : Signature

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 打印服務器。

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/printcap

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:

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>

2.2 SPOOL假脫機

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

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

Local Printers本地連接:

  • 並行打印機和 USB 打印機

Network Printers網絡鏈接:

  • 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/CUPS
If 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-pdf
http://distro.ibiblio.org/smeserver/contribs/rvandenaker/testing/smeserver-cups/documentation/howtos/cups-pdf-printer.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM