Xsane – skenování po síti, síťové skenování

Skenujeme pod Linuxem

Chystáte se pořídit si ke své Linuxové pracovní stanici skener? V tomto článku se podíváme jakým způsobem se pod Linuxem se skenery pracuje, jaké aplikace jsou k dispozici a na co si dát při výběru skeneru s ohledem na provoz pod Linuxem.

* 1) Vybíráme kompatibilní skener
* 2) SANE a TWAIN
* 3) Architektura SANE
* 4) Sane v praxi – příklad zprovoznění SCSI skeneru
* 5) Aplikace
* 5.1) Z příkazové řádky – Scanimage
* 6) Aplikace pro X11
* 6.1) Xsane
* 6.2) Xscanimage
* 7) Zpřístupnění skeneru v síti
* 7.1) Konfigurace sane-net, saned
* 7.2) Webové rozhraní sanecgi
* 8) Odkazy
* 9) Shrnutí

1) Vybíráme skener

O tom, že se Linux úspěšně zabydlel na poli serverů, už dnes není pochyb. Také výrobci hardware na tuto skutečnost zareagovali, a tak už můžeme při výběru hardware pro Linuxové stroje vybírat z široké nabídky podporovaných produktů. Bohužel v oblasti desktopu rozšíření Linuxu stále není velké, a tak se zejména v oblasti multimédií často uživatelé potýkají s nezájmem výrobců hardwaru podpořit nebo alespoň umožnit vývoj potřebných ovladačů, což v značně redukuje možnost uživatelova výběru. Podívejme se tedy, na co bychom si při výběru skeneru měli dát pozor.

Skenery jsou běžně dostupné s rozhraním SCSI, paralelním portem nebo rozhraním USB:

* SCSI: výhodou je rychlost, velká část skenerů s SCSI rozhraním je pod Linuxem podporována. Skenery s SCSI rozhraním používají SCSI protokol s určitými rozšířeními (namátkou např. skenery Epson s výjimkou nejnovějších modelů používají Epson Scanner Language, řada skenerů Hewlett-Packard používá HP Scanner Control Language apod.). Bohužel se v dnešní době od SCSI rozhraní upouští a nahrazuje jej rozhraní USB. Některé skenery jsou přímo výrobcem dodávány s SCSI řadičem, tyto řadiče ovšem mnohdy bývají málo kvalitní a pro některé nejsou k dispozici ovladače pro Linux. To ovšem není rozhodující, protože v takovém případě můžeme skener připojit k jinému SCSI řadiči – podstatné je aby byl podporován samotný skener. Nemáme-li v PC SCSI řadič, postačí obyčejný starší Fast-SCSI řadič podporovaný Linuxem s případnou redukcí na kabel, obojí levně pořídíme v PC bazaru.
* paralelní port: nevýhodou je nízká rychlost, navíc většina skenerů, které komunikují přes paralelní port používá rozdílné proprietární protokoly, jejichž specifikace nejsou k dispozici. Vývojařům ovladačů tak obvykle nezbývá než se uchýlit k metodám reverzního inženýrství, což je velmi pracné. Jen malá část skenerú vybavených paralelních portem je pod Linuxem podporována. Někteří výrobci vyrábí skenery pro připojení k paralelnímu portu, které komunikují stejným protokolem jako jejich SCSI varianty – v tom případě je možné skener používat stejně jako SCSI modely s pomocí ovladače ppSCSI.
* rozhraní USB: stále běžnější, výhodou je rychlost komunikace, pro řadu těchto skenerů již existují kvalitní ovladače.

Podpora pro drtivou většinu skenerů je pod Linuxem realizována pomocí SANE a podrobný seznam podporovaných skenerů je k dispozici na webových stránkách projektu (SCSI, parport, USB). Před koupí skeneru bychom se tedy měli ujistit, že skener je skutečně podporován (je uveden na seznamu podporovaných skenerů, pozor – typ skeneru musí doslovně souhlasit!) a případně dohledat konkrétní zkušenosti uživatelů v diskusních listech týkajících se SANE nebo i jinde (groups.google.com).
2) SANE a TWAIN

