廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 8472 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
pigpig5442
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x13
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
文章表情[UNIX] Unix 列印說明
[Chapter 6. 列印]

Table of Contents
6.1. 印表機常駐程式
6.2. 設定 /etc/printcap
6.3. 設定 Ghostscript
6.4. 管理印表機的指令
6.5. 遠端列印
這一章描述簡單的列印設定,使用 HP Deskjet 690C 印表機, 以平行埠為連結介面作為例子。首先,必須設定系統來印純文件, 接著延伸設定並使用 Ghostscript 程式來列印 PostScript 文件。

6.1. 印表機常駐程式
在安裝完成後還不能進行列印,因為 lpd 列印佇列常駐程式還未啟動。要啟動 lpd , 則在 /etc/rc.conf 中必須更改這一行:

lpd=NO



lpd=YES

這個改變在下次開機時便會生效,但可以立刻以手動方式啟動:

# lpd -s

要檢查 lpd 是否啟動,鍵入以下指令:

# ps ax | grep lpd
179 ?? Is 0:00.01 lpd

如果你沒有看到有關 lpd 的項目,則常駐程式沒有啟動。

在設定 /etc/printcap 以前,最好先做 印表機測試,檢查連線是否正常。例如:

# lptest 20 10 > /dev/lpt0

看看輸出的結果,使用相同的指令,但是不要將輸出重導到印表機:

# lptest 20 10

常見的問題是輸出至印表機的資料不會標齊而會有"鋸齒狀"。 這通常是表示是指印表機被設定為,在同時接收到 (carriage return, ASCII 13) 字元和 (line feed, ASCII 10) 字元後,才會在左邊界開始新的一行。 可以修正這個問題:


更改印表機的設定

使用簡單的列印過濾程式(稍後會敘述)

Note: 在先前的例子,lpd 佇列程式 並沒有用到,因為程式的輸出直接導向列印裝置 (/dev/lpt0) 而且沒有被佇列。

6.2. 設定 /etc/printcap
這一段解釋如何簡單的設定來列印純文件。

在 /etc/printcap 中必須有印表機的 記載項目;這個項目包括印表機的 id(印表機的名稱)和印表機的 描述。lp id,是許多程式的預設值。

Example 6-1. /etc/printcap

lp|local printer|HP DeskJet 690C:\
:lp=/dev/lpa0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:\
:sh:pl#66:pw#80:if=/usr/local/libexec/lpfilter:

檔案格式和選項都被詳細地描述在 printcap(5) 裡。請注意 輸入過濾程式已經被指明 (即為 if 選項)而將會避免產生鋸齒狀的問題。

if=/usr/local/libexec/lpfilter

印表機驅動程式和 HP 印表機: Example 6-1 使用 lpa# 裝置做為印表機(詢查模式),而不是 lpd# (中斷模式)。使用中斷模式會和某些印表機產生溝通的問題, 而 HP Deskjet 690C 正好是其中之一:列印會非常慢,列印一頁 PostScript 文件可能要花上一個小時。這個問題可以藉由使用 lpa 驅動程式來解決。我們也可以重新 編譯一個個人化核心使 lpd 成為詢查模式。

printcap 中關於印表機的項目所指明的佇列目錄必須被建立; 這個目錄將被 lpd 常駐程式用來累積 資料以進行列印。

# cd /var/spool/lpd
# mkdir lp
# chown daemon:daemon lp
# chmod 770 lp

唯一遺漏的部份是 lpfilter 輸入過濾程式,我們必須撰寫它。這個過濾程式唯一的工作只是在 資料被送往列印以前,做排除鋸齒狀問題的工作。在此例中,印表機 需要以下的字串做初始化:"ESC &k2G"。

Example 6-2. /usr/local/libexec/lpfilter

#!/bin/sh
# Treat LF as CR+LF
printf "\033&k2G" && cat && exit 0
exit 2

# cd /usr/local/libexec
# chmod 755 lpfilter*

Note: 有另一個過濾程式可以被使用:

:if=/usr/libexec/lpr/lpf:

這個過濾程式比之前的更為複雜。它被用來處理 nroff 的輸出以及底線和附加列印, 展開 tab 字元和轉換 LF 成 CR + LF。這個過濾程式的 原始碼可以在此被找到 /usr/src/usr.sbin/lpr/filters/lpf.c。

再一次執行 lptest 指令,這次使用 lpd 佇列程式。

# lptest 20 10 | lpr -h

使用 lpr 程式列印文件將會利用佇列程式 將資料送往印表機;-h 選項會避免標題頁的 列印(不是必要的,因為 sh 選項已經 出現在 /etc/printcap 中了)。

你可以使用各種不同的工具和方法解決鋸齒狀的問題,例如 C 程式。 使用上述的方法是最簡單的。

6.3. 設定 Ghostscript
基本的列印已經可以運作了,我們現在要加入列印 PostScript 檔案 的功能。此例中的印表機並不支援 PostScript;我們必須使用程式來 轉換 PostScript 文件成一連串的命令使印表機能了解。在 package 集合中的 Ghostscript 程式可以達成 這個目的(請看 Chapter 8)。這一段解釋如何設定 Ghostscript 使 HP Deskjet 690C 能 列印 PostScript 檔案。

