7.6. Skanery obrazów

Written by Marc Fonvieille.

7.6.1. Wstęp.

We FreeBSD dostęp do skanerów jest udostępniany przez SANE (Scanner AccessNow Easy) API, dostępne w Kolekcji Portów FreeBSD. SANE używa także niektórych ze sterowników urządzeń FreeBSD aby uzyskać dostęp do sprzętu sterownika.

FreeBSD obsługuje skanery SCSI oraz USB. Zanim zrobimy cokolwiek, upewnijmy się, że SANE obsługuje nasz skaner. SANE posiada listę obsługiwanych urządzeń, zawierającą informację nt. obsługi skanera, oraz jego status. Strona podręcznika uscanner(4) także udostępnia listę obsługiwanych skanerów USB.

7.6.2. Konfiguracja jądra

Jak wspomniałem powyżej, interfejsy SCSI oraz USB są obsługiwane. W zależności od interfejsu naszego skanera, różne sterowniki urządzeń są wymagane.

7.6.2.1. Interfejs USB

Jądro GENERIC domyślnie zawiera sterowniki potrzebne do obsługi skanerów USB. Jeśli używamy własnego jądra, upewnijmy się, że następujące linie są obecne w pliku konfiguracyjnym jądra:

device usb
device uhci
device ohci
device uscanner

Zależnie od chipsetu USB na naszej płycie głównej, będziemy potrzebowali tylko device uhci, albo device ohci. Posiadanie obu też jest możliwe i nieszkodliwe.

Jeśli nie chcemy przebudować jądra, a nasze nie jest GENERIC i nie posiada obsługi tych urządzeń, możemy bezpośrednio załadować sterownik urządzenia uscanner(4) używając polecenia kldload(8):

# kldload uscanner

Aby załadować ten moduł przy każdym starcie systemu, dodajmy tą linijkę do /boot/loader.conf:

uscanner_load="YES"

Po ponownym uruchomieniu komputera z odpowiednim jądrem, lub po załadowaniu wymaganego modułu, podepnijmy skaner USB. Linia pokazująca wykrycie naszego skanera powinna pojawić się w buforze wiadomości systemowych (dmesg(8)):

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

Przykład ten pokazuje, że nasz skaner używa węzła /dev/uscanner0.

7.6.2.2. Interfejs SCSI

Jeśli nasz skaner posiada interfejs SCSI, ważnym jest, żebyśmy znali jaki kontroler SCSI będziemy używali. W zależności od użytego chipsetu SCSI, będziemy musieli poprawić nasz plik konfiguracyjny jądra. Jądro GENERIC obsługuje większość popularnych kontrolerów SCSI. Po przeczytaniu pliku NOTES dodajmy odpowiednią linię do pliku konfiguracyjnego jądra. Dodatkowo do sterownika adaptera SCSI wymagane są następujące linie w pliku konfiguracyjnym jądra:

device scbus
device pass

Po skonfigurowaniu, skompilowaniu i zainstalowaniu jądra, powinniśmy zobaczyć podczas bootowania urządzenia w buforze wiadomości systemowych:

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

Jeśli nasz skaner nie był włączony podczas startu systemu, możemy wymusić jego wykrycie przez skanowanie szyny SCSI poleceniem 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

Skaner pojawi się w liście urządzeń SCSI:

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

Więcej szczegółów o urządzeniach SCSI jest dostępnych na stronach podręcznika scsi(4) i camcontrol(8).

7.6.3. Konfiguracja SANE

System SANE jest podzielony na dwie części: zaplecza (graphics/sane-backends) i nakładkę (graphics/sane-frontends). Zaplecza obsługują dostęp do skanera. Lista obsługiwanych urządzeń SANE'a określa które zaplecze będzie obsługiwało nasz skaner. Ważne jest, aby ustalić właściwe zaplecze dla naszego skanera, jeśli chcemy go używać. Część nakładka obsługuje graficzny interfejs skanowania (xscanimage).

Pierwszą rzeczą, którą należy zrobić, jest zainstalowanie portu graphics/sane-backends, albo paczki. Następnie należy użyć polecenia sane-find-scanner, aby sprawdzić czy SANE wykrywa skaner:

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

Wyjście pokaże typ interfejsu skanera i węzeł urządzenia używany do podłączenia urządzenia do systemu. Producent i model mogą się nie pojawić, to nie jest ważne.

Notatka: Niektóre skanery USB wymagają załadowania firmware. Jest to wyjaśnione na stronie podręcznika zapleczy (sane-backends). Powininniśmy także przeczytać strony sane-find-scanner(1) i sane(7).

Teraz musimy sprawdzić, czy skaner będzie zidentyfikowany przez nakładkę. Domyślnie w zapleczach SANE jest narzędzie scanimage(1). Komenda ta pozwala nam na wypisanie urządzeń i zeskanowanie obrazka z wiersza poleceń. Opcja -L jest używana do wypisania urządzeń skanujących:

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

