Update: Recently upgraded CUPS to 1.4? See http://wiki.archlinux.org/index.php/Cups#USB_printers_under_CUPS_1.4.x
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:
So I am guessing Samsung screwed up the deployment. Anyway after extracting the
driver I read through
./cdroot/Linux/install.sh. 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' ./cdroot/Linux/noarch/at_opt/share/ppd/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 install.sh 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 linux-gate.so.1 => (0xb7fd7000) libcups.so.2 => /usr/lib/libcups.so.2 (0xb7f8b000) libcupsimage.so.2 => /usr/lib/libcupsimage.so.2 (0xb7f73000) libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7e17000) libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb7ded000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb7d59000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7d35000) libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7d32000) libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0xb7c95000) libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7c7b000) libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7c55000) libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb7c23000) libz.so.1 => /usr/lib/libz.so.1 (0xb7c0e000) libtiff.so.4 => /usr/lib/libtiff.so.4 (0xb7bb9000) libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb7b95000) libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0xb7b76000) /lib/ld-linux.so.2 (0xb7fd8000) libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb7b6e000) libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7b6a000) libkeyutils.so.1 => /lib/libkeyutils.so.1 (0xb7b67000) libresolv.so.2 => /lib/i686/cmov/libresolv.so.2 (0xb7b52000) libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0xb7b42000) libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0xb7b3e000) libgcrypt.so.11 => /usr/lib/libgcrypt.so.11 (0xb7ad6000)
As the operating system evolves one of these depedencies is bound to break. Samsung should have either:
- Statically built the binaries
- 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
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
install.sh another proprietary blob (with a FECK load of deps):
x61:~/Desktop/samsung/cdroot/Linux/i386/at_opt/bin% ldd smfpscan linux-gate.so.1 => (0xb7fac000) libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7f92000) libqt-mt.so.3 => /usr/lib/libqt-mt.so.3 (0xb7899000) libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb787f000) libXext.so.6 => /usr/lib/libXext.so.6 (0xb7871000) libX11.so.6 => /usr/lib/libX11.so.6 (0xb7782000) libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0xb76c8000) libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb76a2000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7695000) libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7539000) /lib/ld-linux.so.2 (0xb7fad000) libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb750f000) libaudio.so.2 => /usr/lib/libaudio.so.2 (0xb74f9000) libXt.so.6 => /usr/lib/libXt.so.6 (0xb74a9000) libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0xb748a000) libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb7467000) libz.so.1 => /usr/lib/libz.so.1 (0xb7451000) libXi.so.6 => /usr/lib/libXi.so.6 (0xb7449000) libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb7440000) libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb743a000) libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb7431000) libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb742e000) libXft.so.2 => /usr/lib/libXft.so.2 (0xb741a000) libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb73a5000) libSM.so.6 => /usr/lib/libSM.so.6 (0xb739d000) libICE.so.6 => /usr/lib/libICE.so.6 (0xb7386000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7298000) libXau.so.6 => /usr/lib/libXau.so.6 (0xb7294000) libxcb-xlib.so.0 => /usr/lib/libxcb-xlib.so.0 (0xb7292000) libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb727a000) libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7254000) libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb724f000) libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (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!