Dot matrix printing the easy way

Twice now I’ve declared my SmartParallel project completed, and twice it has proven to be faulty – or, at least, difficult. I’m still plugging away at it (more on that soon), but in the meantime I really wanted to be able to print out 6502 assembly code listings on my Epson MX-80 F/T III dot matrix printer.

And then I saw this video…

Veronica is obviously as thrilled with the speed-addled bee noise of dot matrix printers as I am. She shows how you can easily run one from a Linux computer by using an HP JetDirect 500X. I didn’t need telling twice. I rushed off to see my friend eBay and, within a week became the proud owner of a secondhand but very presentable copy.

The JetDirect 500X is a network print server. It has an Ethernet port (just 10/100, no gigabit here, but that’s fine) so throwing it on a network is easy. Hell, there’s even a coax connector if you want to travel back in time and hook it up Token Ring style. (I don’t, thanks.) The product dates back to the mid-1990s and is long discontinued. But there seems to be a steady supply on eBay.

On the back are three DB-25 parallel ports which have individual port numbers – :9100, :9101 and :9102. So you can throw three printers on this thing and access all of them over a single IP address. Very neat.

My sample didn’t come with a manual, but who reads those anyway?

Getting connected

Apart from plugging in power, Ethernet and a printer, there’s not a lot to do in the way of getting it going. Except that, at first, I couldn’t find it on my network. My Netgate router/firewall swore blind that it hadn’t handed out any IP addresses via DHCP, and it’s very reliable in these matters.

On a hunch, I pressed down the 500X’s single button for about 30 seconds and, sure enough, it started printing its configuration on the printer. Handy.

That’s how I found out it had a static IP in the range – and my network uses No worries. It just took a quick Google to find out that you make the machine revert to factory defaults by unplugging the power, then plugging it back in again while holding the button for five seconds.

The default settings include getting the network configuration with DHCP, so now I was all connected.

Like many other devices these days, the 500X has a built-in web interface – except that I couldn’t get it to work. When I tried connecting from a Mac I get the message ‘Macintosh OS is not supported to run this application.’ Oh, okay. When I connect from Windows 10 or Linux, the page sort-of loads, but is just empty.

I guess I could try an older browser on one of my virtual machines (I have Windows 95 knocking around somewhere and WinXP too.) I may do that out of sheer curiosity at some time. For the time being, though, I just wanted to get on with using this thing.

Besides, there was no need to worry. The 500X has another interface that is far more in keeping with the vintage vibe – telnet.

Yep, good old telnet.

Simply typing ‘telnet <ip_address>’ gets you in. You can set a password, but there’s none by default. Ah, those innocent bygone days.

There’s a bunch of commands you can type to set the configuration (just remember to include the colon). It’s very simple.

If you mess up, you can always type ‘exit’ to leave without saving anything.

Linux client

The next step was to set up appropriate drivers on a Linux machine to talk to this printer. That’s where Veronica’s video was especially helpful, although I did have to keep pausing playback, sometimes scrubbing back and forth to get the right frame, as she breezed through the settings at quite a lick.

For those, like myself, who enjoy a more leisurely approach to computing, here’s what I did based on her advice. These steps worked in several flavours of Linux, including Raspberry Pi OS, Twister OS and Fedora.

The first step is to make sure your user is a member of the ‘lpadmin’ group. In a terminal, type:

sudo usermod -aG lpadmin <username>

(Obviously, you replace <username> with your user’s name.)

Now, in a browser, type the following into the address bar:


You’ll get the main CUPS screen. Select the ‘Administration’ tab and click on ‘Add a printer’. From the options, select ‘AppSocket/HP JetDirect’. (Its position in the list seems to vary a lot, so hunt for it.)

Click on ‘Continue’ and you’ll next be prompted to set the connection. You use the protocol ‘socket://’ followed by the IP address of the printer and then the printer’s port on the JetDirect. In my case, the IP address is and I’m using the first port, which has a port number of :9100. So I entered:


When you continue, you’ll be asked to give the printer a name, description and location. The second two are optional and for information purposes only. The name is important, though. You’ll be using this from the command line a lot, so pick something short and appropriate.

Now we come to the driver. You could play around with using specific drivers, especially if you want to get graphics out of the printer. In my case, however, I’m going to be using the Epson for printing listings and logs. So I followed Veronica’s advice and selected ‘Generic’ at the first stage and ‘Generic Text-Only Printer (en)’ at the second.

Finally, you get to choose some configuration settings. (If you don’t see this screen, go to Manage Printers, click on your printer and choose the admin options).

The default seems to be to offset from the left by five characters and also put space at the top and bottom of the page. But my Epson is hardware configured (via the DIP switches) to use ‘skip over perforation’. So here are the settings I use.

Actual printing

The final step is to actually print something. It couldn’t be easier.

Back in a terminal, type:

lp <filename> -d <printer_name>

Replace <filename> with the path and filename of the text file you want to print and <printer_name> with the name you chose in the setup. Let’s say I want to print the file ‘Z64_rom.asm’ which is in the current directory on to the printer I named ‘mx80’, I’d use:

lp Z64_rom.asm -d mx80

I’ve already printed out all the code for the Zolatron 64 6502 homebrew computer, and am looking forward to some engrossing bedtime reading (and possibly some tart remarks from my More Significant Other about ‘rustling paper’).

I’m still going to persist with the SmartParallel project because … well, a) it’s my project, and b) it’s smart. But at least I have a way of using the dot matrix printer until I come up with something better.

By the way, the Veronica Explains channel on YouTube seems to be fairly new, but I’ve enjoyed – and learned from – everything I’ve seen there. Definitely one to follow, especially if you’re into Linux.


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.