Gentoo Wiki


How to install a Minolta/QMS Magicolor 2300DL as a network-accessible printer
24/12/2006 update - This works for 2400 series as well just replace 2300DL with 2400DL for the manual way



A Minolta/QMS Magicolor 2300DL is a relatively small and inexpensive color laser printer. This printer uses the ZjStream protocol to communicate with the computer.

ZjStream is just a way to communicate data across a cable. It is identical in function to postscript, but it is not postscript compatible.

There are a couple of little tricks to get this printer working under Linux. The tech support will not help you, and online documentation seems a little fuzzy and scattered regarding Linux, but once you know what is going on, it is pretty easy to get working.


The 2300DL has its own server software, including httpd, lpd, telnet, and a few others. You will probably want to run your own print server, because of the following characteristics of the 2300DL server software:

For this reason, I will explain how to set up a print server and a print client.

I am also going to make the following assumptions:

Setting Up the Hardware

Plug in your 2300DL, and connect the ethernet cable to it. Things work best if you have a dhcp server running so that the printer can grab an IP. You probably want to force an IP on it, since you don't want the printer IP to change without warning. If you do not have a dhcp server, you can set the printer's IP address via the small LCD panel and the setup menu. See your printer manual for assistance as this is covered there.

Turn the printer on, and while it is warming up, you can be installing.

Server Installation

Installing the Software

First, set up cups and foomatic printer support.

emerge cups foomatic-db

The zjstream drivers have since been added to portage, so it is recommended you just emerge them. Skip to starting cups if you use this step.

emerge foo2zjs

If, for some reason the portage package does not work for you, you can try to build foo2zjs manually. Get the minolta zjstream drivers and unpack them

tar zxf foo2zjs.tar.gz
cd foo2zjs

./getweb 2300 # Get Minolta 2300 DL .ICM files
make install

This will put a bunch of files into /usr/share/doc/foo2zjs/, /usr/share/man/man1/, and /usr/share/cups/model/. Most importantly, it will create the /usr/share/cups/model/Minolta-magicolor_2300_DL.ppd.gz printer definition.

Then start cupsd:

rc-update add cupsd default
/etc/init.d/cupsd start

Setting up the Printer Manual Way

Now set up the printer. An easy way is to use the the web interface at http://localhost:631. But I will show you the command line way.

Adding a printer using lpadmin.

-p 2300dl-mono name of the printer
-v socket://myprinter:9100 how we connect note: dont try to use ipp or lpd connections on the printer. Even though it claims to be supported, you will pull most of you hair out trying
-E enable the printer
-D "Mono Drivers for 2300DL textual representation of the printer
-L "Bob's Room" physical location of the printer
-P /usr/shar...2300_DL.ppd.gz the PPD definition we are using

Putting it all together, we get:

lpadmin -p 2300dl-mono -v socket://myprinter:9100/ \
-E -D "Mono Drivers for 2300DL" -L "Bob's Room" \
-P /usr/share/cups/model/Minolta-magicolor_2300_DL.ppd.gz

CUPS uses a monochrome driver by default. To use the color driver, you will have to switch profiles somehow. This can be done using the web interface, under "Configure Printer," and from the command line with:

lpadmin -p 2300dl-mono -o ColorMode=Color

Setting up the Printer Website Configuration way

/etc/init.d/cupsd status 

If its not running you can start it with

/etc/init.d/cupsd start 

but if you don't want to have to do this each time you reboot you should add it to your default run level with

rc-update add cupsd default

Allowing Network Access

You want clients to be able to print directly from lpr into your remote server. That way you won't have to install CUPS on the client, and you won't have to synchronize your printers on multiple machines.

So open up your /etc/cups/cupsd.conf, and look for something that looks like this:

File: /etc/cups/cupsd.conf
<Location />
Order Deny,Allow
Deny From All
Allow From

Change it to look more like this:

File: /etc/cups/cupsd.conf
<Location />
Order Deny,Allow
Deny From All
Allow From
# Added to allow remote printing
Allow From 192.168.0.*

Now restart cups:

/etc/init.d/cupsd restart

Testing the Printer

Now it is time to test the printer.

echo "my new printer test page!" > testprint.txt
lpr -P 2300dl-mono testprint.txt

Your 2300dl should warm up and spit out a small page. You could also print /usr/share/cups/data/ for a graphical test page.


If you have the Gimp on the server, then before you print, make sure you click "Setup Printer..." for the printer you will be using. A popup window will display. Make sure it has the following information:

-s Silent mode... don't report the job id
-d2300dl-mono The destination printer
Printer Model: Postscript Level 2
Command: lp -s -d2300dl-mono

