# network printer "sleeps" for ages



## YuryG (Dec 19, 2018)

I have installed network printer (Kyocera) configured to work with lpr (and with cups). The first print job goes almost immediately, but with each next job chance for a long lag is growing. So, if I send some fifth job to a queue I can be put waiting for several minutes! The job stays in queue, the printer is idle and the job is as simple as it was when it went immediately, and the network is working.
What can be wrong? Where to look?


----------



## Martin Paredes (Dec 19, 2018)

You should not be using LPR/LPD and CUPS at the same time in a system (PC)

You can have enable LPR/LPD and CUPS in the printer at the same time (I recommend leaving only 1)

I can help with LPR/LPD, post your config in /etc/printcap for the printer


----------



## YuryG (Dec 20, 2018)

```
lp:\
    :lp=9100@192.168.1.35:\
    :sh:\
    :mx#0:\
    :if=/usr/local/libexec/psif:\
    :sd=/var/spool/lpd/lp:\
    :lf=/var/log/lpd-errs:
```
And psif:

```
#!/bin/sh

IFS="" read -r first_line
first_chars=`expr "$first_line" : '\(....\)'`
case $first_chars in
%!PS|%PDF)
    ( echo "$first_line" ; cat ) | /usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -r600 -q -sDEVICE=pxlmono -sOutputFile=- - && exit 0
    exit 2
    ;;
*)
    echo "$first_line" && cat && exit 0
    exit 2
    ;;
esac
```
I do not use CUPS, but today's office suites like Libreoffice or Firefox want it or nothing usually. (More than that CUPS' driver for my Kyocera cannot use its 600 dpi etc.)


----------



## YuryG (Dec 20, 2018)

UPD. When I make printing via `nc` the situation is the same. The first attempt usually fast to execution, next ones more probably to "hang" longer.
So, may be it is more general network problem.


----------



## Martin Paredes (Dec 20, 2018)

What info is printed with `lpc status lp` and `lpq -Plp`

Do you have information in the file /var/log/lpd-errs or /var/log/messages?


----------



## YuryG (Dec 21, 2018)

`lpc status` says 
	
	



```
lp:
    queuing is enabled
    printing is enabled
    1 entry in spool area
    sending to 192.168.1.35 port 9100
```
`lpq` shows the task in queue
lpd-errs has only lines like this: 
	
	



```
Dec 20 10:15:14 192 lpd[895]: lpd startup: logging=0
```
messages has nothing about lp apart from what is in lpr-errs
So, no obvious error messages, just up to tens of minutes waiting.


----------



## Martin Paredes (Dec 21, 2018)

What option makes the printer work?

1.- Try restarting the daemon

```
lpc abort lp
lpc up lp
```

2.- Power off and on the printer and run `lpc restart lp`

If the problem persist, try with this printcap


```
lp:\
    :lp=:\
    :rm=192.168.1.35:\
    :rp=lp1:\
    :sh:\
    :mx#0:\
    :if=/usr/local/libexec/psif:\
    :sd=/var/spool/lpd/lp:\
    :lf=/var/log/lpd-errs:
```

What model of printer do you have?
The print server is internal o external (need model)?


----------



## shepper (Dec 21, 2018)

Functionally, a spooler communicates with the printer by queuing the job until the printer is ready.  It looks like the spool is waiting for  a "printer ready" reply from the Kyocera.   I've seen HP printers not fully reset after errors and needing a poweroff/restart.  You can test this on your own printer by doing a poweroff/restart while your job is standing by.  A newly started printer should indicate that it is ready.

If this is the case, one work around would be  LPR direct printing (bypass spooler) via foomatic-rip.  Also consider web searching Kyocera for spooling issues.


----------



## YuryG (Dec 22, 2018)

Thanks, I'll try next time problem persists. But as far as I remember, turning ON and OFF the printer doesn't work alone, may be it will with `lpc restart lp`.


----------



## Martin Paredes (Dec 22, 2018)

Power off/on the printer is not enough, in your FreeBSD the print job can be in a wait state, so you need to `lpc down/up` to reinitialize (the connection) the print job

The configuration in your printcap is using JetDirect protocol (port 9100), mine is using printer (spooler or lpd) protocol (port 515), different code in your FreeBSD and your printer


----------



## shepper (Dec 22, 2018)

Martin Paredes said:


> Power off/on the printer is not enough, in your FreeBSD the print job can be in a wait state,



