Kategória: Linux a sieť

Zmenené: 17. august 2010

Tlačový a skenovací server

Keď som nastavoval multifunkčnú tlačiareň Samsung SCX-4200 Series v Debiane, tak som zistil, že linuxová pracovná stanica môže fungovať nie len ako tlačový server, ale aj ako skenovací server. Tak poďme na to.

Začnem tým menej prekvapivým, teda tlačovým serverom. Na sprístupnenie tlačových služieb možno využiť server CUPS, ktorý je v Debiane štandardne inštalovaný. CUPS predstavuje systém tlače v UNIXových systémoch. Pre svoju prácu používa primárne IPP, ktorý umožňuje nasadenie aj v rozsiahlejších sieťach. CUPS podporuje tieto sieťové protokoly:

  • IPP (Internet Printing Protocol)
  • LPD (Line Printer Daemon),
  • SMB (Server Message Block),
  • AppSocket (Jet Direct).

Celý systém je vydaný pod GNU/GPL a LGPL, takže je dostupný aj pre firmy a domácnosti. Jednoducho všade, kde je potrebná sieťová tlač.

Nastavenie tlačenia

CUPS je nastavený tak, aby umožňoval prístup z lokálneho počítača. To určite stačí, ak tlačíte na tlačiarni len z neho, ale ak chcete využívať možnosti CUPS ako tlačového servera, je potrebné nastaviť ho tak, aby bol prístupný aj z iných počítačov. Pre nasatvenie servera CUPS slúži konfiguračný súbor /etc/cups/cupsd.conf.

Tento konfiguračný súbor je veľmi podobný tomu pre server Apache (ktovie prečo), takže ak viete konfigurovať webový server Apache, máte z polovice hotovo. Nebudem popisovať celý konfiguračný súbor, ale len tie časti, ktoré sú zaujímavé (potrebné) pre sprístupnenie služby v sieti. Najprv povolíme prístup z našej siete (povedzme 192.168.0.0/24) a zakážeme všetko ostatné. V konfiguračnom súbore treba nájsť časť:

<Location>
    Order allow,deny
    Allow localhost
</Location>

Jednoducho stačí dodať povolenie pre lokálnu sieť:

<Location>
    Order allow,deny
    Deny from all
    Allow localhost
    Allow From 192.168.0.*
</Location>

Potom upraviť parametre pre spustenie servera, takže nájsť:

Listen 127.0.0.1:631

zmeniť na:

#Listen 127.0.0.1:631
Port 631

aby server prijímal požiadavky na všetkých rozhraniach, nie len na localhoste a reštartovať tlačový server:

invoke-rc.d cupsys restart

ak máte nastavený firewall, je treba pridať pravidlo, ktoré povolí prístup k serveru, napríklad:

iptables -A INPUT -p TCP --dport 631 -j ACCEPT

A je to. V klientoch treba pridať tlačiareň, ktorá má nastavený port s URL k nastavenej tlačiarni, napríklad http://localhost:631/printers/<meno tlačiarne>, a to aj vo Windows XP.

Nastavenie skenovania

Keď už je možné po sieti tlačiť, prečo by nebolo možné po sieti aj skenovať? Toto je samozrejme trochu nepraktické vo veľkej sieti, ale doma sa to môže zísť (tam nemusí byť k skeneru až tak ďaleko). Zdieľanie skenera v sieti nie je vôbec zložité.

Server

Na serveri, ku ktorému je skener pripojený stačí nastaviť démona saned, ktorý už asi máte v Debiane nainštalovaný. Ak náhodou nie, tak si naištalujte balík sane-utils

aptitude install sane-utils

saned používa konfiguračný súbor /etc/sane.d/saned.conf, v ktorom je zoznam povolených klientov. Povolené klienty môžu byť popísané pomocou mena počítača, jeho IP adresy alebo IP siete (IPv4 aj IPv6), napríklad:

pankrac.skk
192.168.0.3
192.168.0.1/28
[2001:7a8:285e::42:12]
[2001:7a8:285e::42:12]/48

Tip

Všimnite si, že IPv6 adresy sú uzatvorené v lomených zátvorkách.

Ak použijete TCPWrappers, tak nezabudnite správne nastaviť host.allow a host.deny. Myslím, že je lepšie obmedzovať prístup cez TCPWrappers, pretože ak klient nemá prístup k skeneru nedôjde ani k spusteniu démona saned. Nakoniec treba ešte pridať (ak tam už nie je) do /etc/services riadok, ktorý definuje číslo portu pre sane-port (predtým len sane):

