Samsung SCX-4200

Update: Recently upgraded CUPS to 1.4? See

I bought a Samsung SCX-4200 after I heard it had Linux driver support.

The multi-function printer costs about 62GBP (ex VAT), so it's quite cheap for a laser printer.

From Samsung's terrible support Website, the CUPS driver described as build date : 2008-09-11 Unified Linux Driver. Though the driver seems to date from 2007:

d5e3343099e86317e2068097e017ecb3  20070720152943906_UnifiedLinuxDriver.tar.gz

So I am guessing Samsung screwed up the deployment. Anyway after extracting the driver I read through ./cdroot/Linux/ You should never ever run shell scripts as root from an untrusted source, without at the very least carefully reading the file. After reading this bloated file, I was not prepared to execute it. What a horrific mess of an install. Suck less Samsung.

So I know from previous experience with CUPS, that it generally just needs a "ppd" configuration file. So I found a likely suspect:

x61:~/Desktop/samsung% sudo find . -name 'scx4200.ppd'

And via the CUPS administrator printing interface http://localhost:631/ installed it. So far so good. Then an error occured that rastertosamsungspl could not be found. After searching around I found the binaries:

x61:~/Desktop/samsung/cdroot/Linux/i386/at_root/usr/lib/cups/filter% ls
pscms*  rastertosamsungpcl*  rastertosamsungspl*  rastertosamsungsplc*
x61:~/Desktop/samsung/cdroot/Linux/i386/at_root/usr/lib/cups/filter% sudo cp * /usr/lib/cups/filter

And copied them into the place where was trying to put them. And guess what? It works. :) Is the black hole binary a rootkit? Who knows! :(

rastertosamsungspl and friends use an insane amount of shared libraries:

x61:~% ldd /usr/lib/cups/filter/rastertosamsungspl =>  (0xb7fd7000) => /usr/lib/ (0xb7f8b000) => /usr/lib/ (0xb7f73000) => /lib/i686/cmov/ (0xb7e17000) => /usr/lib/ (0xb7ded000) => /usr/lib/ (0xb7d59000) => /usr/lib/ (0xb7d35000) => /lib/ (0xb7d32000) => /usr/lib/ (0xb7c95000) => /lib/i686/cmov/ (0xb7c7b000) => /lib/i686/cmov/ (0xb7c55000) => /lib/i686/cmov/ (0xb7c23000) => /usr/lib/ (0xb7c0e000) => /usr/lib/ (0xb7bb9000) => /usr/lib/ (0xb7b95000) => /usr/lib/ (0xb7b76000)
    /lib/ (0xb7fd8000) => /usr/lib/ (0xb7b6e000) => /lib/i686/cmov/ (0xb7b6a000) => /lib/ (0xb7b67000) => /lib/i686/cmov/ (0xb7b52000) => /usr/lib/ (0xb7b42000) => /usr/lib/ (0xb7b3e000) => /usr/lib/ (0xb7ad6000)

As the operating system evolves one of these depedencies is bound to break. Samsung should have either:

  1. Statically built the binaries
  2. Made the source freely licensed and available

Preference goes to the second option. For example Webconverger cannot distribute a binary blob of a printer driver, so this printer cannot be supported. So I want the source please, Samsung.

The print quality is satisfactory thought the printer had a noisy fan blaring after just one print test page. In such cases I just turn the printer off.

Next I need to try the scanning ability of the device. scan-utils's sane-find-scanner finds:

found USB scanner (vendor=0x04e8 [Samsung], product=0x341b [SCX-4200 Series]) at libusb:003:004

Well done. Though sadly:

x61:~% sudo scanimage -L
No scanners were identified.

Again looking at another proprietary blob (with a FECK load of deps):

x61:~/Desktop/samsung/cdroot/Linux/i386/at_opt/bin% ldd smfpscan =>  (0xb7fac000) => /lib/i686/cmov/ (0xb7f92000) => /usr/lib/ (0xb7899000) => /lib/i686/cmov/ (0xb787f000) => /usr/lib/ (0xb7871000) => /usr/lib/ (0xb7782000) => /usr/lib/ (0xb76c8000) => /lib/i686/cmov/ (0xb76a2000) => /lib/ (0xb7695000) => /lib/i686/cmov/ (0xb7539000)
        /lib/ (0xb7fad000) => /usr/lib/ (0xb750f000) => /usr/lib/ (0xb74f9000) => /usr/lib/ (0xb74a9000) => /usr/lib/ (0xb748a000) => /usr/lib/ (0xb7467000) => /usr/lib/ (0xb7451000) => /usr/lib/ (0xb7449000) => /usr/lib/ (0xb7440000) => /usr/lib/ (0xb743a000) => /usr/lib/ (0xb7431000) => /usr/lib/ (0xb742e000) => /usr/lib/ (0xb741a000) => /usr/lib/ (0xb73a5000) => /usr/lib/ (0xb739d000) => /usr/lib/ (0xb7386000) => /usr/lib/ (0xb7298000) => /usr/lib/ (0xb7294000) => /usr/lib/ (0xb7292000) => /usr/lib/ (0xb727a000) => /usr/lib/ (0xb7254000) => /usr/lib/ (0xb724f000) => /usr/lib/ (0xb7249000)

Seems required. Argh... no :( Why are things such a nightmare? I'm not any closer in restoring a supported print service in maxi. :/

I guess I should have done my research better. After living in Korea I know Korean programmers do not have much experience of Linux and the Web unfortunately due to several reasons like ActiveX lock in. So I will try get the sources to their driver otherwise I'll quickly have a 5kg hunk of useless plastic on my desk.

Trouble shooting tip: Failed to load the PPM image means you are missing ghostscript.

Update: I've noticed via the ArchLinux splix package that there is an opensource implementation of the Samsung Printer Language drivers. Awesome!