疑難排解

下列章節涵蓋印表機硬體和軟體最常遭遇的問題,以及解決或避免這些問題的方式。涵蓋的主題包含 GDI 印表機、PPD 檔案和連接埠組態,並討論了一般網路印表機問題、列印瑕疵、佇列處理。

沒有標準印表機語言模式支援的印表機

這些印表機不支援任何的一般印表機語言,且只有特殊的專屬控制序列才能處理。因此它們僅可在製造廠商針對其開發驅動程式的作業系統版本上使用。GDI 是 Microsoft* 為繪圖設備所開發的程式設計介面。製造廠商通常只提供 Windows 適用的驅動程式,而因為 Windows 驅動程式使用 GDI 介面,所以這些印表機也稱為 GDI 印表機。實際問題不在於程式設計介面,而是這些印表機僅可使用對應印表機型號的專用印表機語言處理。

部分 GDI 印表機可切換到 GDI 模式或標準印表機語言來操作。若有可能,請參閱印表機的手冊。某些型號需要特殊的 Windows 軟體來進行切換 (請注意,從 Windows 列印時,Windows 印表機驅動程式可能會一直將印表機切回 GDI 模式)。對於其他 GDI 印表機,則可以使用標準印表機語言的延伸模組。

部分製造廠商提供其 印表機的專用驅動程式。專用印表機驅動程式的壞處在於不保證可與安裝的列印系統搭配使用,且不保證適用於各種硬體平台。相反的,支援標準印表機語言的印表機不需依賴特殊的列印系統版本或特殊硬體平台。

除了不需花費時間嘗試使專用 Linux 驅動程式運作,也不需花費更多成本購買支援的印表機。如此可一次解決所有驅動程式問題、減少安裝與設定特殊驅動程式軟體以及取得列印系統中新開發所需的驅動程式更新的需要。

PostScript 印表機沒有可用的 PPD 檔案

如果 manufacturer-PPDs 套件不包含任何適用於 PostScript 印表機的 PPD 檔案,應該可以使用印表機製造廠商驅動程式光碟中的 PPD 檔案,或從印表機製造廠商的網頁下載適合的 PPD 檔案。

如果 PPD 檔案以壓縮保存檔 (.zip) 或自解壓縮保存檔 (.exe) 形式提供,請以 unzip 解壓縮。首先,檢閱 PPD 檔案的授權條款。然後,請使用 cupstestppd 公用程式來檢查 PPD fi檔案是否符合 「Adobe PostScript Printer Description File Format Specification, version 4.3」 (Adobe PostScript 印表機說明檔案格式規格,版本 4.3)。如果公用程式傳回 「FAIL」,就表示 PPD 檔案非常嚴重,可能造成重大問題。應該要減少 cupstestppd 所報告的問題點。若有需要,請詢問印表機製造廠商以取得適合的 PPD 檔案。

並列埠

最安全的方法是將印表機直接連接到第一並列埠,並在 BIOS 中選取下列並列埠設定值:

  • I/O 位址:378 (十六進位)

  • 中斷:無關

  • 模式:NormalSppOutput Only

  • DMA:停用

如果沒有這些設定值,印表機無法在並列埠上定址,請依照 BIOS 中的設定值,以 0x378 的格式在 /etc/modprobe.conf 中明確輸入 I/O 位址。如果有兩個並列埠,I/O 位址分別設為 378278 (十六進位),請以 0x378,0x278 格式輸入。

如果沒有使用中斷 7,可以使用 範例 23.1 「 /etc/modprobe.conf:第一並列埠的中斷模式 」 中所示的項目啟用。在啟用中斷模式之前,請檢查檔案 /proc/interrupts 以瞭解哪些中斷已經在使用中。只會顯示目前正在使用中的中斷。這可能因為作用中的硬體元件而有變化。其他任何設備都不能使用並列埠的中斷。如果您不確定,請以 irq=none 使用輪詢模式。

範例 23.1. /etc/modprobe.conf:第一並列埠的中斷模式

alias parport_lowlevel parport_pc
options parport_pc io=0x378 irq=7

網路印表機連接方式

查明網路問題

將印表機直接連接到電腦。基於測試因素,請將印表機設為本地印表機。如果可以,問題便與網路相關。

