歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux打印系統CUPS原理分析

Linux打印系統CUPS原理分析

日期:2017/2/28 16:26:17   编辑:Linux教程

一、Linux打印

1.1 Linux打印簡介

首先需要了解的是,打印在Unix世界的演化中總是圍繞著PostScript頁面描述語言展開的。該語言是由Adobe公司開發的,它是一個成熟的、用於描述一個文檔每一頁面內容的程序語言。它是一種與設備無關的打印機語言,即在定義圖像時可以根本不考慮輸出設備的特性(如打印機的分辨率、紙張大小等),而且它對文本和圖形實行同樣的處理過程,這就給處理字體帶來了極大的靈活性。通過PS驅動程序,各種不同的應用軟件將各自的數據轉換成PostScript格式。

如今很多打印機中都有一個嵌入式的PostScript解釋器,它負責使用PostScript將頁面在打印紙上再現出來。現在,所有桌面Linux應用程序都有一個打印選項,可以生成PostScript數據來打印整頁的文檔。

這種方法和其它面向桌面的操作系統有很大的不同,也正是它讓Unix打印落下了不易使用的名聲。在Windows和Mac OS中有整合得非常好的API供應用程序使用,通常情況下都可以為打印機提供一個接口,以讓應用程序不用關心設備的具備細節。此外,打印API通常也是和圖形API整合在一起,並且可用於在屏幕上顯示。這其中部分功能已經在X11中實現了。

大部分Unix系統是提交任務至隊列中,並且希望它能夠正確地打印出來。但是並沒有一種統一的收集打印機信息或工作狀態的方法,這嚴重影響了那些需要提供打印能力的Linux應用程序。

在Linux中,雖然PostScript是產生打印文檔的事實上的標准,但打印機本身卻並不需要知道PostScript,因為這需要使用到相對比較昂貴的技術。在一般情況下,尤其是在低端打印機中,PostScript數據要被翻譯成打印機本地的頁面描述語言。這是通過使用一個特殊的轉換過濾器來完成的。一般而言,一個過濾器實際上就是一個特殊的程序,它可以處理輸入的數據,並且輸出經過加工的數據。現在,Linux打印系統中使用著各種不同的過濾器:轉換過濾器、I/O過程器(負責將數據傳送至設備)、處理過濾器(轉換文檔數據)。

打印系統的基礎是一個假脫機程序(Spooler)。它可以管理打印任務隊列,而一個隊列通常和一個打印機相關聯,並且用戶提交的任務都是按照先進先出的原則來處理的。當一個打印任務被處理時,任務中的數據在送達打印機前一般都要通過一定數量的過濾器。Unix打印假脫機程序有很多種形式,在此將關注目前在Linux系統中使用廣泛的幾種形式:

(1)BSD LPD打印系統

(2)LPRng打印系統

(3)通用Unix打印系統(CUPS)

1.2 Linux打印原理

在Linux下采用假脫機(spooling)打印方法,當用戶需要打印一個文件時,該文件並不直接送到打印機,而是送到spool目錄下,然後由一個負責打印的後台進程把這些數據送入打印機。

Linux對每台打印機都定義了一個打印緩沖區,打印機守護程序經常掃描打印緩沖區以查看有無要打印的新文件。如果存在,就按先進先出的順序打印緩沖區中的文件。

Linux系統除了可以在本地打印機上打印外,還可以通過網絡打印機遠程打印。

Linux系統上的打印原理如下:

各種類型的文檔經由一個(或一些)轉換程序轉換成用戶正在使用的打印機可以認識的格式,即用各種類型的打印機語言描述的流,系統將這個流直接發送到打印機端口,由打印機對其進行解釋並形成硬拷貝。

目前大多數Linux系統以下面的流程來實現文檔到打印機語言的轉換:

普通文本文件和各種類型的圖形由適當的轉換程序轉換成PostScript文件,有些應用程序將其輸出直接寫成PostScript文件,這些PostScript文件經由一個作為打印機過濾器的應用程序Ghostscript轉換成打印機語言。因此,如果系統的打印系統已經配置成使用Ghostsript作為打印過濾器,應用程序要實現的就是輸出合乎程序要求和語法的PostScript文件。

1.3 Linux打印流程

在打印過程中,通常是應用程序產生輸出並以管道的方式傳送給lpr或者直接應用lpr打印一個文件。lpr與打印機後台服務程序通過網絡進行連接並進行通信,傳送相應的打印數據和打印選項。打印機後台服務程序將在相應的spooler目錄存儲打印信息,在輸出設備可以利用的情況下將打印任務送給打印設備。

普通文本文件和各種類型的圖形由適當的轉換程序轉換成PostScript文件,有些應用程序將其輸出直接寫成PostScript文件,這些PostScript文件經由一個作為打印機過濾器的應用程序Ghostscript轉換成打印機語言。因此,如果系統的打印系統已經配置成使用Ghostsript作為打印過濾器,應用程序要實現的就是輸出合乎程序要求和語法的PostScript文件。 1.3 Linux打印流程

在打印過程中,通常是應用程序產生輸出並以管道的方式傳送給lpr或者直接應用lpr打印一個文件。lpr與打印機後台服務程序通過網絡進行連接並進行通信,傳送相應的打印數據和打印選項。打印機後台服務程序將在相應的spooler目錄存儲打印信息,在輸出設備可以利用的情況下將打印任務送給打印設備。

Copyright © Linux教程網 All Rights Reserved