Brak wyjścia albo wiadomość mówiąca o tym, że nie zidentyfikowano skanerów wskazuje, że scanimage(1) nie mógł zidentyfikować skanera. Jeśli to się zdarzy, edytujmy plik konfiguracji zaplecza i określmy urządzenie skanujące. Katalog /usr/local/etc/sane.d/ zawiera wszystkie pliki konfiguracyjne zaplecza. Problem identyfikacji nie występuje ze skanerami USB.

Dla przykładu, ze skanerem USB użytym w Sekcja 7.6.2.1, sane-find-scanner da nam następującą informację:

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

Skaner został prawidłowo wykryty, używa interfejsu USB i jest podpięty do węzła /dev/uscanner0. Teraz możemy sprawdzić, czy skaner jest prawidłowo zidentyfikowany:

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

Jeśli skaner nie został zidentyfikowany, musimy edytować plik /usr/local/etc/sane.d/epson.conf. Model skanera to EPSON Perfection® 1650, więc wiemy, że skaner będzie używał zaplecza epson. Przed przystąpieniem do edycji przeczytajmy komentarze pomocy w plikach konfiguracyjnych zaplecza. Zmiany wierszy są całkiem proste: zakomentujmy wszystkie linie, które mają zły interfejs dla naszego skanera (w naszym przypadku zakomentujemy wszystkie linie zaczynające się na scsi, jako że nasz skaner ma interfejs USB). Następnie dodajmy na końcu pliku wiersz określający interfejs i używany węzeł. W tym przypadku dodamy następujący wiersz:

usb /dev/uscanner0

Upewnijmy się, że przeczytaliśmy komentarze dostarczone w pliku konfiguracyjnym zaplecza oraz stronę podręcznika zaplecza, która dostarcza dodatkowe informacje o konfiguracji i omawia prawidłową składnię do użycia. Teraz możemy sprawdzić, czy skaner jest zidentyfikowany:

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

Nasz skaner USB został zidentyfikowany. Nie ważne, czy rodzaj i model się zgadzają. Kluczowym elementem jest pole `epson:/dev/uscanner0', które daje nam prawidłową nazwę zaplecza i prawidłowy węzeł urządzenia.

Jeśli polecenie scanimage -L widzi skaner, konfiguracja została zakończona, a urządzenie jest gotowe do pracy.

Dopóki scanimage(1) nie pozwala nam wykonać skanowania z wiersza poleceń, preferowaną metodą jest użycie graficznego interfejsu użytkownika do wykonania skanowania. SANE oferuje prosty ale efektowny graficzny interfejs: xscanimage (graphics/sane-frontends).

Xsane (graphics/xsane) jest innym popularnym graficznym interfejsem skanowania. Interfejs ten oferuje zaawansowane możliwości, takie jak różne tryby skanowania (fotokopia, fax, itp.), korekcja kolorów, grupowe skanowanie itp. Obie z tych aplikacji można używać jako wtyczkę GIMP'a.

7.6.4. Udostępnianie skanera innym użytkownikom

Wszystkie poprzednie działania zostały zrobione z uprawnieniami roota. Mimo tego, możemy chcieć udostępnić nasz skaner innym użytkownikom. Użytkownik chcący go używać, musi mieć prawa odczytu i zapisu do węzła używanego przez skaner. Jako przykład, nasz skaner USB używa węzła /dev/uscanner0, który jest w posiadaniu grupy operator. Dodając użytkownika joe do grupy operator pozwalamy mu na korzystanie ze skanera:

# pw groupmod operator -m joe

Po więcej szczegółów zobacz stronę podręcznika pw(8). Musimy także ustawić prawidłowe prawa zapisu (0660 lub 0664) do węzła /dev/uscanner0. Domyślnie grupa operator może go tylko odczytywać. Możemy to zrobić przez dodanie następujących linijek do pliku /etc/devfs.rules:

[system=5]
add path uscanner0 mode 660

Następnie dodajmy to do /etc/rc.conf i uruchommy ponownie komputer:

devfs_system_ruleset="system"

Więcej informacji dotyczących tych wierszy możemy znaleźć na stronie devfs(8) w podręczniku.

Notatka: Oczywiście z powodów bezpieczeństwa pomyślmy dwa razy zanim dodamy użytkownika do jakiejś grupy, w szczególności grupy operator.

Ten i inne dokumenty można pobrać z ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

W przypadku pytań o FreeBSD prosimy przeczytać dostępną dokumentację przed kontaktem z <questions@FreeBSD.org>.
W sprawie zapytań o tę dokumentację prosimy o kontakt z <doc@FreeBSD.org>.