CUPS學習一 CUPS設計介紹。

2021-08-13 15:23:44 字數 4382 閱讀 7317

最近公司需要做乙個基於linux列印服務cups(common unix printer system)來實現列印資料的過濾。在這裡就不詳細介紹什麼是cups了,部落格裡有一大堆關於cpus的說法和配置。但是之前對linux列印業務流程和基本功能實現沒有過了解,其他人也沒有接觸過這些東西,沒辦法只能一切從零開始。最開始的時候也時找網上找部落格找了很久感覺內容都太過相識,相關的資料太少,慢慢了摸索了兩天發現基本上都沒有基於cups的開發,基本上都是直接使用cups原始提供的功能,沒有基於原始碼的開發。說了這麼多廢話那麼下面就開始本文的主要內容:cups設計說明的介紹。

多數列印系統一樣,cups是圍繞**列印排程過程設計的,它分派列印作業,處理管理命令,向本地和遠端程式提供印表機狀態資訊,並根據需要通知使用者。圖1

顯示了cups的基本組織。

排程程式是乙個http / 1.1和ipp / 2.1伺服器應用程式,用於管理系統上的http和ipp請求,印表機,類,作業,訂閱和通知。

http用於正常的web瀏覽器服務以及通過具有

內容型別的

http post請求傳遞的ipp操作訊息

。排程程式使用基於公共閘道器介面(「cgi」)的一系列幫助應用程式來提供動態web介面,並且可以配置為為web介面執行其他站點特定的程式或指令碼。

排程程式設計為傳統的單執行緒伺服器程序,執行外部程序來首席執行官期操作,如列印,通知,裝置/驅動程式列舉和遠端印表機監視。

外部程序通常作為非特權帳戶(「lp」)執行,並且在某些平台上還有額外的限制,限制了程序允許執行的操作。

同時支援的客戶端和列印作業的最大數量主要受可用伺服器記憶體,檔案描述符和cpu的限制 - 排程程式本身沒有強制限制。

排程程式使用多個配置檔案來儲存伺服器設定(cupsd.conf),可用類(classes.conf),可用印表機(printers.conf),當前通知訂閱(subscriptions.conf)以及支援的檔案型別和過濾器(mime .types,mime.convs)。此外,postscript printer description(「ppd」)檔案或介面指令碼與每台印表機關聯,使用ppd檔案和當前作業的快取檔案,以優化排程程式的啟動速度和可用性。

排程程式儲存通常儲存在

/ var / log / cups

目錄中的

三種日誌檔案

。the access_log檔案列出每個http和ipp請求由所述排程程式進行處理。the error_log 包含排程程式的一些資訊可以幫助應用程式用於跟蹤問題。the page_log檔案列出被列印出來每一頁,允許簡單的列印計數。

cups提供berkeley ipc(8),ipq(1),ipr(1)和iprm(1)命令。一般而言,它們的功能與原來的伯克利命令相同,但有以下幾點例外:

lpc命令目前僅支援「狀態」子命令。

所述lpr命令不支援的格式修飾符選項「1」(troff字型集1), 「2」(troff字型集2), 「3」(troff字型集3), 「4」(troff字型集4), 「c」(cifplot),「d」(dvi),「f」(fortran),「g」(gnu標繪),「i」(縮排),「n」(ditroff) ,「t」(troff)或「w」(寬度),因為它們不對映到基於ipp mime**型別的文件格式。

所有的命令都可能要求輸入密碼。

system v列印假離線程式需要root許可權才能執行管理任務,而cups允許更靈活的配置。

所述的lpadmin命令不實現的solaris 「-a」(警報), 「-f」(故障恢復) 「-m」(安裝形式/車輪), 「-p」(紙張列表), 「-s」(列印輪子),「-t」(型別列表),「-u」(撥號器資訊),「-w」(等待),「-f」(**名稱),「-l」(內容型別列表), 「-s」(遠端印表機)或「-t」(托盤數量)選項。

cups提供cupsaccept(8) ,cupsaddsmb(8) ,cupsdisable(8) ,cupsenable(8) ,cupsreject(8) ,cupstestppd(1) ,lpinfo(8) ,和(1)lppasswd命令。the cupsaccept,

cupsdisable,cupsenable和cupsreject命令

為了匹配system v中的accept,disable,enable,和reject命令

已被重新命名,以避免與混亂和衝突

的bash(1)

的內部使

相同名稱的命令。

lpd客戶端支援通過cups-lpd(8)

程式提供。

接收到的lpd請求通過本地

inetd(8)

,launchd(8)

或xinetd(8)