SANE (z Scanner Access Now Easy) definuje jednotné aplikační rozhraní (API), přes které aplikace se skenery (a nejen skenery, také kamerami apod.) pod Linuxem a řadou dalším UN*Xových systémů pracují. Detailní specifikace rozraní je k dispozici na stránkách projektu. Na platformách Microsoft Windows či Apple je rozšířené rozhraní TWAIN, tato dvě rozhraní jsou ovšem zcela rozdílná. Autoři SANE toto API vytvářeli s tím, aby toto rozhraní snadno umožňovalo přistupovat k zařízením i přes síť, s čímž architektura TWAINu nepočítá. Existují také projekty WinSANE a SaneTWAIN, které skenery připojené k Linuxovým systémům zpřístupňují na počítačích s Microsoft Windows (WinSANE či SaneTWAIN pak vystupuje jako TWAIN kompatibilní ovladač a na počítačích s Microsoft Windows je pak možné používat obvyklé TWAIN kompatibilní aplikace.)
3) Architektura SANE

SANE rozlišuje mezi „frontendem“ a „backendem“. Frontend je jakákoliv aplikace, které prostřednictvím SANE API přistupuje ke skeneru. Součástí distribuce SANE je např. utilita scanimage (pro příkazovou řádku) nebo xscanimage (pro X Window System). SANE backend je ovladač, který komunikuje na jedné straně s aplikací (frontendem), na straně druhé přímo ovládá dané zařízení a stará se o přenos a konverzi dat. Backend (ovladač) obvykle obsahuje podporu pro více příbuzných modelů, např. SCSI skenery UMAX jsou podporovány ovladačem sane-umax, skenery Epson (SCSI, USB i s paralelním rozhraním) jsou podporovány ovladačem sane-epson (protože všechny modely používají Epson Scanner Language) apod. Některé ovladače (backendy) nekomunikují se vstupními zařízení přímo – např. sane-v4l může komunikovat prostřednictvím rozhraní Video4Linux s kamerou, ovladač sane-net umožňuje přistupovat prostřednictvím sítě ke skenerům připojeným k okolním počítačům. Jak to může vypadat ukazuje následující schéma:

počítač 1           
+—————————+
|                           |
|  xscanimage (frontend)    |    
|      |                    |                     počítač 2
|      |                    |       +—————————–+
|      |                    |  síť  |                             |
|  sane-umax saned sane-net xscanimage |
|  (backend)                |       |   (backend)      (frontend) |
|      |                    |       |                             |
+——|——————–+       +—————————–+
|
skener (UMAX)

4) Sane v praxi – příklad zprovoznění SCSI skeneru

Ukažme si nyní, co obnáší zprovoznění skeneru se SCSI rozhraním. Jako příklad poslouží skener UMAX Astra 1200S – jedná se o starší model s hardwarovým rozlišením 1200×600 dpi a rozhraním SCSI-2, součástí dodávky je i SCSI řadič UDS-IS11 (na čipu je označení DTCT 436P).
skener UMAX Astra 1200S

Tento řadič je nevalné kvality – nepoužívá IRQ či DMA a stojí za to jej nahradit jiným zejména kvůli stabilitě ale i rychlosti – nicméně je jádrem Linuxu podporován. Řadič obsahuje čip NCR_5380 (modul g_NCR5380). Řadiče na bázi tohoto čipu jsou dodávány i s jinými SCSI skenery (např. Mustek). Dále je zapotřebí, aby kromě příslušného ovladače řadiče jádro obsahovalo podporu „generic“ SCSI zařízení. Pokud se rozhodneme dodaný řadič používat, zavedeme modul např. příkazem insmod g_NCR5380 ncr_irq=255 ncr_addr=0x280 dtc_3181e=1. Po úspěšném zavedení modulu bychom měli skener vidět ve výpisu SCSI zařízení:

vanvancito ~ 3$ cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: MITSUMI  Model: CR-2801TE       Rev: 1.10
Type:   CD-ROM                          ANSI SCSI revision: 02
Host: scsi1 Channel: 00 Id: 05 Lun: 00
Vendor: UMAX     Model: Astra 1200S     Rev: V2.8
Type:   Scanner                         ANSI SCSI revision: 02

Jakmile je řadič i skener systémem úspěšně rozpoznán, můžeme přejít ke konfiguraci SANE. Konfigurace SANE je uložena v adresáři /etc/sane.d/. Soubor dll.conf obsahuje seznam ovladačů, které jsou k dispozici, adresář dále obsahuje konfigurační soubory jednotlivých ovladačů – např. soubor umax.conf obsahuje konfiguraci ovladače sane-umax apod. Náš skener je připojen jako zařízení s ID 5 ke kanálu 0 SCSI řadiče 1, soubor umax.conf tedy může vypadat takto:

# můžeme uvést přesně o které zařízení se jedná, pak použijeme
# následující syntaxi:
#
#scsi Vendor Model          Type     Bus    Channel  ID  LUN
scsi  UMAX   „Astra 1200S“  Scanner  scsi1  00       05  00

# alternativně také můžeme uvést cestu k spec. znakovému
# zařízení (v našem případě je /dev/scanner je symbolický
# odkaz na /dev/sg0)
/dev/scanner

Nyní si můžeme pomocí utility scanimage vypsat seznam dostupných zařízení, mezi kterými by se měl objevit i náš skener.