Be sure that you do NOT send '-oraw' output to the gimp. This will result in HUNDREDS of ascii pages coming out of your printer. Should this happen, the only way to stop it is to shut off the printer, remove all the paper, and cancel each page one by one.

SAVE your settings so you don't forget next time.


The Linux Client

Installing the Software

Since your client is talking to the server, and the server is translating the print queues into zjstream format, the client does not need all the fancy configuration that the server does.

You should be able to access the server's print queues from either CUPS or LPRng.

I'm not entirely sure if the command is the same in lprng, so feel free to correct me.

Install CUPS or LPRng:

emerge cups 


emerge lprng

Setting up the Printer

If you really want to create a new queue on the client, you can follow what was done on the server, except perhaps change the printer address to the server address. However, I prefer to print directly to the server on my own network. That way should my network topology changes somehow, I only have to update one machine.

In case you forgot which printers are available on the server, or you don't remember what they are called, try this:

lpstat -h myserver -p

This should produce a list of printers available on the server, and each one's respective status:

printer 2300dl-mono is idle.  enabled since Jan 01 00:00

Testing the Printer

Test it out!

Here is where we take advantage of our server print share:

-d 2300dl-mono The destination printer
-h myserver The server to connect to
-t testprint The job name
/usr/ The file to print Note that this MUST be a postscript file, since you are sending RAW data to the queue. Otherwise, cups will complain with: "print_job: No file!?!"
lp -d  2300dl-mono  -h myserver -t testprint /usr/share/cups/data/ 


The client output to the print server should be raw data (since the server formats it), so Gimp can send out raw data from a client machine.

Open up your printer settings by clicking on the "Setup Printer..." button from the print window, and make sure it has the following information:

-s Silent mode... don't report job ids
-d2300dl-mono The destination printer
-hmyserver The server to connect to
-oraw Send raw output
Printer Model: Postscript Level 2
Command: lp -s -d2300dl-mono -hmyserver -oraw

SAVE your settings.


The Windows Client

You will need Samba installed and configured for this. Surprisingly there is no wiki on this right now, so just read for now. Essentially, you need to make sure that Samba talks to CUPS and shares out the printers properly (usually this is very easy).

Just a warning: I don't remember the details, and I cannot seem to confirm this, but if my memory serves me right, it is impossible to use the Point-And-Print feature in Samba with this printer. This has something to do with the Linux PPD or driver compatibility.

Because of this, you need to go to and download a version of the Universal Postscript Printer Driver for Windows.

Double-click it, and follow the instructions from there. Make sure you select "its connected to your network (Network Printer)," and select the correct network printer share. If it complains that the printer doesn't seem to use this driver, install anyway... it will work.

Once the printer is set up, everything is pretty straight-forward.


Firmware update

WARNING: Only update the firmware if you have problems and you think the firmware update could solve them

If you still want to update the firmware of this printer with GNU/Linux you need to do the following steps

emerge wine

Minolta Printer firmware page select the update via network download -- as we're using this possibility

 mkdir firmware_update/ && unzip ~/v286_Update\ via\ -d firmware_update/
if [ -z $1 ];then
       echo "usage: ./`basename $0` printerip"
       echo "no ip given"
       exit 1
echo "press ENTER to start flashing"
wine flashupdate -b $1 bootrom007p2.flt 
wine flashupdate -r $1 vxworks.z 
echo "Wait for Reboot"
echo " Wait"
echo "     Wait"
echo "         Wait"
echo "             Wait- 20 sec"
echo "Press ENTER after the Printer has rebooted"
wine flashupdate -j $1 demoA4.prn 
wine flashupdate -j $1 demoLetter.prn 
wine flashupdate -j $1 menuA4.prn 
wine flashupdate -j $1 menuLetter.prn 
echo "Updated"
chmod +x
./ yourPrinterIp


A lot of excellent work has been done so that you can print here from Linux. A big thanks goes to Rick Richardson for developing the foo2js driver, the people at, and everyone else who contributed.

Be sure to visit their websites and show your appreciation for this and other fine open-source softwares by donating a little money for their hard work.


Other Links

Here are some places I visited in order to set up my own printer and write this article:
Using CUPS from the Command Line
LinuxPrinting Magicolor 2300DL Page
foo2zjs Homepage
Minolta/QMS Magicolor 2300DL Main Page
FreeBSD Lists
A whole lot of trial-and-error.

Retrieved from ""

Last modified: Thu, 28 Aug 2008 05:35:00 +0000 Hits: 25,252