Dot Matrix Printer Drivers

August 12, 2025


The Beginning

The Okidata Microline 391 Turbo in all her glory.

Anyone that visits thrift stores knows that if you go looking for something specific, you're definitely not going to find it. You're going to find something somewhat similar, but never the same, and there are usually caveats (fit, age, condition) that leave you compromising on something.

In December of 2022, I'd gotten it into my head that I wanted a dot-matrix printer, but not just any dot-matrix printer: I wanted a large, beige, fast one. As modern as you can get without moving into other printing technologies. And what did I see as soon as I walked into Goodwill on that sunny day? An Okidata Microline 391 Turbo, exactly what I'd been looking for. And it was in great condition!

That led to weeks of playing and tinkering with the thing, just to get it to print simple text documents. But thankfully, you can easily repair most problems on your own! Dry ribbon? Re-ink it yourself. Part broken? Order a new one (miraculously still available) or repair it yourself! Driver issue? Hack on it until you've gotten it working again.

This post outlines my "printer project," the problems that I've had, and how I solved them.

Connection

An IEEE-1284 connector.

The first problem to solve was how to hook the thing up to my machine. Since my printer only had the Okidata serial interface card, I'd have to adapt that parallel port to USB somehow. Helpfully, the manual says that I'd need a cable that supports IEEE 1284, so a quick search for "IEEE 1284 to USB" yielded lots of cables that would do the trick.

Plugging that in immediately yielded a semi-functioning printer: Linux apparently had the correct driver to talk through the adapter, and I could pipe text to a pseudo-file (I think /dev/usb/lp0) and get it to "print."

At this time, I also set it up using CUPS and a generic Okidata driver that came with CUPS. Since my printer also emulates an Epson LQ by default, I could also use that driver to decent effect. However, the resolutions presented were mostly ones not supported by my printer, and I'd often print a PDF and get complete garbage (random characters spewing onto the page), or get nothing but blank pages (where the printer aligns the print head and then proceeds to spit blank paper at me, occasionally printing random characters at the top of each page).

I didn't have the patience to debug these particular issues yet, so I mostly stuck to long text-only documents, like manuscripts for my wife (which this printer is great for!) and research papers (the PDF of which I'd never really had troubles with).

Actually Printing

A printed test page, early on, from the Okidata. Resolution was turned down.

Next, I had to figure out where to get ink ribbons. I didn't have any, so I couldn't just re-ink one. The manual specifies, "For the best print quality, use genuine OKIDATA ribbons, Part. No. 52104001." It also explicitly states that, "ML590/591 ribbons (Part. No. 52106001) WILL NOT PRINT when installed on the ML390/391 Turbo." After searching tirelessly, I found Travis Technologies. The cartridges that I got were these.

Dean Travis from this site was extremely helpful in this process; I emailed him to ensure fitment, and he helpfully listed an additional 6-pack of ribbons at a discounted price so that I could have more of them.

I also discovered that it's relatively simple to re-ink these sorts of ribbons: since it works by rubbing the ribbon against a small sponge inside the plastic case of the ribbon cartridge, you can just open the case, drop ink onto the sponge, and then manually advance the ribbon across the sponge until it spreads evenly. The only caveat is that you need printer ink, which is just the right consistency. I've bought a small bottle (just search for "printer ink bottle") which has a little nozzle that I can use to refill the sponge if need be. Now it prints properly!

Hardware Problems

Disassembling the Oki. The looming dragon was good motivation to work quickly.

A few months into my ownership, I had my first hardware issue: one of the belts for the feed tractor had broken. Unfortunately, because of how it's mounted to a metal bar spanning the width of the printer, removal meant a pretty drastic disassembly. Each individual component was extremely easy to remove without breaking, though, and reassembly was straightforward and simple.

The only thing that you have to really watch out for is the removal of the main plastic shell itself; there are little tabs on the front (the bottom-left of the image) that you have to push with a screwdriver or pry tool, then gently pull the cover upward. Once that's off, the rest of the disassembly is self-explanatory.

The broken Oki tractor, disassembled. The rubbery plastic belt on the bottom had snapped.

It was difficult to find the tractor itself, because I didn't know the part number. I thought about simply melting and attempting to restore the original tractor belt, but it was rather brittle plastic and seemed to want to break in several other places while I was handling it. Searching for Okidata printer tractors, there aren't that many options, and for the most part, sites tell you what models they're compatible with. In my particular case, the 391 is apparently compatible with the tractors used on the 320, so I bought part number 53350302 at this link.

After that, it was just a matter of doing the opposite of assembly. I threw all the parts back on, and both tractors now worked!

Printing Directly

Drivers

I previously hinted at using some generic drivers for it, purely out of necessity, since I couldn't find any for the 390/391. There is a page for it on OpenPrinting , but the Omni driver is quite old, only hosted on Sourceforge, and doesn't seem to compile on modern compilers. Time for a bit of a slog! There were quite a few problems with the codebase's ability to build using GCC 14.2.1, including build system problems (checking for versions of libtool, autoconf, and automake that are very out-of-date) and older conventions that newer compilers don't accept (returning false from a function that should return a pointer).

Thankfully, I've worked through all of those manually and uploaded the changes to this repo. That should be all of the changes necessary to get it to build with the command:

./setupOmni --enable-devicecompile

I've also built all of the PPDs for Okidata printers here.

The Omni project supports a great deal of printers; according to their website , over 450 printers, particularly older models from: Brother, Canon, Epson, HP, IBM, Jepcom, Kyocera, Oki, Panasonic, QNix, Sambo, Samsung, Sindo, and Star.