Fuji Xerox WorkCentre PE220 in Ubuntu

Update (08-Nov-08): Updated for Ubuntu 8.10 Intrepid Ibex
Update (30-Apr-08): Improved the workaround with hal-cups-utils
Update (28-Apr-08): Updated for Ubuntu 8.04 Hardy Heron
Update (23-Oct-07): Updated for Ubuntu 7.10 Gutsy Gibbon

I want to make a Fuji Xerox WorkCentre PE220 to work with Ubuntu GNU/Linux. A printer driver for GNU/Linux is found in a CD provided, but DON'T use it as it is probably too old! I finally make it work. Here are the steps involved.

1. Download the Unified Linux Printer Driver from Samsung

Some Xerox printers are Samsung OEM. This Xerox WorkCentre PE220 looks like a clone of Samsung SCX-4521F [www.samsung.com] (Note: This link changed very often! Navigate from the main page if the link does not work.) except that it has a slightly different button layout on the control panel. Download the driver. The latest driver I use is 20070720165133984_UnifiedLinuxDriver.tar.gz (Version 2.00.97) as of this writing.

2. Install the Unified Linux Printer Driver

2.1. Pre-Installation

To ease the installation, turn OFF the printer or DISCONNECT it from the computer before installing the Samsung driver.

2.1.1. (For Ubuntu 8.04/8.10) Enable Support of /proc/bus/usb/
$ sudo vi /etc/init.d/mountdevsubfs.sh

(For Ubuntu 8.04) Look for the comment "# Magic to make /proc/bus/usb work" and uncomment its following four lines for making /proc/bus/usb work.

(For Ubuntu 8.10) Look for the line:

domount devpts "" /dev/pts devpts -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE

and add the following lines just below it:

# Magic to KEEP /proc/bus/usb working
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb
After that, restart the script:

$ sudo /etc/init.d/mountdevsubfs.sh stop
$ sudo /etc/init.d/mountdevsubfs.sh start

2.2. Installation

2.2.1. Samsung Unified Driver

Untar the tarball and grant all files the root ownership:

$ tar zxvf 20070720165133984_UnifiedLinuxDriver.tar.gz
$ cd cdroot/
$ sudo chown -R root:root *

Modify (with sudo) the installation script to use bash:

$ cd Linux
$ sudo vi install.sh

Replace the first line with #!/bin/bash.

Initiate the installation of the printer driver:

$ sudo ./install.sh

Simply follow the instructions in the graphical installer. Do not add any printer model at this moment.

2.2.2. (For Ubuntu 7.10) Modify AppArmor Profiles

Note: This step does not seem necessary for Ubuntu 8.04/8.10.

The default AppArmor CUPS profile shipped with Ubuntu 7.10 is too restrictive for accessing the printer. A workaround is to disable the profile with:

$ sudo aa-complain cupsd
Setting /etc/apparmor.d/usr.sbin.cupsd to complain mode.
$ sudo aa-status cupsd
apparmor module is loaded.
2 profiles are loaded.
0 profiles are in enforce mode.
2 profiles are in complain mode.
   /usr/sbin/cupsd
   /usr/lib/cups/backend/cups-pdf
1 processes have profiles defined.
0 processes are in enforce mode :
1 processes are in complain mode.
   /usr/sbin/cupsd (4505) 
0 processes are unconfined but have a profile defined.

2.3. Printing Configuration

Turn ON the printer now. Ubuntu should detect the printer automatically but will also install an incorrect printer driver for it. The reason being that Ubuntu does not know that the printer is Samsung OEM. Click 'Find driver' or invoke the printer configuration program (system-config-printer). Under the 'Settings' tab, make the following changes:

  • Change the Device URI to use 'MFP USB Port #0', i.e., mfp:/dev/mfp/4.
  • Change the Make and Model to use 'Samsung' -> 'SCX-4x21'.

