mirror of
https://github.com/samba-team/samba.git
synced 2025-06-29 04:49:44 +03:00
522 lines
13 KiB
HTML
522 lines
13 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>Debugging Printing Problems</TITLE
|
|
><META
|
|
NAME="GENERATOR"
|
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.77"><LINK
|
|
REL="HOME"
|
|
TITLE="SAMBA Project Documentation"
|
|
HREF="samba-howto-collection.html"><LINK
|
|
REL="UP"
|
|
TITLE="Optional configuration"
|
|
HREF="p1342.html"><LINK
|
|
REL="PREVIOUS"
|
|
TITLE="Printing Support"
|
|
HREF="printing.html"><LINK
|
|
REL="NEXT"
|
|
TITLE="Security levels"
|
|
HREF="securitylevels.html"></HEAD
|
|
><BODY
|
|
CLASS="CHAPTER"
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#840084"
|
|
ALINK="#0000FF"
|
|
><DIV
|
|
CLASS="NAVHEADER"
|
|
><TABLE
|
|
SUMMARY="Header navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TH
|
|
COLSPAN="3"
|
|
ALIGN="center"
|
|
>SAMBA Project Documentation</TH
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="left"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="printing.html"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="80%"
|
|
ALIGN="center"
|
|
VALIGN="bottom"
|
|
></TD
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="right"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="securitylevels.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"></DIV
|
|
><DIV
|
|
CLASS="CHAPTER"
|
|
><H1
|
|
><A
|
|
NAME="PRINTINGDEBUG"
|
|
></A
|
|
>Chapter 15. Debugging Printing Problems</H1
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2081"
|
|
></A
|
|
>15.1. Introduction</H1
|
|
><P
|
|
>This is a short description of how to debug printing problems with
|
|
Samba. This describes how to debug problems with printing from a SMB
|
|
client to a Samba server, not the other way around. For the reverse
|
|
see the examples/printing directory.</P
|
|
><P
|
|
>Ok, so you want to print to a Samba server from your PC. The first
|
|
thing you need to understand is that Samba does not actually do any
|
|
printing itself, it just acts as a middleman between your PC client
|
|
and your Unix printing subsystem. Samba receives the file from the PC
|
|
then passes the file to a external "print command". What print command
|
|
you use is up to you.</P
|
|
><P
|
|
>The whole things is controlled using options in smb.conf. The most
|
|
relevant options (which you should look up in the smb.conf man page)
|
|
are:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> [global]
|
|
print command - send a file to a spooler
|
|
lpq command - get spool queue status
|
|
lprm command - remove a job
|
|
[printers]
|
|
path = /var/spool/lpd/samba</PRE
|
|
></P
|
|
><P
|
|
>The following are nice to know about:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> queuepause command - stop a printer or print queue
|
|
queueresume command - start a printer or print queue</PRE
|
|
></P
|
|
><P
|
|
>Example:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> print command = /usr/bin/lpr -r -P%p %s
|
|
lpq command = /usr/bin/lpq -P%p %s
|
|
lprm command = /usr/bin/lprm -P%p %j
|
|
queuepause command = /usr/sbin/lpc -P%p stop
|
|
queuepause command = /usr/sbin/lpc -P%p start</PRE
|
|
></P
|
|
><P
|
|
>Samba should set reasonable defaults for these depending on your
|
|
system type, but it isn't clairvoyant. It is not uncommon that you
|
|
have to tweak these for local conditions. The commands should
|
|
always have fully specified pathnames, as the smdb may not have
|
|
the correct PATH values.</P
|
|
><P
|
|
>When you send a job to Samba to be printed, it will make a temporary
|
|
copy of it in the directory specified in the [printers] section.
|
|
and it should be periodically cleaned out. The lpr -r option
|
|
requests that the temporary copy be removed after printing; If
|
|
printing fails then you might find leftover files in this directory,
|
|
and it should be periodically cleaned out. Samba used the lpq
|
|
command to determine the "job number" assigned to your print job
|
|
by the spooler.</P
|
|
><P
|
|
>The %>letter< are "macros" that get dynamically replaced with appropriate
|
|
values when they are used. The %s gets replaced with the name of the spool
|
|
file that Samba creates and the %p gets replaced with the name of the
|
|
printer. The %j gets replaced with the "job number" which comes from
|
|
the lpq output.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2097"
|
|
></A
|
|
>15.2. Debugging printer problems</H1
|
|
><P
|
|
>One way to debug printing problems is to start by replacing these
|
|
command with shell scripts that record the arguments and the contents
|
|
of the print file. A simple example of this kind of things might
|
|
be:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> print command = /tmp/saveprint %p %s
|
|
|
|
#!/bin/saveprint
|
|
# we make sure that we are the right user
|
|
/usr/bin/id -p >/tmp/tmp.print
|
|
# we run the command and save the error messages
|
|
# replace the command with the one appropriate for your system
|
|
/usr/bin/lpr -r -P$1 $2 2>>&/tmp/tmp.print</PRE
|
|
></P
|
|
><P
|
|
>Then you print a file and try removing it. You may find that the
|
|
print queue needs to be stopped in order to see the queue status
|
|
and remove the job:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> h4: {42} % echo hi >/tmp/hi
|
|
h4: {43} % smbclient //localhost/lw4
|
|
added interface ip=10.0.0.4 bcast=10.0.0.255 nmask=255.255.255.0
|
|
Password:
|
|
Domain=[ASTART] OS=[Unix] Server=[Samba 2.0.7]
|
|
smb: \> print /tmp/hi
|
|
putting file /tmp/hi as hi-17534 (0.0 kb/s) (average 0.0 kb/s)
|
|
smb: \> queue
|
|
1049 3 hi-17534
|
|
smb: \> cancel 1049
|
|
Error cancelling job 1049 : code 0
|
|
smb: \> cancel 1049
|
|
Job 1049 cancelled
|
|
smb: \> queue
|
|
smb: \> exit</PRE
|
|
></P
|
|
><P
|
|
>The 'code 0' indicates that the job was removed. The comment
|
|
by the smbclient is a bit misleading on this.
|
|
You can observe the command output and then and look at the
|
|
/tmp/tmp.print file to see what the results are. You can quickly
|
|
find out if the problem is with your printing system. Often people
|
|
have problems with their /etc/printcap file or permissions on
|
|
various print queues.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2106"
|
|
></A
|
|
>15.3. What printers do I have?</H1
|
|
><P
|
|
>You can use the 'testprns' program to check to see if the printer
|
|
name you are using is recognized by Samba. For example, you can
|
|
use:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> testprns printer /etc/printcap</PRE
|
|
></P
|
|
><P
|
|
>Samba can get its printcap information from a file or from a program.
|
|
You can try the following to see the format of the extracted
|
|
information:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> testprns -a printer /etc/printcap
|
|
|
|
testprns -a printer '|/bin/cat printcap'</PRE
|
|
></P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2114"
|
|
></A
|
|
>15.4. Setting up printcap and print servers</H1
|
|
><P
|
|
>You may need to set up some printcaps for your Samba system to use.
|
|
It is strongly recommended that you use the facilities provided by
|
|
the print spooler to set up queues and printcap information.</P
|
|
><P
|
|
>Samba requires either a printcap or program to deliver printcap
|
|
information. This printcap information has the format:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> name|alias1|alias2...:option=value:...</PRE
|
|
></P
|
|
><P
|
|
>For almost all printing systems, the printer 'name' must be composed
|
|
only of alphanumeric or underscore '_' characters. Some systems also
|
|
allow hyphens ('-') as well. An alias is an alternative name for the
|
|
printer, and an alias with a space in it is used as a 'comment'
|
|
about the printer. The printcap format optionally uses a \ at the end of lines
|
|
to extend the printcap to multiple lines.</P
|
|
><P
|
|
>Here are some examples of printcap files:</P
|
|
><P
|
|
><P
|
|
></P
|
|
><OL
|
|
TYPE="1"
|
|
><LI
|
|
><P
|
|
>pr just printer name</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>pr|alias printer name and alias</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>pr|My Printer printer name, alias used as comment</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>pr:sh:\ Same as pr:sh:cm= testing
|
|
:cm= \
|
|
testing</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>pr:sh Same as pr:sh:cm= testing
|
|
:cm= testing</P
|
|
></LI
|
|
></OL
|
|
></P
|
|
><P
|
|
>Samba reads the printcap information when first started. If you make
|
|
changes in the printcap information, then you must do the following:</P
|
|
><P
|
|
></P
|
|
><OL
|
|
TYPE="1"
|
|
><LI
|
|
><P
|
|
>make sure that the print spooler is aware of these changes.
|
|
The LPRng system uses the 'lpc reread' command to do this.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>make sure that the spool queues, etc., exist and have the
|
|
correct permissions. The LPRng system uses the 'checkpc -f'
|
|
command to do this.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>You now should send a SIGHUP signal to the smbd server to have
|
|
it reread the printcap information.</P
|
|
></LI
|
|
></OL
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2142"
|
|
></A
|
|
>15.5. Job sent, no output</H1
|
|
><P
|
|
>This is the most frustrating part of printing. You may have sent the
|
|
job, verified that the job was forwarded, set up a wrapper around
|
|
the command to send the file, but there was no output from the printer.</P
|
|
><P
|
|
>First, check to make sure that the job REALLY is getting to the
|
|
right print queue. If you are using a BSD or LPRng print spooler,
|
|
you can temporarily stop the printing of jobs. Jobs can still be
|
|
submitted, but they will not be printed. Use:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> lpc -Pprinter stop</PRE
|
|
></P
|
|
><P
|
|
>Now submit a print job and then use 'lpq -Pprinter' to see if the
|
|
job is in the print queue. If it is not in the print queue then
|
|
you will have to find out why it is not being accepted for printing.</P
|
|
><P
|
|
>Next, you may want to check to see what the format of the job really
|
|
was. With the assistance of the system administrator you can view
|
|
the submitted jobs files. You may be surprised to find that these
|
|
are not in what you would expect to call a printable format.
|
|
You can use the UNIX 'file' utitily to determine what the job
|
|
format actually is:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> cd /var/spool/lpd/printer # spool directory of print jobs
|
|
ls # find job files
|
|
file dfA001myhost</PRE
|
|
></P
|
|
><P
|
|
>You should make sure that your printer supports this format OR that
|
|
your system administrator has installed a 'print filter' that will
|
|
convert the file to a format appropriate for your printer.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2153"
|
|
></A
|
|
>15.6. Job sent, strange output</H1
|
|
><P
|
|
>Once you have the job printing, you can then start worrying about
|
|
making it print nicely.</P
|
|
><P
|
|
>The most common problem is extra pages of output: banner pages
|
|
OR blank pages at the end.</P
|
|
><P
|
|
>If you are getting banner pages, check and make sure that the
|
|
printcap option or printer option is configured for no banners.
|
|
If you have a printcap, this is the :sh (suppress header or banner
|
|
page) option. You should have the following in your printer.</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> printer: ... :sh</PRE
|
|
></P
|
|
><P
|
|
>If you have this option and are still getting banner pages, there
|
|
is a strong chance that your printer is generating them for you
|
|
automatically. You should make sure that banner printing is disabled
|
|
for the printer. This usually requires using the printer setup software
|
|
or procedures supplied by the printer manufacturer.</P
|
|
><P
|
|
>If you get an extra page of output, this could be due to problems
|
|
with your job format, or if you are generating PostScript jobs,
|
|
incorrect setting on your printer driver on the MicroSoft client.
|
|
For example, under Win95 there is a option:</P
|
|
><P
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> Printers|Printer Name|(Right Click)Properties|Postscript|Advanced|</PRE
|
|
></P
|
|
><P
|
|
>that allows you to choose if a Ctrl-D is appended to all jobs.
|
|
This is a very bad thing to do, as most spooling systems will
|
|
automatically add a ^D to the end of the job if it is detected as
|
|
PostScript. The multiple ^D may cause an additional page of output.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2165"
|
|
></A
|
|
>15.7. Raw PostScript printed</H1
|
|
><P
|
|
>This is a problem that is usually caused by either the print spooling
|
|
system putting information at the start of the print job that makes
|
|
the printer think the job is a text file, or your printer simply
|
|
does not support PostScript. You may need to enable 'Automatic
|
|
Format Detection' on your printer.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2168"
|
|
></A
|
|
>15.8. Advanced Printing</H1
|
|
><P
|
|
>Note that you can do some pretty magic things by using your
|
|
imagination with the "print command" option and some shell scripts.
|
|
Doing print accounting is easy by passing the %U option to a print
|
|
command shell script. You could even make the print command detect
|
|
the type of output and its size and send it to an appropriate
|
|
printer.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="AEN2171"
|
|
></A
|
|
>15.9. Real debugging</H1
|
|
><P
|
|
>If the above debug tips don't help, then maybe you need to bring in
|
|
the bug guns, system tracing. See Tracing.txt in this directory.</P
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="NAVFOOTER"
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"><TABLE
|
|
SUMMARY="Footer navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="printing.html"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="samba-howto-collection.html"
|
|
ACCESSKEY="H"
|
|
>Home</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="securitylevels.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
>Printing Support</TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="p1342.html"
|
|
ACCESSKEY="U"
|
|
>Up</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
>Security levels</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
> |