8.7. Scanners

Geschreven door Marc Fonvieille.

8.7.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. Op systemen van vóór FreeBSD 8.X staat in de handleidingpagina van uscanner(4) een lijst met ondersteunde USB-scanners.

8.7.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.

8.7.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
device ehci

Op systemen van vóór FreeBSD 8.X is de volgende regel ook nodig:

device uscanner

Op deze versies van FreeBSD biedt het apparaat uscanner(4) ondersteuning voor de USB-scanners. Sinds FreeBSD 8.0 ondersteunt de bibliotheek libusb(3) dit direct.

Na een herstart met de juiste kernel 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:

ugen0.2: <EPSON> at usbus0

Of op een FreeBSD 7.X systeem:

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

Deze berichten geven aan dat de scanner òfwel /dev/ugen0.2 òf /dev/uscanner0 als apparaatknooppunt gebruikt afhankelijk van de versie van FreeBSD die we draaien. Voor dit voorbeeld was een EPSON Perfection® 1650 USB-scanner gebruikt.

8.7.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).

8.7.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

Of, met bijvoorbeeld de USB-scanner die in Paragraaf 8.7.2.1 wordt gebruikt:

# scanimage -L
device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner

Deze uitvoer komt van een FreeBSD 8.X systeem, het item 'epson2:libusb:/dev/usb:/dev/ugen0.2' geeft de naam van het backend (epson2) en het apparaatknooppunt (/dev/ugen0.2) dat door onze scanner wordt gebruikt.

Opmerking: 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 8.7.2.1 wordt gebruikt, wordt in FreeBSD 8.X prima gedetecteerd en werkt daar, maar in eerdere versies van FreeBSD (waar uscanner(4) wordt gebruikt) toont het 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 het 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/epson2.conf gewijzigd te worden. De gebruikte scanner is een EPSON Perfection 1650, dus in dit geval dient voor de scanner het backend epson2 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.

8.7.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. Onze USB-scanner gebruikt bijvoorbeeld apparaatknooppunt /dev/ugen0.2 wat in feite slechts een symbolische koppeling is naar het echte apparaatknooppunt genaamd /dev/usb/0.2.0 (een blik op de inhoud van de map /dev bevestigt dit). Zowel de symbolische koppeling als het apparaatknooppunt zijn van respectievelijk de groepen wheel en operator. Door de gebruiker joe aan deze groepen toe te voegen kan hij de scanner zien, maar vanwege duidelijke veiligheidsredenen dient het toevoegen van een gebruiker aan elke groep met zorg te gebeuren, vooral aan de groep wheel. Een betere oplossing is om een specifieke groep aan te maken voor het gebruik van USB-apparaten en de scanner toegankelijk te maken voor leden van deze groep.

We zullen dus bijvoorbeeld een groep genaamd usb gebruiken. De eerste stap is het aanmaken van deze groep met behulp van het commando pw(8):

# pw groupadd usb

Hierna moeten we de symbolische koppeling /dev/ugen0.2 aanmaken en het apparaatknooppunt /dev/usb/0.2.0 met de juiste schrijfpermissies toegankelijk maken voor de groep usb (0660 of 0664), omdat standaard alleen de eigenaar van deze bestanden (root) ernaar kan schrijven. Dit alles wordt gedaan door de volgende regels aan /etc/devfs.rules toe te voegen:

[system=5]
add path ugen0.2 mode 0660 group usb
add path usb/0.2.0 mode 0666 group usb

Gebruikers van FreeBSD 7.X hebben waarschijnlijk de volgende regels met het juiste apparaatknooppunt, /dev/uscanner0, nodig:

[system=5]
add path uscanner0 mode 0660 group usb

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).

Nu dienen er alleen nog gebruikers aan de groep usb toegevoegd te worden om toegang tot de scanner toe te staan:

# pw groupmod usb -m joe

Lees voor meer details de handleidingpagina van pw(8).