Now print a test page and hope that everything just works! (You may use Samsung Unified Driver Configurator for this step, but I haven't tried it thoroughly.)

3. Fix the Scanner Driver

After the installation, if you use xsane or scanimage -L, you will get a Segmentation Fault! The problem happens because /usr/lib/libmfp.so.1.0.1 tries to detect some scanners connected to the parallel ports, but as a normal user you cannot do so.

A workaround exists [jacobo.tarrio.org] if your scanner is connected to a USB port. There are two things you need to do here:

1. Use the patched /usr/lib/libmfp.so.1.0.1. Use the fix for the driver version 2.00.97.

2. Log in to the group lp to access the scanner. This is required by the driver. So add yourself to the group lp:

$ sudo adduser $USER lp

Add other users who are permitted to access the scanner in a similar way. Reboot the computer and you should be able to access the scanner now.

For scanner connected to a parallel port: I am not sure if there is a workaround available yet.

4. Uninstall the Unified Linux Printer Driver

When you dismiss the printer months or years later, you may want to uninstall the driver. Luckily, the package comes with an uninstallation script uninstall.sh that works ok but fails to remove at least the following files on Ubuntu (32-bit):

/usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
/usr/lib/libstdc++-libc6.2-2.so.3
/usr/lib/libtiff.so.3.6.1
/usr/lib/libtiff.so.3

These files are installed by install.sh when it fails to find them on your system. There is no efficient way to find out if these libraries are still required by other programs, so the uninstaller just leaves them there. This is mostly harmless. Such files that may be installed but will not be removed are packaged in cdroot/Linux/noarch/lib*.tar.gz.

5. Why So Troublesome?

The reasons behind the 'troublesome' installation are briefly explained here. Knowing the real problems behind helps hackers to find proper workarounds to make the printer work. (There were even more problems in the older versions.)

  • The installation script (install.sh) makes use of some bash extension but specifies to use /bin/sh in its first line, which points to /bin/dash instead of /bin/bash in Ubuntu. This causes some installation problems.
  • The ownerships of some installed files, which should be owned by root:root, are not set properly.
  • The scanner driver will attempt to probe for scanners connected to the parallel ports, but as a normal user you cannot do so.
  • (New in Ubuntu 8.04) The scanner and printer drivers do not look for the USB devices under /dev/bus/usb/ but instead look for them under /dev/bus/usb/, which is obsolete.
  • You need to be in the lp group (instead of the scanner group in the Ubuntu convention) to use the scanner.
  • (New in Ubuntu 7.10; Seems no problem in Ubuntu 8.04/8.10) The default AppArmor CUPS profile is too restrictive for the Samsung driver. You will not be able to access the printer with the default profile.
  • (New in Ubuntu 7.10) The system automatically detects the correct printer model and will install a wrong printer driver. The main reason is that we are using a Samsung driver for a Fuji Xerox printer.
  • [Fixed] The driver was infamous of compromising the security of the underlying GNU/Linux systems by making a few applications to run setuid root. (See this [lwn.net] and this [it.slashdot.org].) Some installation guides will ask you to chmod -s some applications. Luckily this step is no longer required as the terrible issue has been fixed in the latest version. (See this [lwn.net].)

6. Remarks

As you see, it is quite annoying and problematic to install the driver. I like the high-quality multi-function printer but not the driver. Hope that Samsung will spend more efforts improving the driver, or even generously donates the source codes to the free software community. The community can also help in maintaining the code and this should encourage more people to buy the Samsung or Xerox printers.

References

http://ubuntuforums.org/showthread.php?t=341621
http://jacobo.tarrio.org/Samsung_SCX-4200_on_Debian
http://ubuntuforums.org/showpost.php?p=4776310&postcount=114

Comments

Thank you!!!

Thank you!!!

Yes - thanks you kind sir.

I got stuck trying to install our xerox pe220 on a fresh build of ubuntu 8.04. Your instructions were perfect and have saved me many hours. This is my first attempt to move away from windows after ten years+ and it could have been a show stopper but for your effort.

Thank you again - all the best.

David from New Zealand.

Thanks!

Boy, was this a godsend! Thanks for the extremely clear instructions, and the cogent explanations. I would have been sunk without you.

Thank you.

I have been struggling to install this printer dirver for a long time now. Thanks to your clear instructions. Could install in a few mins.

Thank you for the help.

Thanks! It works for the SCX-4100 also.

Thank you so very much for the well-written steps, for not assuming a PhD+ decades of *nix expertise, and especially for the explanation of Why, in addition to How.

Print and scann all working lovely!

Mike F.