I’ve had a HP LaserJet 1010 for a few years, and I used to have it directly connected to my server, running lpd and samba. When I first set this up, I was plagued by “Unsupported Personality: PCL” errors. After much messing about, it was partially fixed, at least enough that Windows would happily print via samba, and I could occasionally print from NetBSD systems. Sure, I sometimes had to reset the printer, but most of the time it worked well enough.
Recently I switched to CUPS, because it made it easier to run the print spooler on my server while physically connecting the printer to my NSLU2, in a different room. Ever since this switch, the “Unsupported Personality: PCL” errors have been back with a vengeance, along with other types of problems such as raw PJL/PCL being printed as plain text.
There are many references floating around on the net about a magic 8-byte sequence which allegedly fixes the “Unsupported Personality: PCL” error. Alas, I was seeing this problem also from Windows clients, and the data which they sent to be printed already included this sequence.
It seems plausible that something is leaving the printer in a funny state, especially as power cycling the printer guarantees that the first printout will always work, so I decided to try inserting a reset command at the beginning of every print job.
I couldn’t figure out how to do this in CUPS, if it’s at all possible, and I didn’t find the CUPS documentation particularly helpful. So the obvious point to insert this was in the small print server running on the NSLU2. This just listens on a network socket and dumps out anything it receives to the printer. Now it adds a reset code to the start.
In C string format, the magic value is:
"\033%-12345X@PJL RESET\r\n"
The first part of that is the UEL (Universal End of Language) code, and the second is self-explanatory.
Sending a page with this code set immediately after one which had already failed didn’t seem to be enough to save that print job, however if every page contains this code, I can’t reproduce the failure.
Clearly this is not a fix for the root cause, but it’s enough to get me a working printer. It may also be useful for other people who are desperately grappling with a LaserJet 1010/1012/1015.