7.6. Scanners

Geschreven door Marc Fonvieille.

7.6.1. Inleiding

In FreeBSD is toegang tot scanners mogelijk met SANE (Scanner Access Now Easy) API uit de FreeBSD Portscollectie. SANE gebruikt ook een aantal FreeBSD apparaatstuurprogramma's om toegang te krijgen tot de hardware van de scanner.

FreeBSD ondersteunt SCSI en USB scanners. Het is van belang te controleren of een scanner door SANE wordt ondersteund voordat er instellingen worden gemaakt. SANE heeft een lijst met ondersteunde apparaten waarin gekeken kan worden of een scanner wordt ondersteund en wat de status voor ondersteuning is. In uscanner(4) staat een lijst met ondersteunde USB-scanners.

7.6.2. Kernel instellen

Zoals hierboven al is aangegeven, worden zowel SCSI als USB-scanners ondersteund. Afhankelijk van de gebruikte scannerinterface zijn verschillende apparaatstuurprogramma's nodig.

7.6.2.1. USB interface

In de GENERIC kernel zitten standaard de apparaatstuurprogramma's die nodig zijn voor ondersteuning van USB-scanners. In het geval wordt besloten tot het maken van een aangepaste kernel, dan dienen de volgende regels in het kernelinstellingenbestand te worden opgenomen:

device usb
device uhci
device ohci
device uscanner

Afhankelijk van de USB-chipset op een moederbord, is alleen device uhci of device ohci nodig, maar het opnemen van beiden in het bestand met kernelinstellingen is niet schadelijk.

Als het niet wenselijk is een nieuwe kernel te bouwen en er wordt geen GENERIC kernel gebruikt, dan kan de apparaatstuurprogrammamodule uscanner(4) direct geladen worden met kldload(8):

# kldload uscanner

Om de module bij iedere systeemstart te laden kan de volgende regel aan /boot/loader.conf worden toegevoegd:

uscanner_load="YES"

Na een herstart met een juiste ingestelde kernel of na het laden van de benodigde module, kan de USB-scanner aangesloten worden. Een regel die de detectie van uw scanner aangeeft zou in de berichtenbuffer van het systeem (dmesg(8)) moeten verschijnen:

uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2

Het bovenstaande geeft aan dat de scanner het apparaatknooppunt /dev/uscanner0 gebruikt.

7.6.2.2. SCSI interface

Als een scanner een SCSI interface heeft, is het belangrijk te weten welk SCSI controllerbord gebruikt gaat worden. Afhankelijk van de gebruikte SCSI chipset, dient het bestand met kernelinstellingen aangepast te worden. De GENERIC kernel ondersteunt de meest voorkomende SCSI controllers. In het bestand NOTES is de juiste instelling te vinden die toegevoegd moet worden aan het bestand met kernelinstellingen. Naast het toevoegen van het juiste SCSI-adapter stuurprogramma, dienen ook de volgende regels opgenomen te worden in het kernelinstellingenbestand:

device scbus
device pass

Als de kernel juist gecompileerd en geïnstalleerd is, horen de apparaten tijdens het opstarten zichtbaar te zijn in de systeemberichtbuffer:

pass2 at aic0 bus 0 target 2 lun 0
pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device
pass2: 3.300MB/s transfers

Als een scanner niet aan staat tijdens het opstarten, is het nog mogelijk handmatig detectie te forceren door de SCSI-bus te laten scannen met camcontrol(8):

# camcontrol rescan all
Re-scan of bus 0 was successful
Re-scan of bus 1 was successful
Re-scan of bus 2 was successful
Re-scan of bus 3 was successful

In het bovenstaande geval zal de scanner ongeveer als volgt verschijnen in de lijst met SCSI-apparaten:

# camcontrol devlist
<IBM DDRS-34560 S97B>              at scbus0 target 5 lun 0 (pass0,da0)
<IBM DDRS-34560 S97B>              at scbus0 target 6 lun 0 (pass1,da1)
<AGFA SNAPSCAN 600 1.10>           at scbus1 target 2 lun 0 (pass3)
<PHILIPS CDD3610 CD-R/RW 1.00>     at scbus2 target 0 lun 0 (pass2,cd0)

Meer details over SCSI-apparaten staan in de hulppagina's voor scsi(4) en camcontrol(8).

7.6.3. SANE instellen

Het SANE systeem is opgesplitst in twee delen: de backends (graphics/sane-backends) en de frontends (graphics/sane-frontends). Het deel met de backends zorgt voor de toegang tot de scanner zelf. In de lijst met door SANE ondersteunde apparaten staat welk backend welke scanner(s) ondersteunt. Het is echt nodig het juiste backend vast te stellen, omdat het anders bijzonder lastig wordt een scanner aan de praat te krijgen. Het deel met frontends levert een grafische scaninterface (xscanimage).

De eerste stap is om de port of het pakket graphics/sane-backends te installeren. Daarna kan met het commando sane-find-scanner gecontroleerd worden welke scanner er door het SANE systeem is gedetecteerd:

# sane-find-scanner -q
found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3

In de uitvoer is te lezen welk type interface en welk apparaatknooppunt worden gebruikt om de scanner met een systeem te verbinden. Het merk en het model worden wellicht niet getoond, maar dat is ook niet echt van belang.