I do not know the details of the communication that occurs between spooler/printer, but either one is not talking or one is not listening.

lpc(8) has a restart option


```
restart { all | printer }
             Attempt to start a new printer daemon.  This is useful when some
             abnormal condition causes the daemon to die unexpectedly, leaving
             jobs in the queue.  lpq(1) will report that there is no daemon
             present when this condition occurs.  If the user is the supe‐
             ruser, try to abort the current daemon first (i.e., kill and
             restart a stuck daemon)
```


----------



## YuryG (Dec 27, 2018)

Martin Paredes said:


> ...
> What model of printer do you have?
> The print server is internal o external (need model)?


FS-6525MFP print server is build-in into device


----------



## YuryG (Dec 27, 2018)

And restart of lp do not help.


----------



## Martin Paredes (Dec 29, 2018)

YuryG said:


> And restart of lp do not help.


If you read carefully what "restart" does, it doesn't help in your case since you have a daemon running/working, you should use `lpc abort lp` and `lpc up lp` to kill the daemon and start a new one.



YuryG said:


> So, may be it is more general network problem.


With a ping you can confirm if there is a network problem (packet loss?)

Did you try with my printcap?

What are you printing (existing file/type of file) and how (from application/command line)?

Your filter psif only work with PS and PDF files, what happen with the other types?

Try reconfiguring LPD with the following options and see if something is logged


```
Available options:

-c       By    default, if some remote    host has a connection error while try-
         ing to send a print request to lpd    on a local host, lpd will only
         send error    message    to that    remote host.  The -c flag causes lpd
         to    also log all of    those connection errors    via syslog(3).

-d       Turn on SO_DEBUG on the Internet listening    socket (see
         setsockopt(2)).

-l       The -l flag causes    lpd to log valid requests received from    the
         network.  This can    be useful for debugging    purposes.
```

The Kyocera ECOSYS FS-6525MFP supports the following PDLs (Page Description Language ) / Emulations:
PRESCRIBE, PCL6 (PCL XL and 5e), KPDL3 (*PostScript 3 compatible*), XPS

You don't need to use gosthscript to convert to PCL (DEVICE=pxlmono)

What emulation do you have active (System menu / Printer / Emulation)?


----------



## YuryG (Dec 29, 2018)

Martin Paredes said:


> If you read carefully what "restart" does, it doesn't help in your case since you have a daemon running/working, you should use `lpc abort lp` and `lpc up lp` to kill the daemon and start a new one.


O.K. Haven't noticed that.


> With a ping you can confirm if there is a network problem (packet loss?)


It may happen, but the ping restores much faster than lp job.


> Did you try with my printcap?


Not yet. The problem is the laggs start not immediately after reboot, and I do not print that much every day.


> What are you printing (existing file/type of file) and how (from application/command line)?
> 
> Your filter psif only work with PS and PDF files, what happen with the other types?


Mostly, PDF files, but also some TIFFs, and PSes occasionally. And mostly from command line.


> Try reconfiguring LPD with the following options and see if something is logged
> ...


I'll try that, thanks.


> The Kyocera ECOSYS FS-6525MFP supports the following PDLs (Page Description Language ) / Emulations:
> PRESCRIBE, PCL6 (PCL XL and 5e), KPDL3 (*PostScript 3 compatible*), XPS
> 
> You don't need to use gosthscript to convert to PCL (DEVICE=pxlmono)
> ...