sane-port 6566/tcp # SANE network scanner daemon

Skenovací server saned je spúšťaný pomocou démona inetd (xinetd), takže je potrebné aj správne nastavenie týchto démonov.

Inetd

V Debiane bol predvolene používaný démon inetd, ktorý potrebuje pre správne spracovanie požiadaviek na skenovanie mať v konfigurácii tento riadok:

sane-port stream tcp nowait root.saned /usr/sbin/saned saned

alebo ak chcete použiť TCPWrapper, tak:

sane-port stream tcp nowait root.saned /usr/sbin/tcpd /usr/sbin/saned

Ak neviete, či chcete použiť TCPWrapper, tak ho použite (je to na zabezpečovanie sieťvej komunikácie)…

Nezabudnite server inetd reštartovať:

invoke-rc.d openbsd-inetd restart

Xinetd

Na nakonfigrovanie spúšťania démona saned prostredníctvom xinetd, vytvorte v adresári /etc/xinetd.d súbor, ktorý pomenujte napríklad saned a pridajte do neho tento obsah:

# default: on
# description: The sane server accepts requests
# for network access to a local scanner via the
# network.
service sane-port {
   disabled    = no
   id          = saned
   port        = 6566
   socket_type = stream
   wait        = no
   user        = root
   group       = saned
   server      = /usr/sbin/saned
}

Pre istotu reštartovať server xinetd:

invoke-rc.d xinetd restart

Rada

Pozornejší si iste všimli, že démon saned je spúšťaný s právami používateľa root. Nie je to správne, ale pod bežným používateľom sa mi nepodarilo tento skener cez sieť sprevádzkovať.

Malá poznámka

Vo FAQ projektu SANE som sa dočítal, že ovládač Samsung posiela viac informácií ako je treba a toto správanie spôsobuje nefunkčnosť skenovania po sieti. S týmto problémom som sa stretol len čiastočne, tj. skener skenoval, ale XSane zobrazovalo výstražné okno sinformáciou, že skener poslal viac dát ako bolo očakávané. Použil som teda riešenie zvyššie spomínanej rady a toto okno zmizlo. Riešenie spočíva v presmerovaní chybového výpisu niekam (do súboru, do /dev/null, …).

Preto som za riadok (pre xinetd):

server = /usr/sbin/saned

pridal:

server-args = 2> /dev/null

Klient

Na kliente stačí len jedno nastavenie v súbore /etc/sane.d/dll.conf, a to zaistiť, aby bol odkomentovaný riadok,ktorý obsahuje slovo net a v konfiguračnom súbore pre sieťový prístup /etc/sane.d/net.conf zadať IP adresu/meno počítača, ku ktorému je pripojený skener. Skontrolujte (pridajte) do /etc/services rovnaký riadok ako pre server. Keď je to všetko urobené správne, možno na kliente spustiť príkaz scanimage -L a vo výpise dostupných zariadení, by sa mal objaviť skener pripojený k serveru:

scanimage -L
device `net:192.168.0.1:smfp:SAMSUNG SCX-4200 Series on USB:0' is a \
                             SAMSUNG SCX-4200 Series on USB:0 Flatbed Scanner

A možno skenovať až do roztavenia sieťového kábla…

Výber dostupných skenerov

Môže sa ľahko stať, že vo výpise skenerov dostanete viac riadkov, ako napríklad ja:

scanimage -L
device `net:192.168.0.1:smfp:SAMSUNG SCX-4200 Series on USB:0' is a \
                             SAMSUNG SCX-4200 Series on USB:0 Flatbed Scanner
device `net:192.168.0.1:v4l:/dev/video0' is a Noname Pinnacle PCTV 310i virtual device

Znamená to, že mám pripojené dva skenery? Nie, len saned rozpoznal aj televíznu kartu. Čo je iste dobre, ale čo ak nechcem aby sa mi televízna karta miešala medti skenery? Riešene je jednoduché, stačí v konfiguračnom súbore /etc/sane.d/dll.conf zakomentovať riadok, ktorý obsahuje popis backendu príslušného skenera, v tomto prípade v4l. Ak neviete, čo zakomentovať, pozrite na výpis zoznamu skenerov. Ten obsahuje na začiatku slovo net, ktoré udáva, že je to skener pripojený cez sieť, nasledované IP adresou skenovacieho servera. A za touto dvojicou nasleduje backend príslušného skenera (v4l).

Tip

Nezabudnite, že to je treba zakomentovať na serveri a nie na klientovi.