檢查 TCP/IP 網路

TCP/IP 網路和名稱解析必須可作用。

檢查遠端可存取性

依預設,cupsd 僅監聽內部網路介面 (localhost)。檢查 /etc/cups/cupsd.conf 中的 Listen 指示詞是否允許從外部網路存取。

Listen 192.168.2,*:631
檢查防火牆設定

CUPS 伺服器必須處於內部防火牆區域中,或者,如果處於外部區域中,則必須能夠在 UDP 和 TCP 連接埠 631 上傳送與接收資料。

檢查遠端 lpd

使用以下指令來測試是否可在主機上建立到 lpd (連接埠 515) 的 TCP 連接:

netcat -z host 515 && echo ok || echo failed

如果無法建立到 lpd 的連接,可能是 lpd 不在作用中,或是有基本網路問題。

以使用者 root 的身份,使用以下指令來查詢 (可能很長) 遠端 主機佇列 的狀態報告,假使對應的 lpd 在作用中且主機接受查詢:

echo -e "\004queue" \
| netcat -w 2 -p 722 host 515

如果 lpd 沒有回應,它可能不在作用中,或是有基本網路問題。如果 lpd 有回應,回應應該會顯示主機上的佇列為何無法列印。如果您收到像 範例 23.2 「來自 lpd 的錯誤訊息」 中的回應,問題可能是因為遠端 lpd 所造成。

範例 23.2. 來自 lpd 的錯誤訊息

lpd: your host does not have line printer access
lpd: queue does not exist
printer: spooling disabled
printer: printing disabled

檢查遠端 cupsd

根據預設,CUPS 網路伺服器應該每隔三十秒在 UDP 連接埠 631 上廣播其佇列。同時,可使用以下指令來測試網路中是否有 CUPS 網路伺服器。

netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID

如果廣播 CUPS 網路伺服器存在,輸出將如 範例 23.3 「來自 CUPS 網路伺服器的廣播」 中所示。

範例 23.3. 來自 CUPS 網路伺服器的廣播

ipp://192.168.2.202:631/printers/queue

►zseries: 請注意,根據預設 IBM System z 乙太網路設備不會接收廣播。

可使用以下指令來測試是否可建立到主機cupsd (連接埠 631) 的 TCP 連線:

netcat -z host 631 && echo ok || echo failed

如果無法建立與 cupsd 的連接,則表明 cupsd 可能不在作用中或可能有基本的網路問題。假設對應的 cupsd 在作用中,而且主機可以接受查詢,則 lpstat -h host -l -t 會傳回 host 上所有佇列的狀態報告 (可能很大)。

此指令可用來測試主機上的佇列是否可接受由單一換行字元組成的列印工作。應該不會印出任何資料。可能會退出一張空白頁。

echo -en "\r" \
| lp -d queue -h host
網路列印或列印伺服器盒疑難排解

在列印伺服器盒中執行的暫存序列器在執行大量列印工作時,有時會造成問題。因為這是列印伺服器盒中的暫存序列器所造成,您無法解決此問題。處理方式是,透過 TCP 插槽將印表機直接連接到列印伺服器盒,以規避列印伺服器盒中的暫存序列器。請參閱第 23.5 節「網路印表機」

利用此方法,可減少列印伺服器盒在不同資料格式之間的轉換問題 (TCP/IP 網路和本地印表機連接)。若要使用此方法,您必須知道列印伺服器盒上的TCP 連接埠。如果印表機連接到列印伺服器盒且電源開啟,此 TCP 連接埠通常可在列印伺服器盒電源開啟一段時間之後,以 nmap 套件的 nmap 公用程式決定。例如,nmap IP-address 會傳送列印伺服器盒的以下輸出:

Port       State       Service
23/tcp     open        telnet
80/tcp     open        http
515/tcp    open        printer
631/tcp    open        cups
9100/tcp   open        jetdirect

此輸出表示連接到列印伺服器盒的印表機可透過連接埠 9100 上的 TCP 插槽定址。根據預設,nmap 僅會檢查幾個 /usr/share/nmap/nmap-services 中所列出一般熟知的連接埠。若要檢查所有可能的連接埠,請使用指令 nmap -p from_port-to_port IP-address。這可能會花費一些時間。如需詳細資訊,請參閱 nmap 的線上文件。