程序在tcp埠515上被接受,

並被**給

cups-lpd

程式以轉換成相應的ipp請求。

the cups_lpd程式符合,在大多數情況下,以rfc 1179:行式印表機後台程式協議,但不會強制執行該檔案中指定的特權源埠限制。

另外,當由相應的超級守護程式呼叫

cups-lpd

程式時,

通常通過命令列選項覆蓋標題頁面和輸出格式選項。

web介面由五個cgi程式支援。表1

描述了每個程式的目的。

表1:cgi程式

提供了從排程程式傳送非同步事件通知的方法。

通知程式通過命令列上的收件人資訊和標準輸入中的事件資料執行。

例如:

cups_serverbin/notifier/foo recipient user-data
cups包括兩個通知程式:

mailto

提供基於smtp的電子郵件通知和

rss以提供來自排程程式的真正簡單聯合(「rss」)通知。

其他通知程式可以根據需要安裝在

通知程式

目錄中以支援其他方法。

過濾器(filter(7)

)將作業檔案轉換為可列印的格式。

根據需要執行多個過濾器,將作業檔案格式轉換為可列印的格式。

如果提供檔名,過濾器程式將從標準輸入或檔案讀取。

所有過濾器必須支援一組常用選項,包括印表機名稱,作業id,使用者名稱,職位名稱,副本數量和作業選項。

所有輸出都傳送到標準輸出。

cups提供用於列印文字,postscript,pdf,hp-gl / 2和許多態別影象檔案的過濾器。

cups還為hp-pcl,esc / p和多種型別的標籤印表機提供印表機驅動程式過濾器。

可以通過mime.convs和ppd檔案向cups註冊其他過濾器。

埠監視器處理印表機裝置和通道特定的資料格式。埠監視器使用與過濾器相同的介面(介面)。

cups包括兩個埠監視器:

bcp埠監視器

支援postscript二進位制通訊協議(「bcp」)和

tbcp埠監視器

支援postscript標記的二進位制通訊協議(「tbcp」)。

其他埠監視器可以在ppd檔案中註冊。

後端(backend(7)

)將列印資料傳送到印表機,並根據需要列舉可用的印表機/裝置。

後端使用與過濾器相同的介面(介面)。

可以根據需要新增其他後端,而無需其他配置。

cups利用幾個通用庫來提供列印服務。

與cups的其餘部分不同,這些庫是按照gnu lgpl的條款提供的,所以它們可以被非gpl應用程式使用。

cups庫包含所有核心的http和ipp通訊**以及用於排列列印作業,獲取印表機資訊,通過http和ipp訪問資源以及操作ppd檔案的便利功能。

排程程式和所有的命令,過濾器和後端都使用這個庫。

cups cgi庫提供了所有的web介面支援功能。

它被cgi程式用來提供cups網頁介面。

cups驅動程式庫提供對cups示例印表機驅動程式使用的抖動,顏色轉換和輔助函式的訪問。

cups影象庫提供管理大影象,執行色彩空間轉換和色彩管理,縮放影象列印以及管理柵格頁面流的功能。

它由cups影象檔案過濾器,postscript rip和所有光柵印表機驅動程式使用。

cups mime庫提供了檔案型別轉換功能。

由scheduler和cupsfilter(8)

命令用來自動輸入列印檔案並將其轉換為可列印的格式。

cups ppd編譯器庫提供對驅動程式資訊檔案的訪問,由ppd編譯器工具以及cups-driverd(8)

輔助程式使用,以生成用於本地化的ppd檔案和訊息目錄。

通過以上可以對cups有乙個簡單的概念,接下來通過要實現的功能去修改cups相應模組。

設計模式學習 介紹

建立型結構型 行為型範圍類fa ctory method 工廠方法 adapter 類 介面卡 interpreter 直譯器 abstract factory 抽象工廠 adapter 物件 介面卡 template method 模板方法 builder 生成器 bridge 橋接 chain ...

一 設計模式的介紹

軟體設計模式 design pattern 又稱設計模式,是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性 程式的重用性。編寫軟體過程中,程式設計師會面臨很多問題,特別是當軟體專案特別大的時候,比如耦合性,內聚以及可維護,可...

OpenCV學習(一) 入門介紹

我採用的平台是vs2010和opencv2.4.10。2 準備工作 基本配置方法 和 你可以參照上面提供的 也可以按照下面本人更為詳細的步驟。第一步 配置使用者變數和系統變數 計算機 屬性 高階系統設定 高階 環境變數 在使用者變數新建 opencv 和path opencv e opencv bu...