這一節將告訴你如果使用你在 FreeBSD 下設定的印表機。這裡有一份使用者等級命令的概述。
列印工作
檢查印表機佇列
將工作從印表機佇列中移除
也有系統維護使用的命令, lpc(8),用來控制印表機及其佇列。在 管理印表機 這一節裡有更詳細的說明。
lpr(1),lprm(1) 和 lpq(1) 這三個命令都接受 -P printer-name 這個指定在 /etc/printcap 檔裡設定的印表機/佇列的參數。允許你對不同的印表機做要求、移除, 以及檢查工作。如果你沒有使用 -P 參數,那麼這些命令將使用 PRINTER 環境變數所指定的印表機。若你也沒有 PRINTER 環境變數, 那麼這些命令則會對別名為 lp 的印表機動作。
此後,預設印表機這個指的就是以 PRINTER 環境變數設定的印表機或是當 lp 環境變數不存在時,別名為 lp 的印表機。
若要列印檔案,輸入:
% lpr filename ...
這將把所有列出的檔案以預設印表機列印。如果你沒有指定任何檔案,那麼 lpr(1) 將會從標準輸入讀入資料。下面這個例子將會印出一些重要的 系統檔:
% lpr /etc/host.conf /etc/hosts.equiv
若要指定以特定的印表機輸出,輸入:
% lpr -P printer-name filename ...
下面這個例子會將目前目錄下的檔案列表從名為 rattan 印表機輸出:
% ls -l | lpr -P rattan
因為 lpr(1) 命令之後沒有指定任何一個檔案, lpr 將會從標準輸入讀入資料以印出,即由 ls -l 命令所產生的輸出。
lpr(1) 命令有許多參數如控制輸出格式、套用檔案轉換、 一次印出多份,等等。請參見 列印參數 這一節裡有更詳細的說明。
當你使用 lpr(1) 列印時,一起送到 LPD spooling 系統的資料稱為一個 ``列印工作''。 每一台印表機都有一個列印工作佇例, 而你的列印工作和其他的列印工作一樣在佇列裡等待列印。 印表機會將先列印先送達的工作。
要顯示預設印表機的佇例,輸入 lpq(1) 即可。 若要指定印表機,請指定 -P 參數。例如
% lpq -P bamboo這個命令會顯示叫做 bamboo 的印表機佇列。這裡有一份 lpq 命令的輸出範例:
bamboo is ready and printing Rank Owner Job Files Total Size active kelly 9 /etc/host.conf, /etc/hosts.equiv 88 bytes 2nd kelly 10 (standard input) 1635 bytes 3rd mary 11 ... 78519 bytes
上面顯示一共有三個工作在 bamboo 的佇列裡。 第一個工作由使用者 kelly 送出,``工作代碼''為 9。 每一個工作都會有個唯一的工作代碼。通常你可以忽略工作代碼, 但是如果你要取消某個工作時,你就會需用知道工作代碼。詳情請參見 移除印列工作這一節。
工作代碼 9 裡包含了兩個檔案。用 lpr(1) 送多個檔案將會被視為同一個工作。這是目前正在處理的工作(注意 ``Rank'' 欄標示的 active), 即印表機現在應該就在列印這個工作。第二個工作的資料是用 lpr(1) 從標準輸入接收資料的。而第三個工作是由使用者 mary 送出的。這是一個較大的工作。而她要列印的檔案因為太長而放不下,所以 lpq(1) 命令只顯示三個點。
lpq(1) 最前面的輸出通常可以看出印表機現在在做什麼(至少是 LPD 覺得印表機現在應該是在做什麼)。
lpq(1) 命令可以使用 -l 參數以得到更詳細的 列表。這裡有一個 lpq -l 的輸出範例:
waiting for bamboo to become ready (offline ?) kelly: 1st [job 009rose] /etc/host.conf 73 bytes /etc/hosts.equiv 15 bytes kelly: 2nd [job 010rose] (standard input) 1635 bytes mary: 3rd [job 011rose] /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes
如果你改變心意不想列印你的工作了,你可以用 lprm(1) 這個命令把他們從列印佇列串移除。通常你也可以用 lprm(1) 把一個正在處理的工作移除,不過可能還是會印出部份或是全部的文件。
要從預設印表機裡移除工作,首先,用 lpq(1) 找出工作代碼, 然後輸入:
% lprm job-number
如果要從指定的印表機移除工作,那麼用 -P 參數。 下列的命令從印表機 bamboo 的佇列中移除工作代碼為 10 的工作:
% lprm -P bamboo 10
lprm(1) 命令有一些常用的用法:
將(預設印表機)裡所有屬於你的工作都移除。
將(預設印表機)裡所有屬於使用者 user 的工作皆移除。 只有超級使用者可以移除其他人的工作,你只能移除你自己的工作。
若不指定工作代碼、使用者名稱或是 - ,lprm(1) 將移除目前預設印表機正在處理的工作, 但前提是這個工作必需是屬於你的。 超級使用者可以移除任何目前正在處理的工作。
若使用 -P 參數配合上述的常用用法, 則上述的動作將對指定的印表機動作而不是對預設印表機。 下列的命令將會移除目前使用者在印表機 rattan 佇列中的所有工作:
% lprm -P rattan -
Note: 如果你使用的是網路印表機,lprm(1) 將只允許你從送出工作的機器移除該工作。 下面這些命令可以說明這個概念:
% lpr -P rattan myfile % rlogin orchid % lpq -P rattan Rank Owner Job Files Total Size active seeyan 12 ... 49123 bytes 2nd kelly 13 myfile 12 bytes % lprm -P rattan 13 rose: Permission denied % logout % lprm -P rattan 13 dfA013rose dequeued cfA013rose dequeued
lpr(1) 命令提供控制格式輸出、轉換圖形及其他檔案格式、 一次印出多份、工作處理方式等參數。這一節將一一介紹。
下列的 lpr(1) 命令控制檔案輸出的格式。 如果你的列印工作裡沒有純文字或是你希望純文字透過 pr(1) 處理後以特定的格式輸出時,你可以使用這些參數。
舉例來說,下面的命令從叫做 bamboo 的印表機將 DVI 檔 (由 TeX 排版系統產生) fish-report.dvi 印出:
% lpr -P bamboo -d fish-report.dvi
這些參數將套用於這個工作裡的每個檔案,所以你不能把 DVI 和 ditroff 檔案在同一個工作裡一起處理, 而要分兩次工作用不同的轉換參數。
Note: 這些參數除了 -p 和 -T 需要為指定的印表機安裝轉換的過濾程式外,其他的都不用。 舉例來說,參數 -d 需要安裝 DVI 轉換過濾程式。 轉換用的過濾程式 這一節有較詳細的說明。
列印 cifplot 檔案。
列印 DVI 檔案。
列印 FORTRAN 文字檔。
列印 plot 資料。
將輸出縮排 number 個字元。 如果你省略 number,則縮排 8 個字元。 這個參數只有在某些轉換用的過濾程式上有效。
Note: 請不要在 -i 和數字之間加上空白。
原封不動的印出文字資料,包括控制字元。
列印 ditroff (device independent troff) 資料。
在列印之前以 pr(1) 格式化輸出。請參見 pr(1) 以取得更的資訊。
以 title 取代 pr(1) header 中的檔名。這個參數只有在配合 -p 參數使用時才有效。
列印 troff 資料。
列印 raster 資料。
下面是一個以預設印表機列印格式化過的 ls(1) manual page 的範例:
% zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t
zcat(1) 命令將
ls(1) 原始資料解壓縮並傳送給 troff(1) 命令將該資料格式化後以 GNU troff 格式輸出給 lpr(1) 送給 LPD spooler 處理。因為我們在使用
lpr(1) 命令時使用了 -t 參數,所以 spooler 在印列時會把 GNU troff 轉換成預設印表機所能了解的格式。
下列的參數將會讓 lpr(1) 告訴 LPD 以特別的方式處理工作:
將同一工作裡的每個檔案都印出 copies 份。 系統管理者可以將這個參數關閉, 以減低印表機的負擔並鼓勵使用影印機。請參見 限制列印多份 這一節的說明。
這個範例將會從預設印表機印出三份 parser.c,然後印出三份 parser.h:
% lpr -#3 parser.c parser.h
完成列印工作後,寄信通知使用者。若使用這個參數, 當列印工作完成後,LPD 系統將會寄信給你。 在這封信中將會告訴你你的工作是否成功的印出或是有錯誤以及 (通常會)告訴你錯誤的原因。
不要將要列印的檔案拷貝到 spooling 目錄,而只要以 symbolic links 的方式取代。
如果你要列印大的案,你可考慮用這個參數。這可以節省你 spooling 目錄的空間(否則 spooling 目錄所在的檔案系統可能會空間不足)。同時他也可以省下 LPD 將檔案拷貝到 spooling 目錄所需的時間。
這麼做有一個缺點就是當列印還沒結束時, 你不能修改或刪除列印中的檔案,因為 LPD 在列印時還會用到原始的檔案。
Note: 如果你是用網路印表機列印,那麼 LPD 還是會把你的檔案拷貝到遠端的機器,所以參數 -s 只有在本機上列印時才有用。
當你的檔案已經拷貝到 spooling 目錄時,或是用 -s 參數且列印完成時,就將原本的檔案移除。 請小心使用這個參數!
有一些參數是設定 lpr(1) 列印在 header pages 上的文字。 如果列印 header pages 的話,那麼這些參數就沒有作用了。請參見 Header Pages 這一節以獲知如何設定 header pages。
將 header page 上的機器名稱以 text 取代。機器名稱通常是印出送出工作的機器名稱。
將 header 上的工作名稱以 text 取代。工作名稱通常是一份列印工作裡的第一個檔案名稱, 如果你是從標準輸入輸入列印資料的話,那麼將會是 stdin。
不要列印 header page。
Note: 在某些機器上,由於 header pages 產生的方式不同, 這個選項可能會無效。請參見Header Pages這一節裡更詳細的說明。
做為印表機管理員,你必需安裝、設定以及測試他們。你可以用 lpc(8) 這個命令:
讓印表機開始工作或停止工作。
開啟或關閉他們的佇例。
重新安排佇列裡工作的順序。
我們得先知道的一個觀念是:如果一個印表機已經 停止工作了,他將不會將佇列裡的任何東西印出。 使用者仍然可以將工作送過來,但是這些工作將會在佇列裡等待直到印表機 開始工作或是佇例被清空了。
如果佇列被關閉了,那麼沒有使用者(除了 root 之外)可以將工作送給印表機。只有已經開啟 佇列的印表機可以接受其他人將工作送過來。 一個印表機可以為一個已經關閉的佇列開始工作。 在這個情況下,原本存在佇列中的工作將會一一的被列印直到沒有工作為止。
通常,擁有 root 權限的使用者才可以用 lpc(8) 下命令。 一般的使用者只能用 lpc(8) 命令來查詢印表機工作以及重新啟動當掉的印表機。
以下是一份 lpc(8) 的命令列表。大部份的命令都需要指定 printer-name以指定要對哪一台印表機下命令。 printer-name 也可以用 all 表示所有列在 /etc/printcap 裡的印表機。
取消目前的工作同時也停止印表機工作。如果佇列為被關閉, 使用者仍然可以送工作給印表機。
將印表機 spooling 目錄中的舊檔案移除。有時候 LPD 可能沒有把列印完的工作自 spooling 目錄中移除, 尤其是當列印的工作發生錯誤時或是有其他命令將其中止時。 這個命令將會找出這些不該存在於 spooling 目錄中的檔案並將他們移除。
關閉佇列以停止接收新工作。如果印表機並未停止工作, 那麼佇列中剩餘的工作將會繼續列印直到佇列中沒有工作為止。 關閉佇列後,root 仍然可以繼續送工作給印表機。
這個命令在你測試一台新印表機或是新的過濾程式程式時特別有用: 你可以將佇列關起來然後以 root 送測試列印的工作。 其他使用者則無法將工作送過來,除非你測試完畢後將佇列以 enable 命令開啟。
這個命令等於是disable 後再接著 stop 命令。其中 message 是當有使用者以 lpq(1) 檢查印表機佇列或是以 lpc status 命令檢查印表機狀態時所顯示的訊息。
將印表機佇列開啟。如此使用者就可以將工作送給印表機, 但是只有在印表機已經開始工作後,佇列裡的工作才會被印出來。
將 command-name 命令的說明印出。 如果沒有指定 command-name, 那麼將會印出所有可用的命令。
動新啟動印表機。如果因為某些情況使得 LPD 當掉了, 一般的使用者可以用這個命令將印表機重新開始工作。 但是他們無法用這個命令讓由 stop 或 down 命令所停止的印表機開始工作。 restart 命令等於 abort 再接著 start 命令。
讓印表機開始工作。印表機將會將佇列裡的工作印出。
停止印表機工作。 印表機將會先完成目前的工作然後停止印佇列中的任何工作。 印表機停止工作後,使用者仍然可以把工作送給一個未關閉的佇列中。
將印表機 printer-name 佇列中工作代號為 job 或是屬於使用者 username 的工作移到佇列的最前端。在這個命令裡,你不可以將 all 填在 printer-name 指定所有的印表機。
這是和 down 命令相對的指命。等於是 start 後再接著 enable 命令。
lpc(8) 能以參數的方式接受上述的命令。如果你不輸入任何命令, lpc(8) 將會進入交談模試,在這裡你可以一直輸入命令直到你以 exit命令、quit 命令或是輸入檔案結尾字元為止。