= Scannen unter Linux =

Allgemeines gibts auch auf der Seite LinuxScanner. Diese Seite
enthält meine Erfahrung bei der Installation meines
Parallelport-Scanners unter Linux.

Zum Scannen unter Linux gibt es ein Programmpaket namens SANE
(Scanner Access Now Easy). Dieses ist ausgereift und bietet alle
benötigten Programme. Normalerweise ist es so einfach zu bedienen,
daß dieser Text gar nciht nötig wäre, wenn... 

...ja, wenn SANE sich nicht fast ausschließlich auf SCSI-Scanner
festlegen würde. SANE arbeitet mit sogenannten "Backend-Modulen".
Diese Backends stellen die Treiber für das jeweilige Scanner-Modell
dar. Um auf den Scanner zuzugreifen, benutzen jedoch viele der
Backends ausschließlich den SCSI-Bus. Auch für USB-Scanner gibt es
Backends (mit denen ich jedoch keine Erfahrung habe).
Parallel-Scanner sind jedoch schwieriger zum laufen zu bekommen.

Es gibt zwei Sorten von Scannern am Parallel-Port: Die einen
benutzen ein besonderes, proprietäres Protokoll. Für diese muss ein
besonderer Treiber geschrieben worden sein. Andere Modelle sind
identisch zu einem SCSI-Scanner. Diese haben lediglich eine
Schnittstelle eingebaut, die die SCSI-Daten auf die
Parallel-Schnittstelle umsetzt. Um mit diesen zu kommunizieren,
benötigt man einen "Rück-Umsetzer".

Um erstmal grundsätzlich herauszufinden, ob man eine Chance hat,
sollte man in die unten in den Links angegebenen Seiten schauen.
Dort findet man erste Hinweise, ob sein Scanner funktioniert. Hat
man einen Scanner einer Handelsmarke (wie ich), so kann es sinnvoll
sein, das Gerät erstmal unter Windows zu installieren und dort in
der Geräte-Verwaltung nachzusehen, unter welchem Namen das Ding
eingetragen ist.

Bei meinem '''Highscreen SuperBoostar BASIC''' handelt es sich z.B.
nach dem Windows-Test um einen '''Microtek ScanMaker V300'''.
Dieser steht in der Liste der am Parallelport unterstützten
Scanner.

= Debian-Verträglichkeit =

''Update: Bei einer Neuinstallation Anfang 2003 tat es das
DEbian-sane-Paket ohne Probleme. Dafür gibts seit einiger Zeit
Probleme, pppscsi in neuere Kernel zu patchen. Die Probleme sind
trivial und von Hand zu beseitigen, dennoch scheint der Treiber
nicht mehr unterstützt und auch nicht viel benutzt zu werden. Für
mich war das mit ein Grund, mich nach einem UsbScanner umzusehen.''

Bis der Scanner lief, war ich zweimal gezwungen, Pakete neu zu
kompilieren (Kernel und SANE-Treiber). Selbsterstellte und
installierte Pakete geben naturgemäß immer Ärger mit dem
Paketmanager des Betriebssystems. DPKG (oder RPM bei anderen
Distributionen) kann ja gar nicht wissen, was ich von Hand
installiert habe. Deshalb versuche ich hier, alle Schritte
Debian-konform abzuwickeln. Das heisst, daß ich von allen Sachen
Paket-Dateien erstelle, die dann mit dpkg verwaltet werden können.

Das macht es zwar auf den ersten Blick etwas komplizierter, ist
aber viel einfacher zu handeln, wenn man später mal das
Betriebssystem oder Teile davon upgradet oder wenn man die
Programme auf anderen Rechnern installieren will.

= Stand der Dinge =

Ich habe das hier im Dezember 2001 auf einem Debian-Woody-System
mit Kernel 2.4.16 gemacht. Mein SANE-Paket hat die Versionsnummer
1.0.6-0.1.

= Vorgehensweise =

Als erstes muss das ppscsi-Modul in den Kernel kompiliert werden,
damit SCSI-Geräte am Parallelport vom Kernel als SCSI-Geräte
erkannt werden. Dann wird SANE installiert. In meinem Falle muss
dann der SANE-Treiber noch verändert werden und das SANE-Paket neu
installiert werden, da der mikrotek2-Treiber in der neuesten
Version nötig ist. Dann kann losgescannt werden.

= ppscsi (Kernel patchen) =