vanvancito ~ 5$ scanimage -L
device `v4l:/dev/video0′ is a V4L BT848A(MIRO PCTV) virtual device
device `umax:/dev/scanner‘ is a UMAX Astra 1200S flatbed scanner
device `umax:/dev/sgc‘ is a UMAX Astra 1200S flatbed scanner
device `pnm:0′ is a Noname PNM file reader virtual device
device `pnm:1′ is a Noname PNM file reader virtual device

Pokud se ve výpisu objeví, můžeme opět pomocí utility scanimage otestovat, zda ovladač správně funguje (volba -T) – pokud vše proběhne v pořádku máme vyhráno a můžeme skenovat:

vanvancito ~ 6$ scanimage -T -d umax:/dev/sgc
scanimage: scanning image of size 850×1400 pixels at 24 bits/pixel
scanimage: acquiring RGB frame, 8 bits/sample
scanimage: reading one scanline, 2550 bytes…    PASS
scanimage: reading one byte…        PASS
scanimage: stepped read, 2 bytes…     PASS
scanimage: stepped read, 4 bytes…     PASS
scanimage: stepped read, 8 bytes…     PASS
scanimage: stepped read, 16 bytes…     PASS

V souvislosti s provozováním SCSI skenerů ještě zmíníme jedno: Linux umožňuje přidávat či odebírat SCSI zařízení za běhu systému. To se nám může velice hodit, protože skener obvykle zapínáme teprve tehdy, chceme-li s ním pracovat. Následujícím příkazem jádru Linuxu sdělíme, že má přidat SCSI zařízení s SCSI ID 5 ke kanálu 0 radiče 1 (poslední parametr – LUN neboli „Logical Unit Number“ je obvykle 0):

echo scsi add-single-device 1  0  5  0 > /proc/scsi/scsi
^  ^  ^  ^
|  |  |  |
radič  |  |  |
kanál  |  |
SCSI ID  |
LUN

V systémovém logu se pak objeví následující hlášení (a skener se také musí objevi v seznamu SCSI zařízení /proc/scsi/scsi):

scsi singledevice 1 0 5 0
Vendor: UMAX      Model: Astra 1200S   Rev: V2.8
Type:   Scanner                        ANSI SCSI revision: 02
Attached scsi generic sg2 at scsi1, channel 0, id 5, lun 0, type 6

Analogicky po ukončení práce se skenerem můžeme následujícím příkazem zařízení odejmout (oba dva příkazy musí spustit uživatel root):

echo scsi remove-single-device 1 0 5 0 > /proc/scsi/scsi

5) Aplikace

Součástí distribuce SANE je několik klientů (frontendů) pro práci se skenery. Je to jednak nástroj pro příkazovou řádku scanimage, se kterým už jsme se setkali a dále utility s grafickým rozhraním – xscanimage a xcam. Hojně používanou aplikací je Xsane. Představme si v krátkosti jednotlivé nástroje.
5.1) Z příkazové řádky – Scanimage

Scanimage je velmi šikovný nástroj, který zpřístupňuje všechny funkce a nastavení, které ovladače jednotlivých typů skenerů nabízejí. Pokud jej spustíme s parametrem –help, vypíše všechna možná nastavení pro daný typ skeneru. Skenovaný obrázek posílá na standardní výstup, např. následující příkaz uloží obrázek ve formátu pnm do souboru test:

azucar ~ 7$ scanimage -d net:vanvancito:umax:/dev/sgc -v > test
scanimage: scanning image of size 850×1400 pixels at 24 bits/pixel
scanimage: acquiring RGB frame
scanimage: min/max graylevel value = 4/255

6) Aplikace pro X11

I když je veškerá funkčnost SANE dostupná z příkazové řádky, většina uživatelů sáhne po grafickém rozhraní, které umožňuje přímo sledovat kvalitu snímaného obrazu. Kromě utilit Xscanimage a Xsane, které si v krátkosti představíme, existují i další aplikace podporující SANE (QuiteInsane založená na knihovně Qt, Scanlite – Java apod.)
6.1) Xscanimage

Tento nástroj slouží jako zásuvný modul (plug-in) pro Gimp. V menu „Soubor“ (File) a „Rozšíření“ (Ext) pak přibude možnost volby zařízení, ze kterého chceme skenovat a po výběru odpovídajícího zařízení se spustí rozhraní pro skenování:
Xscanimage v akci
6.2) Xsane

Xsane je samostatná aplikace pro X Window System, ale může stejně jako xscanimage fungovat i jako plug-in pro Gimp. Oproti xscanimage nabízí více možností konfigurace. Nabízí možnsot ukládání naskenovaných dat ve formátech jpeg, png, pnm, ps, raw a tiff, nabízí funkci „preview“ (náhled), takže uživatel může vizuálně sledovat vliv nastavení parametrů skeneru. Pokud máme k počítači připojenou tiskárnu, můžeme jej použít jako kopírku nebo jako fax, máme-li fax modem. Ovládání je stejně jako v případě xscanimage intuitivní:
Xsane v akci
7) Zpřístupnění skeneru v síti

Jak už bylo zmíněno dříve, rozhraní SANE je navrženo tak, aby umožňovalo pracovat se skenery i dálkově prostřednictvím sítě. Můžeme tedy nakonfigurovat přímo síťový ovladač SANE (sane-net) tak, aby komunikoval se skenerem připojeném k jinému počítači, na kterém běží siťová služba sane (démon saned, viz výše schéma u odstavce „Architektura SANE“). Druhou možností je použít www rozhraní k SANE a skener ovládat prostřednictvím internetového prohlížeče. Tato varianta se uplatní zejména na těch platformách, kde není SANE k dispozici.
7.1) Konfigurace sane-net, saned

Konfigurace sdílení skenerů je jednoduchá. Na straně serveru, ke kterému je připojen skener je potřeba nakonfigurovat démon saned. Nejprve založíme uživatele a skupinu saned, pod kterou saned poběží (z bezp. důvodů není rozumné nechat saned běžet pod uživatelem root) a upravíme přístupová práva ke skeneru tak, aby jej uživatel saned směl používat. Saned používá konfigurační soubor saned.conf, který obsahuje seznam strojů, ze kterých bude akceptovat spojení. Protože je ale spouštěn prostřednictvím démona inetd (nebo xinetd) a Linuxové distribuce zpravidla obsahují tcp_wrappers, postačí do souboru saned.conf zapsat jediný znak „+“ – což znamená, že saned bude akceptovat spojení odevšad. Vlastní kontrolu přístupu k skeneru pak na serveru upravíme v souborech /etc/hosts.deny a /etc/hosts.allow, které nabízejí mocnější syntaxi (viz dokumentace tcp_wrappers, např. manová stránka hosts.allow a tcpd). Dále pak musíme upravit konfiguraci inetd nebo xinetd a definovat zde službu sane, uveďme si nejprve příklad pro xinetd:

# soubor /etc/xinetd.d/sane
#
# default: on
# description: saned scanner service
service sane
{
flags        = REUSE
socket_type    = stream        
wait        = no
user        = saned.saned
server        = /usr/sbin/saned
log_on_failure    += USERID
disable        = no
}

Pokud používáme starší inetd, přidáme do konfiguračního souboru /etc/inetd.conf řádek:

sane  stream tcp nowait saned.saned /usr/sbin/saned.saned

Na obou počítačích pak musíme službu zanést do souboru /etc/services, který obsahuje seznam běžně používaných siťových služeb a jim přiřazených čísel portů. Do /etc/services přidáme následující řádek:

sane 6566/tcp # SANE network scanner daemon

Na klientském počítači se ještě ujistíme, že je v konfiguračním souboru sane dll.conf povoleno použití síťového ovladače (řádek obsahující slovo „net“ musí být odkomentován).

Pokud jsme vše správně nakonfigurovali, můžeme na klientském počítači spustit scanimage s nám již známou vobou -L a ve výpisu dostupných zařízení by se měl skener připojený k serveru objevit:

azucar ~ 4$ scanimage -L
device ‚net:vanvancito:umax:/dev/sgc‘ is a UMAX Astra \
1200S flatbed scanner

7.2) webové rozhraní Sanecgi

Sanecgi j e jednoduché www rozhraní k SANE napsané v Perlu, které pro ovládání skeneru volá utilitu scanimage. Uživatel má možnost ve formuláři zadat rozměry obrázku a formát, naskenovaný obrázek pak může z prohlížeče uložit.
8) Odkazy

* Domovská stránka SANE
* Domovská stránka TWAIN
* WinSANE
* SaneTWAIN
* Sanecgi – www rozhraní k SANE
* Skenery podporované SANE
* Skenery s paralelním portem
* Skenery s rozhraním USB
* Xsane – rozhraní SANE pro X Window System
* rozhraní SANE pro X11 na bázi Qt
* rozhraní SANE v Javě
* Ovladač ppSCSI
* Diskusní listy SANE
* Projekt Primax (skenery nepodporované SANE)
* Projekt HPOJ – podporující HP OfficeJet
* Color management plug-in pro Gimp
* SANE FAQ

9) Shrnutí

Při výběru vhodného skeneru, který chceme používat pod Linuxem, musíme počítat s tím, že zdaleka ne pro všechny běžně dostupné modely skenerů existují pro Linux ovladače. Je tedy zapotřebí předem se ujistit, zda je daný model opravdu dobře podporován. Většina skenerů, které lze pod Linuxem provozovat je podporována v rámci projektu SANE. Rozhraní SANE umožňuje i sdílení skenerů v síti a existuje řada SANE kompatibilních nástrojů jak pro příkazovou řádku tak i pro grafické rozhraní X Window System.

Zdroj: Linuxzone.cz
Autor: David Häring, 27. 02. 2002, 12:00
Sekce: Hardware, Komentářů: 5
Průměrné hodnocení: 3,01