Ma! The printer’s out of meatballs!
A while ago I was browsing Digg, and I came across a great blog post about sending special commands to HP LaserJet printers to change their LCD displays to say what you wanted them to say. A fun hack with huge potential: how fun is it to watch people go to the printer, then become extremely confused by the LCD saying “Feed Me!” or some other completely random message? It’s quite funny, as our school found out on the last day of classes. Someone *cough* hacked the printer in the library to say “Out of Meatballs” for the day, with hilarious consequences. I decided I’d write this post to show you how to get some laughs at your workplace.
How does this hack work?
Warning: This could get technical. If you don’t like technical stuff, skip forward to the next part, How To Do It.
Buried in the PJL documentation (Printer Job Language, it’s a language used by HP LaserJets and many other printers to send print jobs and control the printer) is a command called “SET RDYMSG”, which (funnily enough) sets the ready message on the printer. So, instead of showing Ready you can make it say “INSERT COIN”, “DON’T LOOK UP” or whatever you want just by sending a sequence to the printer like this:
←%-12345X
@PJL RDYMSG DISPLAY=”Out of Meatballs “
Note: the arrow is the Escape character (ASCII #27), and Out of Meatballs is the message which goes to the printer. This message isn’t something you would paste into Word and print out, it’s a set of commands that you send directly to the parallel port or network share.
This hack is certainly not new, there are posts about it dating back to 1997 and earlier. There are a few apps around on the internet which make sending the command to the printer very easy, some which even have a GUI. That’s all nice, but… nearly all of these are designed for the newer HP LaserJet printers which connect directly to the network. These printers listen on a TCP port for print jobs, which makes it easy to send commands to them (you just connect to the port and send the commands, no dealing with the print spooler or anything). This is great if your printers are LaserJets, but what if you have another kind of printer, for example a Lexmark?
Firstly, you should check that the printer you have actually supports the command. If you look on your manufacturer’s website there should be a technical document somewhere which details the PJL commands it supports. If it mentions that it supports the RDYMSG setting, then that’s great. Otherwise, either go shopping for a new printer, or just forget about it. Luckily the Lexmark T522 I wanted to play with supported the command.
Secondly, you’ll need an app that will send the command to the printer without using the LaserJet’s TCP interface. If you’re using a LaserJet printer then this isn’t really important, but I’m trying to cater for those other printers. The solution I ended up consisted of a batch file, and a little helper program that generated the command. The helper program would give the command in the format above, and then the batch file would pipe it directly to the printer. To Windows, this looks like just another print job, except it’s missing all the actual printing data. This doesn’t matter, it still works.
How To Do It
Firstly, you’ll need to download ljmsg.exe from This Website, and put it in a folder. Then you’ll need to create a batch file: open Notepad and type the following.
@echo off
ljmsg Out of Meatballs >lpt1
Note: Replace lpt1 with the port of the printer. If it’s connected to your parallel port, this will be lptX where X is the number of the parallel port. If it’s a USB printer, this is likely to be USB00X where X is a number. If it’s a network printer, type //servername/printsharename. If you don’t like meatballs, you might want to replace “Out of Meatballs” with a different message.
Go to File->Save and save the batch file in the same folder as the ljmsg.exe. Remember to add the .BAT file extension at the end of your filename, otherwise it will be saved as a text file which will be useless.
Now when you double-click the batch file, all things going well, your printer should change its ready message. Note that this isn’t permanent: turning off the printer and turning it on again will reset the message to Ready.
Does it really work?
Other Things You Can Do
If you read your PJL documentation, you will find that there are other things you can do to your printer with a few simple commands. One command I found in the Lexmark docs was the LBEEP command, which makes the printer beep three times. It seems useless, but it could actually be pretty fun. What if you send this sequence of commands to the printer?
←%-12345X
@PJL RDYMSG DISPLAY=”SUPER BEEP MODE!”
@PJL LBEEP
@PJL LBEEP
@PJL LBEEP
@PJL LBEEP
@PJL LBEEP
@PJL LBEEP
@PJL LBEEP
@PJL LBEEP
Your printer would beep seemingly uncontrollably, which would be fun to watch but incredibly annoying for everyone nearby.
Obligatory Disclaimer
Note that screwing with printers in a workplace could get you in some trouble depending on who is your IT guy. From what I heard from my sources, the IT guy at our school found it funny … obviously he hasn’t come after me with an axe or anything yet. However, note that your IT guy might not be as happy with you, especially if he doesn’t realise that he should “try turning it off and on again.” If you get fired from your job, or even worse, if you lose email privileges, I’m not responsible. However, most IT guys do actually have a sense of humour, and this hack isn’t really that malicious, so you shouldn’t expect to get into any serious trouble. No guarantees though.
–Ben
Explore posts in the same categories: Computing
April 9th, 2008 at 1:53 am
“If you don’t like meatballs, you might want to replace “Out of Meatballs” with a different message.”
You should have noted that I have a number of other suggestions on the main ljshen webpage at
http://www.ancientpond.com/ljshen.html