最近公司需要做乙個基於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-datacups包括兩個通知程式:
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...