Dell V305 Printer on Linux
==========================
:author: Aaron Ball
:email: nullspoon@iohq.net


 
I spent this week hanging out with my wife and grandparents-in-law and spent
some of my time performing the obligatory family tech support (no complaining
here, I love doing that most of the time). To sum up the beginning quickly
because I really don't want to write the post in great detail, my grandfather's
computer got temporarily hosed and the guy from Dell made it even worse (thanks
Deepak). He actually wiped the computer after taking very minimal backups
(thankfully just enough). Not only that, but the restore from the Dell image
actually corrupted a bunch of the core system libraries making installing and
updating Windows or Microsoft software impossible. After wasting an hour trying
to fix this, I finally decided to reinstall a fresh copy of Windows. Then it
hit me, my grandfather doesn't use his computer for much more than Word
documents, PDFs, browsing the internet, and email - all things that Linux does
very well. With that, I suggested to him that he try
http://linuxmint.com/[Linux Mint] (my favorite ready-to-go Linux desktop
distro). After he played around with the live version for a bit, he decided he
really liked it (kudos to you Linux Mint guys) so I went ahead to install it.

I got everything working easily but one thing... his printer.

[[the-dell-v305-printer]]
The Dell V305 Printer
--------------------

The Dell V305 is actually a Lexmark printer rebranded as a Dell.  Specifically,
it is the Lexmark x4650. Thankfully, Lexmark makes
http://support.lexmark.com/index?page=downloadFile&actp=CONTENT&productCode=LEXMARK_X4650&id=DR20523&segment=DOWNLOAD&userlocale=EN_US+&locale=en&oslocale=en_US[a
linux driver] for this thing, but it is of course, very problematic.  When I
first ran the .sh with an embedded binary, it ran fine until I got to the
install where it gave me an ambiguous "failed to install".  When you click
**OK**, it closes the window with the actually error text in it. While the
"failed to install" dialog is up, you can't check the log because it won't let
you select the background window. Also, the background window isn't resizable
so you can't hope for a bigger window to compensate for no scrollback. Great
design, huh?

I did notice on the last three or so lines though that it was trying to remove
a .deb file. With that, I set out to search for it.


[[the-fun-begins]]
The Fun Begins
--------------

If you run the
'http://support.lexmark.com/index?page=downloadFile&actp=CONTENT&productCode=LEXMARK_X4650&id=DR20523&segment=DOWNLOAD&userlocale=EN_US+&locale=en&oslocale=en_US[lexmark-08z-series-driver-1.0-1.i386.deb.sh]'
file with the _--keep_ switch, the script will not remove all files extracted
to perform the install process. This will leave you with a nicely populated tmp
folder.

If you cd into the tmp directory, you will find a file called
**installarchived_all**. This is actually an lzma archive file. What you want
to do now is extract this file using the following command

----
tar -xvf ./installarchived_all --lzma
----

This will extract several files, one of which will be called
__lexmark-08z-series-driver-1.0-1.i386.deb__. You might think that this is a
time for rejoicing, but alas it is not. From this point we should be able to
run _dpkg -i ./lexmark-08z-series-driver-1.0-1.i386.deb_ and it would work, but
it won't. If you do that you will receive the following friendly error:

----
dpkg: error processing ./lexmark-08z-series-driver-1.0-1.i386.deb (--install):
 parsing file '/var/lib/dpkg/tmp.ci/control' near line 9 package 'lexmark-08z-series-driver':
 blank line in value of field 'Description'
Errors were encountered while processing:
 ./lexmark-08z-series-driver-1.0-1.i386.deb
----

What? The .deb file was constructed wrong? 'Tis a shame. Here's where it gets
really fun. What we need to do now is extract the deb file, modify the contents
of a single file, and repackage the whole thing back up.

First, let's create a working directory, copy our deb file in there, extract
it, and set up a deb package folder structure. Create our working directory and put the bad .deb file in there.

----
mkdir ./working
cp ./lexmark-08z-series-driver-1.0-1.i386.deb ./working/
cd working
----

Extract the .deb file and clean up a bit (don't forget the period at the
end of the dpkg-deb line).

----
dpkg-deb -R lexmark-08z-series-driver-1.0-1.i386.deb .
rm ./lexmark-08z-series-driver-1.0-1.i386.deb
----


[[fixing-the-problem]]
Fixing the Problem
------------------

The problem as you like noticed earlier is because the .deb file has a file
named _control_ that is improperly formatted. Specifically, control files
cannot have blank lines in them. To have a "blank" line in a .deb control file,
you must have a period instead. That said, here's how we fix the file.

Open up the control file in the DEBIAN directory and put a ' .' (yes, with the
space before it) like so

----
Description:
 Lexmark 08z Series Drivers Package
 .
 This package contains the Lexmark 08z Series Drivers. This is
 a copyrighted package, please refer to the copyright notice
 for details about using this product.
----

Now that that's done, We just need to repackage the .deb file and install it.
To do that, cd out to one directory above the lexmark-08z directory (the
working directory) and run **dpkg -b lexmark-08z**. This will take a few
seconds (it's 22 megs) but it should create a file called lexmark-08z.deb. Now
install this using **dpkg -i**.

----
dpkg -b lexmark-08z dpkg -i ./lexmark-08z.deb
----

_I'm too lazy to write the rest out right now so here's the shorthand_

Now you have to edit a ton of files in __/usr/local/lexmark/08zero/etc/__.

Firstly, we need to edit 99-lexmark-08z.rules and take the following
line on the top so it looks like so

----
ATTRS{idVendor}=="413c", ATTRS{idProduct}=="5305", MODE="666"

ACTION!="add", GOTO="lexmark_custom_rules_end"
ATTRS{idVendor}=="413c", ATTRS{idProduct}=="5305", MODE="666"
ATTRS{idVendor}=="043d", ATTRS{idProduct}=="0142", MODE="666"
ATTRS{idVendor}=="043d", ATTRS{idProduct}=="0150", MODE="666"
ATTRS{idVendor}=="043d", ATTRS{idProduct}=="013f", MODE="666"
ATTRS{idVendor}=="043d", ATTRS{idProduct}=="0151", MODE="666"
ATTRS{idVendor}=="043d", ATTRS{idProduct}=="0116", MODE="666"
LABEL="lexmark_custom_rules_end"

----

Now that we've updated the 99-lexmark-08z.rules file, we need to edit a load of
the lxd*.conf files. I say we need to edit lots of them because I'm still not
sure which one or combination of them actually did the trick. I can say though
that just lxdm.conf wasn't enough.

Now, edit the following files

* lxdm.conf
* lxdq.conf
* lxdw.conf
* lxdu.conf
* lxdx.conf

...and replace *all* instances of _0116_ with _5305_ and all instances of
_043D_ with _413C_

Once that is done, add your printer from the cups admin console
(localhost:631). Once you get to the driver part, select Lexmark 3600-4600 and
you should be set!

**Whew**

Finally, here are the resources I found to help me out with this
solution.

* http://ubuntuforums.org/showpost.php?p=7809488&postcount=1
* http://ubuntuforums.org/archive/index.php/t-1243920.html
* http://ubuntuforums.org/archive/index.php/t-1554718.html
* http://ubuntuforums.org/showthread.php?t=1379902
* http://ubuntuforums.org/showthread.php?t=1554718&page=1


Category:Linux
Category:Debian


// vim: set syntax=asciidoc:
