如何啟動列印機驅動程序?
我熟悉核心模組並聽說過 IPP、PPD、PS、PCL、PDL 列印機驅動程序的概念。我已經讀到 Mac/Windows 上預裝了“通用”列印機驅動程序,因此您不必安裝自定義驅動程序,它使 UX 無縫。
鑑於此,我正在尋找這些通用驅動程序的外觀(假設它是一個核心模組)。沒有找到關於這個主題的任何例子,但找到了這些 repos:
- https://github.com/koenkooi/gutenprint
- https://github.com/OpenPrinting/cups-filters
- https://github.com/watson/ipp-printer
- https://github.com/apple/cups
與這些相關,我在 Gutenprint 中找到了:src/main/print-lexmark.c和src/main/canon-printers.h,它們有這些
cap_t
~table~ 東西,它們似乎具有為各個列印機型號編碼的功能。這似乎有很多工作要做。Gutenprint這裡有大量支持的列印機列表。我的問題分為幾個部分:
- 如果這些列印機規格/功能(如上面的 2 個連結)是反向工程的,或者是從某種規格中獲得的。(有點切題的問題)。
- 其中,在上面列出/編號的 GitHub 儲存庫中的任何一個中,都存在“通用”設備驅動程序,例如 PCL 或 PCD 或 PPD。
- 我應該在其中尋找驅動程序的概念:PPD、PCL、PDL、PS、IPP。聽起來 PPD 是列印機定義的配置格式,而 PS/PCL(可能還有 PDL)是主要的驅動程序規範語言/格式,而 IPP 是一種驅動程序協議,但並未得到廣泛支持。PS 用於高質量照片,而 PCL 用於標准文件列印。這就是為什麼我專門研究 PCL,而不是 PS,但我沒有找到任何“GitHub 上的通用 PCL 驅動程序”之類的東西,並且不確定這是否是我應該尋找的。
- 否則,如果在我提供的內容之外存在任何開源列印機驅動程序,這些驅動程序提供了一個實現範例。
PCL 和 PostScript (PS) 不是驅動程序規範,而是頁面描述語言(PDL):如果您的列印機支持其中任何一種,列印機驅動程序的工作就是將列印作業轉換為 PCL 或 PS。
PCL 和 PS 都可以拍出高質量的照片。但是 PCL 實際上對於大型高解析度點陣圖圖像更有效,尤其是當您的電腦的主處理器比列印機的處理器強大得多時(今天的常見情況)。PostScript 在文本和矢量圖形方面處於最佳狀態:它可以將大部分縮放/渲染過程解除安裝到實際列印機上,這在雷射列印機本身可能具有與其他列印機一樣多的記憶體和處理能力時很有用電腦。對於矢量圖形,PostScript 可以只傳輸繪製圖形所需的命令,然後列印機將使用其完整的原始解析度自行再現圖形。
驅動程序需要考慮列印機的可用功能:例如,如果列印作業的一部分一直到達紙張邊緣,但列印機需要在其無法列印的紙張邊緣處有一定的最小邊距,它需要決定是否縮放整個頁面以適應,將部分作業移動到另一頁或只是切斷不可列印的邊緣。將顏色數據發送到只能產生灰色陰影的列印機只是浪費時間(以及網路頻寬,如果是網路列印機)。PPD(= PostScript 列印機描述)文件提供此列印機型號特定的資訊。
Unix/Linux 列印機驅動程序通常不是核心模組:相反,它們只是正常的使用者空間程序(甚至腳本),將發送到其標準輸入的列印作業轉換為標準輸出上的適當頁面描述語言。在 CUPS 術語中,這稱為過濾器。
如果本地連接的列印機使用非標準 USB 端點結構(某些情況下是“基於主機的列印”)或其他一些特殊協議,則驅動程序可能還包含一個處理特殊通信協議的程序。在 CUPS 術語中,這被稱為“埠監視器”。CUPS 包括一些常見情況的埠監視器,但列印驅動程序可以提供定制的。
print spooler 守護程序(這些天,主要
cups
是列印機設備(可選擇使用為此特定列印機型號定制的埠監視器)。CUPS 具有內置的“通用驅動程序”,通過使用 PPD 文件(PostScript 列印機描述)來處理大多數 PostScript 列印機,以提供特定於列印機的詳細資訊。CUPS 還擴展了 PPD 文件規範,以便 PPD 文件也可以描述非 PostScript 列印機。在這種情況下,PPD 擴展指定 CUPS 應執行的一個或多個額外程序,以將列印作業從 CUPS 已知的格式之一轉換為列印機將接受的任何數據格式。
對於您編號的問題:
1.) PCL 和 PS 等最廣泛使用的頁面描述語言已經發布了規範文件:曾幾何時,當硬體附帶實際的紙質手冊時,規範手冊甚至可能已包含在列印機中。
其他語言和協議,如許多與“基於主機的列印機”一起使用的語言和協議,已經過逆向工程。是的,這是一個巨大的努力。
2.) 在https://github.com/apple/cups/tree/master/filter中,您會找到 CUPS 通用 PostScript 和光柵(= 原始點陣圖數據)驅動程序。還有用於讀取 PPD 文件的程式碼。
3.)請參閱上面我的回答的介紹性文字。
4.) openprinting.org擁有龐大的列印機型號數據庫和針對它們的開源列印驅動程序解決方案。如果特定列印機存在開源驅動程序解決方案,我希望很可能在其中找到它 - 或指向它的連結。