輸入以下指令

echo -en "\rHello\r\f" | netcat -w 1 IP-address port
cat file | netcat -w 1 IP-address port

將字元字串或檔案直接傳送到對應連接埠以測試印表機是否可在此連接埠上定址。

列印成品損毀而無錯誤訊息

對列印系統而言,在 CUPS 後端完成資料至接收者 (印表機) 的資料傳輸時,列印工作便完成。如果接收者的進一步處理失敗 (例如,如果印表機無法列印印表機特定資料),列印系統並不知道。如果印表機無法列印印表機特定資料,請選取更適用於印表機的不同 PPD 檔案。

停用佇列

如果到接收者的資料傳輸在數次嘗試之後完全失敗,CUPS 後端 (如 USBsocket) 會向列印系統報告錯誤 (向 cupsd)。後端會決定在報告資料傳輸失敗之前,是否要繼續嘗試以及要嘗試幾次是合理的。因為進一步的嘗試可能徒勞無功,cupsd 會停用對應佇列的列印。除去問題的起因之後,系統管理者必須以指令 /usr/bin/enable 重新啟動列印。

CUPS 瀏覽:刪除列印工作

如果 CUPS 網路伺服器透過瀏覽向用戶端主機廣播它的佇列,而且在用戶端主機上有適合的本地 cupsd 在作用中,用戶端 cupsd 會從應用程式接收列印工作,並將它們轉送給伺服器上的 cupsd。當 cupsd 接收列印工作時,會被指定新的工作號碼。因此,用戶端主機上的工作號碼和伺服器上的工作號碼不同。因為列印工作通常會立刻轉送,所以無法以用戶端主機上的工作號碼來刪除,因為用戶端 cupsd 一旦將列印工作轉送給伺服器 cupsd,便認為列印工作已完成。

若要刪除伺服器上的列印工作,假使伺服器尚未完成列印工作 (即尚未將工作完全傳送至印表機),請使用 lpstat -h cups.example.com -o 這類指令來決定伺服器上的工作編號。使用此工作號碼,伺服器上的列印工作便可刪除:

cancel -h cups.example.com queue-jobnnumber

損毀的列印工作與資料傳輸錯誤

如果您在列印程序中將印表機電源關閉再打開,或是關機再重新啟動電腦,列印工作仍然在佇列中,而且會繼續列印。必須以 cancel 將損毀的列印工作從佇列中移除。

如果列印工作損毀,或是主機和印表機之間的通訊發生問題,印表機會印出數頁含有不明字元的紙張,因為它無法正確地處理資料。若要處理這個問題,請遵循下列步驟:

  1. 若要停止列印,請從噴墨印表機取出所有紙張,或是打開雷射印表機的紙匣。高品質的印表機會有按鈕可取消目前的列印成品。

  2. 列印工作可能仍在佇列中,因為只有將工作完全傳送到印表機之後,才會移除。使用 lpstat -olpstat -h cups.example.com -o 檢查目前列印中的佇列。使用 cancel queue-jobnumbercancel -h cups.example.com queue-jobnumber 刪除列印工作。

  3. 即使列印工作已從佇列刪除,部份資料可能仍會傳送到印表機。請檢查對應佇列的 CUPS 後端程序是否仍在執行中,並將它終止。例如,對於連接到並列埠的印表機,可使用指令 fuser -k /dev/lp0 來終止所有仍在存取印表機的程序 (更精確的說,就是並列埠)。

  4. 將印表機關閉一段時間以完全重設印表機。然後裝入紙張並開啟印表機電源。

除錯 CUPS 列印系統

使用以下標準程序以找出 CUPS 列印系統中的問題:

  1. 設定 /etc/cups/cupsd.conf 中的 LogLevel debug

  2. 停止 cupsd

  3. 移除 /var/log/cups/error_log* 以避免必須搜尋很大的記錄檔。

  4. 啟動 cupsd

  5. 重覆造成問題的動作。

  6. 檢查 /var/log/cups/error_log* 中的訊息以辨識問題的起因。