Aus der Übersichtsseite für Parallelportscanner (siehe unten
Kapitel "Links") geht hervor, dass mein Scanner den Treiber für das
"OnSpec 90C26"-Interface benötigt. Hierbei handelt es sich um zwei
Kernel-Module.

Leider ist ppscsi aus Gründen, die ich nicht kenne, nicht Teil des
regulären Kernels. Also muss man diesen erst patchen.

Zuerst benötigt man einen Kernel-Source-Baum. Entweder besorgt man
sich mit apt-get die Debian-Sourcen oder man holt sich (wie ich)
einen aktuellen Kernel von www.kernel.org. Hat man noch nie einen
Kernel gebaut, sollte man erstmal die diversen HOWTOs hierzu
durchgehen. (Das ist nicht Teil dieses Textes. Als Startpunkt für
die ".config"-Datei kann man unter Debian übrigens die .config des
laufenden Kernels in /boot finden.)

Nun installiert man das Debian-Paket '''kernel-patch-ppscsi-2.4'''
mit apt-get. Man geht nun in das Kernel-Sourcen-Hauptverzeichnis
und ruft '''/usr/src/kernel-patches/all/apply/linux-ppscsi-2_4_10'
auf. Danach ist der Kernel gepatcht. Nun ruft man ''make
menuconfig'' auf. Im Bereich ''SCSI-Support'', Unterbereich ''SCSI
Low Level Drivers'', findet sich nun ein Eintrag ''Parallel Port
SCSI Adapters''. Den wählt man aus. Darunter erscheinen dann die
spezifischen Module für verschiedene Scanner. In meinem Falle also
der OnSpec-Treiber. Diesen wähle ich auch als Modul aus.

Danach verlässt man die Konfiguration und erzeugt mit '''make-kpkg
kernel-image''' eine neues Kernel-Paket. (Das dauert eine Weile)

Dieses Paket steht danach im Mutterverzeichnis der Kernel-Sourcen
und kann mit '''dpkg -i kernel-image-.....dpkg''' installiert
werden. Sollte dadurch z.B. ein 2.4.16-Kernel durch einen nueen
2.4.16-Kernel ersetzt werden, wird dpkg vor der Ersetzung warnen.
Man kann sie aber trotzdem vornehmen, wenn man danach sofort lilo
aufruft (da fragt dpkg auch nach) und dann sofort neu bootet. Es
ist vielleicht eine gute Idee, einen anderen, alternativen Kernel
in ''/det/lilo.conf'' einzutragen oder eine (getestete) Bootdisk in
der Nähe zu haben.

Danach hat man einen ppscsi-fähigen Kernel. Hat man ppscsi nur als
Modul eingebunden, kann man mit '''modconf''' Debian beibringen,
dass das Modul immer beim hochfahren geladen wird. Dazu sollte man
das onspec-Modul (oder den entsprechenden Treiber für seinen
Scanner) auswählen. Das (übergeordnete) ppscsi-Modul wird dann
automatisch mitgeladen.

Das einzige Programm, das ich kenne, das einen Überblick übr den
kompletten SCSI-Bus ausgibt, ist übrigens ''cdrecord -scanbus''.
Dort muss der Scanner jetzt stehen. Aber auch ''scanimage -L'' aus
dem SANE-Paket sollte den Scanner anzeigen.

= SANE installieren =

Eigentlich braucht man nur das Debian-Paket '''sane''' zu
installieren. Danach steht das Kommandozeilen-Programm
''scanimage'' zur Verfügung, das das grundlegendste Programm zum
scannen ist. 

Wer will, kann auch noch das '''xsane'''-Paket installieren. Es
enthält ein graphisches Frontend. Andere graphische Frontends gibt
natürlich auch noch.

= SANE modifizieren und neu installieren =

Leider lief SANE bei mir so nicht. :-( Also habe ich versucht, den
Scannertreiber auszutauschen und siehe da: Es lief! :-) Um das
Debian-konform hinzubekommen habe ich folgendes gemacht:

Als erstes müssen alle SANE-Pakete deinstalliert werden. Dies geht
mit '''dpkg -r libsane'''.

In der manpage des microtek2-Treibers habe ich die Homepage
entdeckt (siehe unten). Dort gab es eine aktuelle Version des
Treibers. Das dortige Paket bestand aus den beiden Dateien
''microtek2.c'' und ''microtek2.h''. Diese musste ich nun in SANE
einbauen. Dazu habe ich mit ''dpkg source libsane'' die Sourcen von
SANE in mein aktuelles Verzeichnis geholt. (Es muss natürlich in
''/etc/apt/sources.list'' ein Pfad zu Source-Paketen stehen.) In
diesen Sourcen, im ''backend''-Verzeichnis, habe ich die beiden
microtek2-Dateien ausgetauscht. Dann bin ich ins Haputverzeichnis
der SANE-Sourcen gegangen und habe '''dpkg-buildpackage'''
aufgerufen. Danach bin ich wieder in das übergeordnete Verzeichnis
gegangen. Dort sind zwei neue Pakete "libsane" und "libsane-dev"
erzeugt worden. Diese habe ich dann mit '''dpkg -i libsane...'''
installiert. Fertig!

Das von mir erzeugte Paket hat jetzt natürlich die gleiche
Versionsnummer wie das originale (vom Debian-Maintainer). Wie man
diesen Konflikt löst, weiss ich nicht. Hätte ich die Nummer um eins
erhöht, tritt der Konflikt beim nächsten update auf. Ich habe mich
fürs nicht-erhöhen entschieden. Dann wird mein Paket beim nächsten
upgrade durch das Original-Paket ersetzt. Falls der Fehler darin
entfernt ist, ist das ja auch das beste. Falls nicht, muss ich mir
dann ein neues eigenes Paket erstellen.

= Scannen =

Gewonnen hat man, wenn ein Aufruf von "scanimage -L" eine Ausgabe
ergibt, in der der angeschlossene Scanner angezeigt wird. Mit
"scanimage >bla.pnm" kann man nun eine Seite scannen. Weitere
Optionen gibts unter "man scanimage" oder "man sane" und weiteren
manpages, die  fast alle mit "sane-" anfangen (z.B. sane-microtek2
für meinen Scannertreiber).

'''scanimage''' ist ein gutes Programm, um von der Kommandozeile
oder aus Programmen oder Skripten heraus zu scannen. '''xsane'''
ist das richtige, wenn man eine schöne GUI haben möchte. Es braucht
sich zumindest nicht hinter dem bei meinem Scanner mitgelieferten
Windows-Programm zu verstecken.

= Besonderheiten =

Irgendwo stand, das es zu Problemen kommen könnte, wenn das
ppscsi-Modul gleichzeitig mit ide-scsi im Speicher ist. Letzteres
wird IMHO nur benutzt, um auf CD-Writer zuzugreifen. Da ich
ebendies tue, habe ich hier beide Module parallel im Kernel. Bisher
ist mir jedoch noch keine negative Auswirkung aufgefallen. Ich
denke, die Warnung bezog sich auf ältere Versionen der Module.

Während des Scannens friert der Rechner ein, d.h. die Maus kann
nicht mehr bewegt werden etc. Wenn das stört, der kann die
ppscsi-Treiber anweisen, sich weniger Rechenzeit einzusacken, indem
dem eigentlichen Gerätemodul (onscsi in meinem Fall) ein nice-Wert
übergeben wird. Dies wird beim laden des Modules angegeben bzw.
gehört in die Datei ''/etc/modules.conf''. Unter Debian sollte man
diese nicht selber ändern sondern folgendes eingeben:

  echo "options onscsi host0=0,1,1,2,16" >/etc/modutils/onscsi
  update-modules

Bisher habe ich mit dieser Einstellung keine Probleme gehabt. Ich
denke, daß auf langsamen Rechnern oder unter hoher Last Daten
verschwinden können, wenn man nicht aufpasst. Eventuell ist es
daher sinnvoll, mit folgenden Zeilen den Parallelport für den
ECP-Modus freizugeben:

  echo "options parport_pc io=0x378 irq=7 dma=3"
>/etc/modutils/parport
  update-modules

Dazu müssen allerdings im Kernel die erweiterten Parallelport-Modi
freigegeben sein. Außerdem wird so der IRQ 7 belegt, den man je
nach Ausstattung vielleicht für etwas anderes braucht. Auf meinem
Rechner (AMD Duron mit 700 MHz) hatte ich wie gesagt auch ohne ECP
bisher keine Probleme.

= Links =

* http://www.mostang.com/sane - SANE Hauptseite
* http://www.mostang.com/sane/sane-backends.html - von SANE
unterstützte Scanner
* http://www.buzzard.org.uk/jonathan/scanners.html - unterstützte
Parallelport-Scanner
* http://www.torque.net/parport/ppscsi.html - Kernelmodule für
SCSI-Geräte am Parallelport
* http://www.kernel.org - aktuelle Kernel-Sourcen
* http://home.t-online.de/home/karsten.festag/ - Homepage des
microtek2-Treibers