I'll say the type of emulation next time I'll get to the printer (it's on my working place, now we have some kind of holidays).
But without my psif the printer gives raw PDF file 
	
	



```
%PDF-1.5...
```
 on output, but understands (most of) TIFFs anf JPEGs.
So, this KPDL3 is not quite PostScript (?). But I can print PDFs directly (not PSes) from flash sticks inserted into the printer.


----------



## shepper (Dec 29, 2018)

Martin Paredes said:


> The Kyocera ECOSYS FS-6525MFP supports the following PDLs (Page Description Language ) / Emulations:
> PRESCRIBE, PCL6 (PCL XL and 5e), KPDL3 (*PostScript 3 compatible*), XPS



It is possible to use the PostScript3 compatible Kyocera driver with a foomatic-rip filter.

OpenBSD foomatic-rip howto
The Kyocera ppd may be available online
The later MAC or Linux downloads should have the ppd.
Kyocera Downloads - see end of page

It is also possible to write a complex filter for PDF, PS and txt files
DaemonForums thread


----------



## Martin Paredes (Dec 30, 2018)

When you print a file and the lag occur, the file is always printed?



YuryG said:


> It may happen, but the ping restores much faster than lp job.


For me, a network problem has to do with the components between the 2 computers that communicate, in your case the wiring and switch, to test the network, you can simulate the traffic of a print job of 5 MB (5,242,880 Bytes) by sending 3,496 packets of 1,500 Bytes each with `ping -c 3496 -s 1500 192.168.1.35`.

If the problem is in FreeBSD it has to be with the filter psif, for me, it only handles PS correctly (PDF I am not so sure, are you using print/ghostscript9-agpl?)

Try to identify the type of file you print when the lag occur and when not occur

Your psif is sending the TIFF and JPEG directly to the printer (raw print), maybe is when the lag occur.



YuryG said:


> So, this KPDL3 is not quite PostScript (?).


Been strict: NO, but for me "PostScript 3 compatible" mean that a third-party PostScript interpreter is running inside your printer (not the official from Adobe).



YuryG said:


> But I can print PDFs directly (not PSes) from flash sticks inserted into the printer.


According to the manual, you can print PDF, TIFF, JPEG and XPS from USB stick, but I suspect that they transform the file internally before printing it


----------



## YuryG (Dec 30, 2018)

Martin Paredes said:


> When you print a file and the lag occur, the file is always printed?


Yes, but sometimes I even forget about it, still it is printed may be after 20 minutes.


> <...>If the problem is in FreeBSD it has to be with the filter psif, for me, it only handles PS correctly (PDF I am not so sure, are you using print/ghostscript9-agpl?)


On the contrary, this psif is totally correct for PDFs, but PSes may not have any '%PS' header (and still be correct PostScript files), so it would not work for them. psif can be tested easily without network, and it gives no lags and nice PCL (or should they be called PXL?) files. Yes, it is print/ghostscript9-agpl.


> Try to identify the type of file you print when the lag occur and when not occur
> 
> Your psif is sending the TIFF and JPEG directly to the printer (raw print), maybe is when the lag occur.


The lag can occur during any kind of file. It occurred before I put this psif in place and when I mixed CUPS and direct printing, when I print ASCII files etc...


> Been strict: NO, but for me "PostScript 3 compatible" mean that a third-party PostScript interpreter is running inside your printer (not the official from Adobe).
> 
> 
> According to the manual, you can print PDF, TIFF, JPEG and XPS from USB stick, but I suspect that they transform the file internally before printing it


Surely they transform somehow internally, but for now I could not make the printer to understand PDFs or PSes from my network. (Also, I was not able to print PSes from flash sticks, what extension it expect? XPS? Is it some variant of PS or just PS?)


----------



## Martin Paredes (Dec 30, 2018)

Maybe the problem of the lag is not with you, maybe someone in your office is using a driver that is documented to cause slow printing on Kyocera printers

On UNIX, magic numbers are used to identify files, for PostScript files is %!PS, more info in file(1)

How did you test psif without network?

Try printing by the usb port `lp=/dev/unlpt0` and see if the lag occur

The files XPS is like a PDF (can be viewed anywhere) but from Microsoft


----------



## shepper (Dec 31, 2018)

My older HP5L used PCL5 and would discern, _.txt/_.pdf/*.ps files using the ljet4 driver from ghostscript.  My newer printer uses BR-script3 which is Brothers Postscript compatible driver.  On my initial setup, using BR-script3 with lpr would not print pdf's.  Using plxmono would print postscript level 1 and 2 files and PDF <= version 1.4   Postscript printing is usually faster (No pre-processing with ghostscript).  The script I linked above essentially looks the first line to see if the file is a pdf or ps.  If ID'd as ps, it passes it directly to the printer.  The second option, ID'd as pdf, is to convert it to ps using pdf2ps. Lastly, if neither PS or PDF, it assumes a txt file and runs it through enscript.

I wonder if you are not making this overly complex.  The handbook has a filter similar to yours in section 9.5.3.4.  The only difference is that it utilizes enscript for "pretty" text output and avoids converting a postscript file to PCL
FreeBSD handbook, LinePrinterDaemon

If you get rid of the plxmono driver, and tell you printer to expect postscript emulation, will it print a *.ps file?  Postscript printing should be faster (No pre-processing with ghostscript).  If that is the case, test a pdf converted to postscript with pdf2ps(1).

Another issue may be the image processing in postscript level 3/pdf v1.7.  Ghostscript uses ImageMagick for image processing.  You can do this manually with tiff2ps(1) It is also possible to correct change the ps level with ps2ps(1)
Postscript Wikipedia
Do you know if the files ps file that get hung up in the queue are level 3?


----------



## YuryG (Dec 31, 2018)

Martin Paredes said:


> Maybe the problem of the lag is not with you, maybe someone in your office is using a driver that is documented to cause slow printing on Kyocera printers
> 
> On UNIX, magic numbers are used to identify files, for PostScript files is %!PS, more info in file(1)


Hardly so, the problem is present even when I am alone in the office. Although when someone from notebook loses WiFi connection during printing, _he_ has a problem.


> How did you test psif without network?


Easily. Put PDF or PS from standard input from command line, write standard output to file and find some utility to view .PCL files. (the last one may be less trivial) )


> Try printing by the usb port `lp=/dev/unlpt0` and see if the lag occur
> 
> The files XPS is like a PDF (can be viewed anywhere) but from Microsoft


I even do not have USB cable for the printer (and long enough to reach it) )))


----------



## YuryG (Dec 31, 2018)

shepper said:


> My older HP5L used PCL5 and would discern, *.txt/*.pdf/*.ps files using the ljet4 driver from ghostscript.  My newer printer uses BR-script3 which is Brothers Postscript compatible driver.  On my initial setup, using BR-script3 with lpr would not print pdf's.  Using the plxmono would print postscript level 1 and 2 files and PDF <= version 1.4   Postscript printing is usually faster (No pre-processing with ghostscript).  The script I linked above essentially looks the first line to see if the file is a pdf or ps.  If ID'd as ps, it passes it directly to the printer.  The second option, ID'd as pdf, is to convert it to ps using pdf2ps. Lastly, if neither PS or PDF, it assumes a txt file and runs it through enscript.
> 
> I wonder if you are not making this overly complex.  The handbook has a filter similar to yours in section 9.5.3.4.  The only difference is that it utilizes enscript for "pretty" text output and avoids converting a postscript file to PCL
> FreeBSD handbook, LinePrinterDaemon


Yes, your are right, the start script was from that script from The Handbook, and I've said in #15 and #18 that sending PDF or PS to printer make it consider it is text file and print all these '%PDF...' or '%!PS...' until I stop it by hand. And I do not know (yet?) how to set “the right” emulation. I still shall try the #14 menu.


> If you get rid of the plxmono driver, and tell you printer to expect postscript emulation, will it print a *.ps file?  Postscript printing should be faster (No pre-processing with ghostscript).  If that is the case, test a pdf converted to postscript with pdf2ps(1).
> 
> Another issue may be the image processing in postscript level 3/pdf v1.7.  Ghostscript uses ImageMagick for image processing.  You can do this manually with tiff2ps(1) It is also possible to correct change the ps level with ps2ps(1)
> Postscript Wikipedia
> Do you know if the files ps file that get hung up in the queue are level 3?


The hang is with PDFs, TIFFS, PSes etc. Everything it prints. More that that, it can print most of TIFFs without conversion to anything. And, by the way printer processor is slower than CPU on a desktop, so making conversion on desktop is not slower (anyway, a laser printer will do it, the rasterization thing, right?).
Also, I've said that producing .PCLs by my psif is very fast comparing to printer waiting time (even without lags it warm-up longer  ).


----------



## YuryG (Dec 31, 2018)

Martin Paredes said:


> <…>
> What emulation do you have active (System menu / Printer / Emulation)?


It was PCL6 default emulation.
Hooray! Now in KPDL it prints PDFs directly.


----------



## Martin Paredes (Jan 4, 2019)

@YuriG if the hang/lag continues, you can diagnose the problem by capturing the packets with tcpdump(1).

Start capturing, then send the print job, when the job gets printed you stop the capture with Ctrl-C.

You will need 2 captures: (1) when the print job hang and (2) when not.

Assuming that your interface is "fxp0" then run the command `tcpdump -s 0 -n -i fxp0 host 192.168.1.35 -w filename.pcap`

-s 0 = full packet capture
-n = no DNS lookup
-i fxp0 = interface to capture traffic from
-w = name of the file to save the capture to

If you want something with GUI, you can use net/wireshark to analize/examine the files


----------

