Printers, who needs them anyway? You can probably just read from a PDF and as for those documents that must be printed on paper, we always have access to a printer somewhere, don’t we? Not so much anymore. So in all this lockdown situation maybe you thought about buying a budget laser printer. Maybe a Kyocera, because that’s the first LaserJet printer you owned, you remember that back in the days it was rock solid and worked flawlessly on Linux with CUPS. Surely now they should only be better, cheaper and more compatible. So you buy this new printer and find out that it’s not compatible with anything else than Windows. Congratulation, you’ve just been struck by the curse of the GDI printers. Those Windows-only printers are getting more and more common (they are cheaper to make) and it’s difficult to get them running as each model generally requires it’s own driver. So most of the time you depends on the goodwill of the manufacturer and when it does provide a driver for Linux, it’s more often than not in the form of a binary.
This has become a plague. When my parents bought a new printer several years ago, I remember asking the vendor multiple times if it was compatible with Linux and if this was a PCL-compatible printer. He assured me that, “yes, it is”, only to find out when I came home that “no, it isn’t”.
So hold on to your butts as I have a semi-great announcement to make with regards to printing with the low budget GDI printer Kyocera FS-1040/FS-1041. It just works! Not only on Linux, but also on FreeBSD. But that’s with a binary, and only on x86/amd64. That’s why it’s just semi-great news.
The great news is, it might be possible to run it with a reverse engineered CUPS filter. That means among other things that you could run this printer from an ARM platform such as a RPi. In the coming days, I plan to dedicate some of my spare time to try to get this open CUPS filter to run inside a jail on FreeNAS.
I’ll update this post as I progress and write further posts once it’s ready.
- USB printer in FreeNAS jail: It works but can still be improved. Especially the problem of applying devfs ruleset to iocage jails.
- Open KPSL filter: I got this version to work inside a FreeNAS jail. Had to hack the CMake rules a bit, but if you manage to compile it, you can replace the binary filter with it.
 GDI printers
 Reverse engineered Kyocera rastertokpsl filter for CUPS
 Access USB Serial Device In Jail
Do you happen to know what KPSL stands for? Some kind of PostScript?
Kyocera PostScript Language?
Here a howto to install those modern kyocera GDI printers: https://wiki.gentoo.org/wiki/Kyocera_FS_1040_1041_1060_1061_1020_1025_1120_1125
Sure, but note that the ebuild uses Kyocera’s binary version of rastertokpsl which only works on Linux amd64. In the post above I suggest to use a reverse engineered version of rastertokspl that you can use on amd64, x86, arm, Linux, FreeBSD or whatever.
For instance with rastertokpsl-re, you should be able to install this printer on a RaspberryPi (and use it as your cups server). With the official Kyocera driver, you could not do that.