本节包含有关以下主题的逐步说明:
如何解决无输出问题
如何解决错误输出问题
如何取消挂起 lp 命令
如何解决空闲(挂起)打印机问题
如何解决冲突的状态消息
此任务包括以下过程,用于在向打印机提交打印请求而未打印任何内容时尝试进行故障排除:
检查硬件(如何检查打印机硬件)。
检查网络(如何检查打印机网络连接)。
检查 LP 打印服务基本功能(如何检查 LP 打印服务的基本功能)。
检查从打印客户机到打印服务器的打印(如何检查从打印客户机到打印服务器的打印)。
在转到打印客户机/服务器一节之前,请先按所列顺序尝试前三个步骤。但是,如果打印标题页而不打印其他内容,请转到如何解决错误输出下的说明。
检查打印机是否已插电并已打开。
检查电缆是否已连接至打印机端口以及系统或服务器上的端口。
确保电缆正确并且无缺陷。
请参阅制造商文档。如果打印机连接至串行端口,请验证电缆是否支持硬件流量控制。空调制解调器适配器支持此控制。下表显示用于空调制解调器电缆的管脚配置。
主机 |
打印机 |
|
---|---|---|
Mini-Din-8 |
25-Pin D-sub |
25-Pin D-sub |
- |
1 (FG) |
1(FG) |
3(TD) |
2(TD) |
3(RD) |
5(RD) |
3(RD) |
2(TD) |
6(RTS) |
4(RTS) |
5(CTS) |
2(CTS) |
5(CTS) |
4(RTS) |
4(SG) |
7(SG) |
7(SG) |
7(DCD) |
6(DSR)、8(DCD) |
20(DTR) |
1(DTR) |
20(DTR) |
6(DSR)、8(DCD) |
检查针对端口的所有硬件交换机是否设置正确。
请参见打印机文档以了解正确设置。
检查打印机是否可操作。
如果打印机有自检功能,请使用该功能。检查打印机文档,以了解有关打印机自检的信息。
检查计算机和打印机的波特设置是否正确。
如果计算机和打印机的波特设置不同,有时候会不打印任何内容,但更多情况下会获得错误输出。有关说明,请参见如何解决错误输出。
检查打印服务器与打印客户机之间的网络链接是否已正确设置。
print-client# ping print-server print-server is alive print-server# ping print-client print-client not available |
如果消息指出系统仍处于活动状态,则可以访问系统,因此网络正常。该消息还说明,命名服务或本地 /etc/hosts 文件已将您输入的主机(系统)名称转换为 IP 地址;否则,您需要输入 IP 地址。
如果获得 not available 消息,请尝试回答以下问题: 在您的网站中如何设置 NIS 或 NIS+?是否需要采取其他步骤以使打印服务器和打印客户机能够相互通信?如果您的网站未运行 NIS,那么您是否已在每个打印客户机的 /etc/hosts 文件中输入了打印服务器的 IP 地址,并且已在打印服务器的 /etc/hosts 文件中输入了所有打印客户机的 IP 地址?
在要调试远程打印问题的系统上,成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
键入以下命令:
# echo "lpr.debug /var/tmp/lpr.debug" >>/etc/syslog.conf |
lpr.debug 与 /var/tmp/lpr.debug 之间的空白必须是制表符。
创建 lpr.debug 文件。
# touch /var/tmp/lpr.debug |
重新启动 syslog 服务。
# svcadm restart system.log |
以下过程以打印机 luna 为例来检查基本的 LP 打印服务功能。
在打印服务器上,确保 LP 打印服务正在运行。
使用以下方法之一检查 LP 调度程序是否正在运行。
使用 lpstat 命令。
% lpstat -r scheduler is running |
显示一条消息,指示 LP 调度程序正在运行。
使用 svcs 命令。
% svcs application/print/server |
如果调度程序正在运行,则显示以下输出。
STATE STIME FMRI online Oct_24 svc:/application/print/server:default |
如果未运行调度程序,则显示以下输出。
STATE STIME FMRI disabled 14:27:48 svc:/application/print/server:default |
|
如果未运行调度程序,请成为超级用户 lp 或同等角色。使用以下方法之一启动调度程序。
使用 lpsched 命令。
# /usr/lib/lpsched Print services started. |
显示一条消息,指示未启动打印服务。
使用 svcadm 命令。
# svcadm enable application/print/server |
使用 svcadm 命令时,不显示指示是否已启动打印服务的消息。要确定打印服务是否联机,请再次运行 svcs application/print/server 命令。
如果在启动该调度程序时遇到问题,请参见如何取消挂起 LP 打印服务。
在打印服务器和打印客户机上,确保打印机正在接受请求。
在打印服务器和打印客户机上,确保打印机可以打印提交的打印请求。
检查打印机是否已连接至正确的串行端口。
# lpstat -t scheduler is running system default destination: luna device for luna: /dev/term/a |
该消息 device for printer-name 可显示端口地址。电缆是否连接至 LP 打印服务所连接的端口?如果端口正确,请跳转到步骤 5。
成为超级用户或同等角色。
更改表示端口的设备文件的文件拥有权。
# chown lp device-filename |
此命令将指定特殊用户 lp 作为设备文件的属主。在此命令中,device-filename 是设备文件的名称。
更改打印机端口设备文件的权限。
# chmod 600 device-filename |
此命令仅允许超级用户 lp 或同等角色访问打印机端口设备文件。
检查是否已正确配置打印机。
# lpstat -p luna -l printer luna is idle. enabled since Jan 12 14:24 2004. available Content types: postscript Printer types: PS |
以上示例说明了一台已正确配置并可用于处理打印请求的 PostScript 打印机。如果打印机类型和文件内容类型正确,请跳转到步骤 6。
如果打印机类型或文件内容类型错误,请尝试在打印客户机上将打印类型设置为 unknown,将内容类型设置为 any。
# lpadmin -p printer-name -T printer-type -I file-content-type |
在打印服务器上,确保打印机未出现故障。
确保未将打印机错误设置为登录终端。
很容易错误地将打印机设置为登录终端,因此即使在您认为不适用的情况下,也要检查这种可能性。
在 ps -ef 命令输出中查找打印机端口项。
# ps -ef root 169 167 0 Apr 04 ? 0:08 /usr/lib/saf/listen tcp root 939 1 0 19:30:47 ? 0:02 /usr/lib/lpsched root 859 858 0 19:18:54 term/a 0:01 /bin/sh -c \ /etc/lp /interfaces/luna luna-294 rocket!smith “passwd\n## # |
在此命令的输出中,查找打印机端口项。在以上示例中,端口 /dev/term/a 错误地设置为登录终端。可以通过行尾的 "passwd\n## 信息进行判断。如果端口设置正确,请跳过此过程中最后的步骤。
取消打印请求。
# cancel request-id |
在此命令中,request-id 是要取消的打印请求的请求 ID 号。
将打印机端口设置为非登录设备。
# lpadmin -p printer-name -h |
检查 ps -ef 命令输出,以确认打印机端口不再是登录设备。
如果在基本 LP 打印服务功能中找不到打印问题的根源,请继续进行以下针对所适用的特定客户机/服务器情况的过程之一。
检查打印服务器上的 LP 打印服务的基本功能(如果尚未执行此操作)。
有关检查基本功能的说明,请参见如何检查 LP 打印服务的基本功能。在从打印客户机发出请求但未打印任何内容时,请在尝试找出原因之前确保打印机可在本地正常运行。
如果尚未在打印客户机中检查 LP 打印服务的基本功能,请执行此操作。
在打印客户机中,必须启用打印机并接受请求,才能打印来自客户机的任何请求。
对于下面的大多数步骤,您必须作为超级用户或 lp 登录。
验证打印服务器是否正常运行。
# lpstat -t luna scheduler is running system default destination: luna device for luna: /dev/term/a luna accepting requests since Jan 12 14:26 2004 printer luna now printing luna-314. enabled since Jan 12 14:26 2004. available. luna-129 root 488 Jan 12 14:32 # |
以上示例说明了打开并且正在运行的打印服务器。
如果打印服务器不能正常运行,请返回到步骤 1。
以超级用户 lp 或同等角色的身份登录。
确保打印机类型正确。
不正确的打印机类型可能会导致不正确的输出。例如,如果指定打印机类型为 PS 并且页面以相反顺序打印,请尝试类型为 PSR 的打印机。(这些类型名称必须大写。)而且,错误的打印机类型还可能导致文本丢失、文本模糊不清或者文本字体错误。要确定打印机类型,请检查 terminfo 数据库中的项。有关 terminfo 数据库结构的信息,请参见打印机类型。
在打印机服务器上,显示打印机的特性。
$ lpstat -p luna -l printer luna is idle. enabled since Thu Jul 12 15:02:32 ... Form mounted: Content types: postscript Printer types: PS Description: Connection: direct Interface: /usr/lib/lp/model/standard After fault: continue Users allowed: (all) Forms allowed: (none) Banner not required Character sets: Default pitch: Default page size: 80 wide 66 long Default port settings: $ |
查阅打印机制造商的文档,确定打印机型号。
如果打印机类型不正确,请使用 Solaris Print Manager 的“修改打印机属性”窗口或使用以下 lpadmin 命令进行更改。
# lpstat -p printer-name -T printer-type |
在打印客户机上,打印机类型应为 unknown。在打印服务器上,打印机类型必须与定义的 terminfo 项相匹配,以支持您的打印机型号。如果没有用于您的打印机类型的 terminfo 项,请参见如何为不支持的打印机添加 terminfo 项。
为打印机指定的文件内容类型指示了打印机可以直接打印而不必进行过滤的文件的类型。错误的文件内容类型会导致在需要过滤时跳过过滤。
记下在以前的步骤中 lpstat 命令提供的有关文件内容类型的信息。
在打印客户机中,除非有理由指定一个或多个明确的内容类型,否则文件内容类型应为 any。如果在客户机中指定内容,则在打印客户机中而不是打印服务器上进行过滤。此外,客户机中的内容类型必须与打印服务器中指定的内容类型相匹配,依此类推,打印服务器还必须反映打印机的功能。
查阅打印机制造商的文档,确定打印机可以直接打印的文件类型。
用于表示这些文件类型的名称不必与制造商使用的名称相匹配。但是,使用的名称必须与 LP 打印服务可识别的过滤器使用的名称一致。
如果文件内容类型不正确,请使用 Solaris Print Manager 的“修改打印机属性”窗口或以下 lpadmin 命令进行更改。
# lpadmin -p printer-name -I file-content-type(s) |
根据需要,可以在打印客户机或打印服务器上分别运行此命令,也可以同时在两者上运行此命令。在打印客户机中尝试 -I any,而在打印服务器上尝试 -I ""。后者指定一个空的文件内容类型列表,这意味着将尝试过滤所有文件,因为打印机只能直接打印精确匹配其打印机类型的文件。
不能打印文件时,应优先考虑此组合。如果可行,您可能需要尝试在打印服务器上指定明确的内容类型,以减少不必要的过滤。对于本地 PostScript 打印机,如果打印机支持这些类型,则应使用 postscript 或 postscript,simple。请注意,PS 和 PSR 不是文件内容类型,它们是打印机类型。
如果省略 -I,则文件内容列表缺省为 simple。如果使用 -I 选项并且要指定 simple 以外的文件内容类型,则列表中必须包括 simple。
指定多个文件内容类型时,请用逗号分隔名称。也可以用空格分隔名称,并用引号将列表引起来。如果指定 any 作为文件内容类型,则不进行任何过滤,并应仅发送打印机可以直接打印的文件类型至打印机。
检查打印请求未跳过下载字体所需的过滤。
如果用户使用 lp -T PS 命令将打印请求提交到 PostScript 打印机,则不会执行过滤。请尝试用 lp -T postscript 命令提交请求以强制进行过滤,这样可以下载文档所需的非驻留字体。
确保打印机端口的 stty 设置正确。
阅读打印机文档,确定打印机端口的正确 stty 设置。
如果打印机连接至并行或 USB 端口,则与波特设置无关。
使用 stty 命令检查当前设置。
# stty -a < /dev/term/a speed 9600 baud; rows = 0; columns = 0; ypixels = 0; xpixels = 0; eucw 1:0:0:0, scrw 1:0:0:0 intr = ^c; quit = ^|; erase = ^?; kill = ^u; eof = ^d; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^q; stop = ^s; susp = ^z; dsusp = ^y; rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v; parenb -parodd cs7 -cstopb -hupcl cread -clocal -loblk -parext -ignbrk brkint -ignpar -parmrk -inpck istrip -inlcr -igncr icrnl -iuclc ixon -ixany -ixoff imaxbel isig icanon -xcase echo echoe echok -echonl -noflsh -tostop echoctl -echoprt echoke -defecho -flusho -pendin iexten opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel tab3 # |
此命令可以显示打印机端口的 stty 当前设置。
下表说明了 LP 打印服务的标准打印机接口程序使用的缺省 stty 选项。
选项 |
含义 |
---|---|
-9600 |
将波特率设置为 9600 |
-cs8 |
设置 8 位字节 |
-cstopb |
每个字节发送一个停止位 |
-parity |
不生成奇偶位 |
-ixon |
启用 XON/XOFF(也称为 START/STOP 或 DC1/DC3) |
-opost |
使用此表中后面的所有设置执行“输出后处理” |
-olcuc |
不将小写映射为大写 |
-onlcr |
将换行更改为回车/换行 |
-ocrnl |
不将回车更改为换行 |
-onocr |
即使在第 0 列也输出回车 |
-n10 |
换行后无延迟 |
-cr0 |
回车后无延迟 |
-tab0 |
制表符后无延迟 |
-bs0 |
退格后无延迟 |
-vt0 |
垂直制表符后无延迟 |
-ff0 |
换页后无延迟 |
更改 stty 设置。
# lpadmin -p printer-name -o "stty= options" |
stty 值 |
结果 |
因设置不正确可能产生的问题 |
---|---|---|
110、300、600、1200、1800、2400、4800、9600、19200、38400 |
将波特率设置为指定值(仅输入一个波特率) |
可能打印随机字符和特殊字符,并且间距可能不一致 |
oddp evenp -parity |
设置奇数奇偶校验 设置偶数奇偶校验 不设置奇偶校验 |
字符缺失或字符错误随机出现 |
-tabs |
不设置制表符 |
文本挤至右边界 |
tabs |
以八个空格为间隔设置制表符 |
文本没有左边界,聚在一起或者重叠在一起 |
-onlcr |
在行首不设置回车 |
错误的双倍间距 |
onlcr |
在行首设置回车 |
沿页面向下以 Z 字形打印 |
通过将选项列表用单引号引起并用空格分隔每个选项,可以更改多个选项设置。例如,假设打印机要求您启用奇数奇偶校验并设置 7 位的字符大小。您可键入与以下示例所示类似的命令:
# lpadmin -p neptune -o "stty='parenb parodd cs7'" |
stty 选项 parenb 启用奇偶校验检查/生成,parodd 设置奇数奇偶校验生成,cs7 将字符大小设置为 7 位。
验证文档是否正确打印。
# lp -d printer-name filename |
以超级用户 lp 或同等角色的身份登录。
停止 LP 打印服务。
# svcadm disable /application/print/server |
重新启动 LP 打印服务。
# svcadm enable /application/print/server |
LP 打印服务应重新启动。如果在重新启动调度程序时出现问题,请参见如何重新启动打印调度程序。
此任务包括许多在打印机不应该空闲却处于空闲状态时要使用的过程。按顺序执行这些过程很有用,但不强制遵从该顺序。
显示打印机状态信息。
# lpstat -p printer-name |
显示的信息表明打印机处于空闲还是活动状态、已启用还是已禁用、可用还是不接受打印请求。如果一切正常,请继续本节中的其他过程。如果无法运行 lpstat 命令,请参见如何取消挂起 LP 打印服务。
如果打印机不可用(不接受请求),请允许打印机接受请求。
# accept printer-name |
打印机开始接受请求进入其打印队列。
如果该打印机已禁用,请重新启用它。
# enable printer-name |
此命令可以重新启用打印机,以使其可以处理队列中的请求。
使用 lpstat -o 命令检查打印过滤。
$ lpstat -o luna luna-10 fred 1261 Mar 12 17:34 being filtered luna-11 iggy 1261 Mar 12 17:36 on terra luna-12 jack 1261 Mar 12 17:39 on terra $ |
确定是否正在过滤第一个等待请求。如果输出与以上示例类似,则正在过滤文件;该打印机并未挂起,只是需要一些时间来处理请求。
查找有关打印机故障的消息并尝试更正故障(如果有)。
根据打印机故障警报的指定方法,消息可能直接通过电子邮件发送给超级用户,也可能写入超级用户登录的终端。
重新启用打印机。
# enable printer-name |
如果打印机故障阻止了请求,此命令将强制重试。如果此命令不起作用,请继续本节中的其他过程。
在打印客户机上,停止进一步对向打印服务器发送的打印请求排队。
# reject printer-name |
在打印客户机上,将 "are you there?" 请求发送到打印服务器。
print-client# ping print-server print-server is alive |
如果收到消息 print-server not available,则表示可能存在网络问题。
修复以上问题后,允许对新打印请求排队。
# accept printer-name |
如果需要,请重新启用打印机。
# enable printer-name |
在打印服务器上,停止进一步对打印客户机发送至打印服务器的打印请求排队。
# reject printer-name |
显示 lpsched 日志文件。
# more /var/lp/logs/lpsched |
在无法打印从打印客户机到打印服务器的打印请求时,显示的信息可能有助于查明造成问题的原因。
修复该问题后,允许对新打印请求排队。
# accept printer-name |
# enable printer-name |