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.
Zoals hierboven al is aangegeven, worden zowel SCSI als USB-scanners ondersteund. Afhankelijk van de gebruikte scannerinterface zijn verschillende apparaatstuurprogramma's nodig.
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
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
Deze berichten geven aan dat de scanner
/dev/ugen0.2
als apparaatknooppunt gebruikt.
Voor dit voorbeeld was een EPSON
Perfection® 1650 USB-scanner
gebruikt.
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).
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.
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, “USB-interface” 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.
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, “USB-interface”
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.
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
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 joe
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
gebruiken. De
eerste stap is het aanmaken van deze groep met behulp van het commando
pw(8):usb
#
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
Nu dienen er alleen nog gebruikers aan de groep
toegevoegd te
worden om toegang tot de scanner toe te staan:usb
#
pw groupmod usb -m joe
Lees voor meer details de handleidingpagina van pw(8).