Opmerking: Sommige USB-scanners verlangen dat er firmware wordt geladen. Dit wordt uitgelegd in de hulppagina van het backend. Het is ook van belang sane-find-scanner(1) en sane(7) te lezen.

Hierna kan gecontroleerd worden of de scanner ook te zien is voor een scanner-frontend. Er zit bij de SANE backends een standaard hulpprogramma scanimage(1). Met dit commando kunnen de apparaten zichtbaar gemaakt worden en kan vanaf de commandoregel gescand worden. Met de optie -L kunnen de scannerapparaten getoond worden:

# scanimage -L
device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner

De afwezigheid van uitvoer of een bericht dat aangeeft dat er geen scanners zijn aangetroffen, betekent dat scanimage(1) niet in staat is een scanner te identificeren. Als dit gebeurt, dient het instellingenbestand voor het backend aangepast te worden en dient daar de juiste instelling gemaakt te worden. De map /usr/local/etc/sane.d/ bevat alle bestanden met instellingen voor de backends. Het is bekend dat dit identificatieprobleem optreedt bij bepaalde USB-scanners.

De USB-scanner die in Paragraaf 7.6.2.1 wordt gebruikt, toont bijvoorbeeld de volgende informatie met sane-find-scanner:

# sane-find-scanner -q
found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0

De bovenstaande uitvoer geeft aan dat de scanner juist is gedetecteerd, dat hij de USB-interface gebruikt en is aangesloten op het apparaatknooppunt /dev/uscanner0. Nu kan gecontroleerd worden of de scanner juist wordt geïdentificeerd:

# scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

Omdat in het bovenstaande voorbeeld de scanner niet wordt geïdentificeerd, dient het bestand /usr/local/etc/sane.d/epson.conf gewijzigd te worden. De gebruikte scanner is een EPSON Perfection® 1650, dus in dit geval dient voor de scanner het backend epson gebruikt te worden. Het is van belang om het commentaar in de instellingenbestanden van de backends te lezen. Het aanpassen van regels is eenvoudig: plaats een commentaarkarakter voor alle regels voor andere interfaces dan die nodig zijn weg (in dit geval worden alle regels die beginnen met het woord scsi uitgeschakeld, omdat er een USB interface wordt gebruiken), en dan kan onderaan het bestand een regel met de gebruikte interface en apparaatknooppunt geplaatst worden:

usb /dev/uscanner0

Het is aan te raden de opmerkingen te lezen in het bestand met instellingen voor het backend en ook de hulppagina, omdat daarin meer details en de correcte syntaxis te vinden zijn. Nu kan gecontroleerd worden of de scanner wèl juist wordt geïdentificeerd:

# scanimage -L
device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scanner

De USB-scanner is geïdentificeerd. Het is niet belangrijk dat het merk en model niet overeenkomen met de scanner. Het belangrijkste is het veld `epson:/dev/uscanner0', dat de juiste benamingen voor het backend en het apparaatknooppunt aangeeft.

Als scanimage -L in staat is een scanner goed te zien, dan zijn de instellingen compleet. Er kan nu met het apparaat gescand worden.

Hoewel scanimage(1) in staat is om vanaf de commandoregel te scannen, is het aan te raden beelden te scannen vanuit de grafische gebruikersinterface. SANE heeft een eenvoudige, maar efficiënte grafische interface: xscanimage (graphics/sane-frontends).

Xsane (graphics/xsane) is een ander populair grafisch scanfrontend, dat geavanceerde mogelijkheden biedt, zoals meerdere scanmodi (fotokopie, fax, enzovoort), kleurcorrectie, batchscannen, enzovoort. Beide applicaties zijn als plug-in voor GIMP te gebruiken.

7.6.4. Andere gebruikers toegang tot de scanner geven

Alle voorgaande taken zijn uitgevoerd met root rechten, maar het is wellicht ook nodig dat andere gebruikers de scanner kunnen gebruiken. Dan heeft een gebruiker lees- en schrijfrechten nodig op de apparaatknooppunt voor een scanner. Een USB-scanner gebruikt bijvoorbeeld apparaatknooppunt /dev/uscanner0, waarvan de groep operator eigenaar is. Door gebruiker joe lid te maken van de groep operator, kan die gebruiker de scanner gebruiken:

# pw groupmod operator -m joe

In pw(8) staan meer details. Op het apparaatknooppunt /dev/uscanner0 moeten ook de juiste rechten staan. Standaard kan de groep operator alleen lezen op het apparaatknooppunt. Dit is te wijzigen door de volgende regel aan /etc/devfs.rules toe te voegen:

[system=5]
add path uscanner0 mode 660

Daarna kan de volgende regel aan /etc/rc.conf toegevoegd worden en dient een machine herstart te worden:

devfs_system_ruleset="system"

Meer informatie over de bovenstaande instellingen staan in de hulppagina voor devfs(8).

Opmerking: Natuurlijk dient ook beveiliging een factor te zijn in de afweging of een gebruiker lid gemaakt moet worden van een bepaalde groep, zeker als dat om de groep operator gaat.

Deze en andere documenten kunnen worden gedownload van ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Lees voor vragen over FreeBSD de documentatie alvorens contact te zoeken <questions@FreeBSD.org>.
Vragen over deze documentatie kunnen per e-mail naar <doc@FreeBSD.org>.