在 /etc/printcap 中為印表機建立第二 個 id:新的 id 將使用不同的輸入過濾程式,將會呼叫 Ghostscript 來執行 PostScript 文件的列印。因此,純文件將會使用 lp 印表機而 PostScript 文件則使用 ps 印表機:兩者都使用相同的實體印表機, 但卻有不同的列印過濾程式。

可以使用不同的設定來達到相同的結果。例如,在設定項目中只使用 一個過濾程式:過濾程式能夠自動地決定所要列印文件的格式並使用 適當的列印程式。這個方法較為簡單但卻導致一個較為複雜的過濾程 式;或許你可以考慮從 package 集合安裝 magicfilter:它會自動地完成這個結 果並做許多其他的工作。

新的 /etc/printcap 看起來像這樣:

Example 6-3. /etc/printcap

lp|local printer|HP DeskJet 690C:\
:lp=/dev/lpa0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:\
:sh:pl#66:pw#80:if=/usr/local/libexec/lpfilter:

ps|Ghostscript driver:\
:lp=/dev/lpa0:sd=/var/spool/lpd/ps:lf=/var/log/lpd-errs:\
:mx#0:sh:if=/usr/local/libexec/lpfilter-ps:

對列印 PostScript 檔案而言,mx#0 是非常重要 的選項,因為它排除了輸入檔案大小的限制;PostScript 文件可以 非常大。if 選項指向新的過濾程式。也有一個新 的佇列目錄。

最後的步驟是建立新的佇列目錄和過濾程式。

# cd /var/spool/lpd
# mkdir ps
# chown daemon:daemon ps
# chmod 770 ps

處理 PostScript 輸出的過濾程式比純文件的較為複雜:要列印的檔案 必須經過直譯器,也就是利用印表機的控制語言,傳送一連串的命令給 印表機。我們可以利用 NetBSD 作業系統和一些功能強大的而免費的 package,使得廉價的彩色印表機能夠接受 PostScript 格式的輸出。 設定 Ghostscript 所使用的選項在 Ghostscript 文件中有詳細的敘述:cdj550 是 HP 印表機的驅動程式。

Example 6-4. /usr/local/libexec/lpfilter-ps

#!/bin/sh
# Treat LF as CR+LF
printf "\033&k2G" || exit 2
# Print the postscript file
/usr/pkg/bin/gs -dSAFER -dBATCH -dQUIET -dNOPAUSE -q -sDEVICE=cdj550 \
-sOutputFile=- -sPAPERSIZE=a4 - && exit 0
exit 2

摘要:在系統上要建立兩個不同的印表機名稱,指向相同的實體印表機 但使用不同的選項,不同的過濾程式和不同的佇列目錄。純文件和 PostScript 文件都可以被列印。要列印 PostScript 文件則 Ghostscript package 必須安裝在系統上。

6.4. 管理印表機的指令
這一段列出一些有用的 BSD 的列印和管理列印工作的指令。除了 已經提到的 lpr 和 lpd 以外,我們有:


lpq
檢查列印佇列。

lprm
刪除列印佇列中的工作。

lpc
檢查列印系統,增加或取消印表機及印表機的功能。

6.5. 遠端列印
我們也可以設定列印系統來使用連接在遠端主機上的印表機。舉例 說明,你在 wotan 主機上工作而你想要使 用連接在 loge 主機上的印表機。 /etc/printcap 是在特別情況 Example 6-3 中的一個設定檔。 在這個特殊情況中,在 wotan 上也可以 列印 Ghostscript 文件。

第一步是使這個特殊的主機能夠列印從 wotan 主機上所提交的工作。在特殊主機的 /etc/hosts.lpd 中,加入一行 wotan 主機的名稱。這個檔案的格式非常簡單: 每一行都包含一個能夠使用的主機。

接著,必須設定 wotan 上的 /etc/printcap 為了使工作能傳送到特殊主機。例如:

lp|line printer on loge:\
:lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:\
:rm=loge:rp=lp

ps|Ghostscript driver on loge:\
:lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:\
:mx#0:\
:rm=loge:rp=ps

There are four main differences between this configuration and the one of Example 6-3. 在這個設定和 Example 6-3 中的那一個有四個 主要的不同點。


"lp" 定義是空白的。

"rm" 設定項目定義了印表機所連接的主機的名稱。

"rp" 設定項目定義了連接到遠端主機的印表機的名稱。

指明輸入過濾程式是必要的,因為在特殊主機上的定義將會被使用。

現在在 wotan 上執行 "lp" 和 "ps",所產生 的列印工作將被自動地傳送到印表機所連接的主機上。



獻花 x0 回到頂端 [樓 主] From:台灣中華電信 | Posted:2005-07-18 23:07 |
graceman
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x4
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

蠻詳細的, thanks for sharing


獻花 x0 回到頂端 [1 樓] From:台灣中華電信 | Posted:2005-08-25 00:06 |
mnbmnb5266
個人文章 個人相簿 個人日記 個人地圖
小有名氣
級別: 小有名氣 該用戶目前不上站
推文 x5 鮮花 x46
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

感謝您的說明,又學到不少啊,


我的收藏
https://pan.baidu.com/s/1QUJ9lr_VzxXKRJAlBJgUQA
提取码:am2c
獻花 x0 回到頂端 [2 樓] From:加拿大Rogers | Posted:2010-08-26 23:22 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.138179 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言