Naprej Nazaj Kazalo

11. Omrežje

Ena od lastnosti večine tiskalniških čakalnih strežnikov je tudi zmožnost tiskanja prek omrežja na tiskalnike, ki so fizično priključeni na drugačen stroj. S pazljivo kombinacijo filtrirnih skriptov in izbranih pripomočkov lahko transparentno tiskate na tiskalnike v vseh vrstah omrežij.

11.1 Tiskanje na gostitelja z Unix/lpd

Če želite dovoliti oddaljenim strojem tiskati na vašem tiskalniku, morate našteti te stroje v datoteki /etc/hosts.equiv ali /etc/hosts.lpd. (Pozor, naštetje v hosts.equiv ima tudi druge učinke; preverite, ali veste, kaj počnete, če tam navedete neki stroj.) Tiskanje na svojem tiskalniku lahko dovolite tudi le posameznim uporabnikom drugih strojev s tem, da uporabite atribut rs; preberite stran ukaza lpd v referenčnem priročniku.

S pdq

S PDQ lahko definirate tiskalnik z vmesnikom vrste ,,bsd-lpd``. Ta vmesnik vzame za argumenta ime oddaljenega računalnika in ime čakalne vrste; čarovnik za definicijo tiskalnika vas bo povprašal po tem dvojem.

Z lpd

Za tiskanje na drugem stroju napravite podoben vnos v datoteko /etc/printcap:

# ODDALJENI djet500
lp|dj|deskjet:\
        :sd=/var/spool/lpd/dj:\
        :rm=stroj.tam.nekje.ustanova.si:\
        :rp=printername:\
        :lp=/dev/null:\
        :sh:
Vedite, da je na lokalnem stroju še vedno čakalni imenik, ki ga ureja lpd. Če je oddaljeni stroj zaseden ali ni priključen, tiskalniška opravila čakajo na lokalnem stroju, dokler jih ni mogoče poslati.

Z rlpr

Ukaz rlpr lahko uporabite za pošiljanje tiskalniških opravil neposredno v čakalno vrsto oddaljenega stroja, ne da bi morali posebej nastavljati lpd. To je najbolj uporabno v položajih, ko le tu in tam tiskate na različne tiskalnike. Iz napovedi programa rlpr:

Rlpr uporablja TCP/IP za pošiljanje opravil na strežnike lpd kjerkoli v omrežju.

Za razliko od lpr ni treba, da so oddaljeni tiskalniki eksplicitno znani stroju, s katerega želite tiskati (npr. prek datoteke /etc/printcap), in je torej precej bolj fleksibilen in potrebuje manj upravljanja.

rlpr lahko uporabljate povsod tam, kjer uporabljate tradicionalni lpr, in je nazaj združljiv s tradicionalnim ukazom lpr BSD.

Glavna moč, ki jo daje rlpr, je moč oddaljenega tiskanja kjerkoli, kamorkoli, ne glede na nastavitve sistema, s katerega želite tiskati. Deluje lahko kot filter, prav kot tradicionalni lpr, zato lahko odjemalci, kot so netscape, xemacs itd., ki se izvajajo na oddaljenem stroju, tiskajo na vašem lokalnem stroju z malo truda.

Rlpr je dostopen na MetaLabu.

11.2 Na tiskalnik v Windows ali prek Sambe

V spisu Printing to Windows mini-HOWTO je več Informacij, kot jih najdete tukaj.

Iz PDQ

Kolikor vem, ni vnaprej zgrajenega vmesnika SMB, a bi ga bilo precej lahko narediti z uporabo nabora modelov vmesnika Netatalk Appletalk. Naj ga, prosim, kdo naredi in pošlje za vključitev!

Za več namigov o tem, kako to narediti, preberite razdelek o Windows/LPD.

Iz LPD

Mogoče je preusmeriti tiskalniško čakalno vrsto skozi program smbclient (del zbirke samba) na tiskalniško storitev SMB, počivajočo na TCP/IP. Samba vključuje skript, imenovan smbprint, ki to stori. Na kratko, postavite konfiguracijsko datoteko za določen tiskalnik, na katerega tiskate, v čakalni imenik (spool directory) in namestite skript smbprint kot if.

Vnos v /etc/printcap je tak:

lp|remote-smbprinter:\
    :lp=/dev/null:sh:\
    :sd=/var/spool/lpd/lp:\
    :if=/usr/local/sbin/smbprint:

Za več podatkov, kako to sestaviti, morate prebrati dokumentacijo znotraj skripta smbprint.

Uporabite lahko tudi smbclient in oddaste datoteko neposredno v tiskalniško storitev SMB, ne da bi vključevali lpd. Glej stran v referenčnem priročniku (man smbclient).

11.3 Tiskanje na tiskalnik v NetWare

Zbirka ncpfs obsega pripomoček, imenovan nprint, ki poskrbi za enako funkcionalnost kakor smbprint, le za NetWare. Paket ncpfs dobite na MetaLabu. Iz vnosa LSM različice 0.16:

S paketom ncpfs lahko nameščate pogone vašega strežnika NetWare v Linuxu. Lahko tudi tiskate v tiskalniške vrste NetWarea in uvrščate tiskalniške vrste NetWarea v tiskalniški sistem Linuxa. Potrebujete jedro 1.2.x ali 1.3.54 in večje. ncpfs ne deluje s katerimkoli jedrom pod 1.3.54.

Iz LPD

Če želite pripraviti nprint do delovanja čez lpd, napišite majhen ukazni skript za izpis standardnega vhoda (stdin) na NetWareov tiskalnik in ga namestite kot vhodni filter (if) za tiskalniško vrsto za lpd. Dobili boste nekaj takega:

sub2|remote-NWprinter:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/sub2:\
        :if=/var/spool/lpd/nprint-script:
Skript nprint-script je lahko videti približno takole:
#! /bin/sh
# Najprej preizkusite račun "guest" brez gesla!
/usr/local/bin/nprint -S net -U name -P passwd -q printq-name -

11.4 Tiskanje na tiskalnik pod EtherTalk (Apple)

Paket netatalk vključuje nekaj takega kot nprint in smbclient. Drugi so dokumentirali postopek za tiskanje v omrežja Apple in iz njih veliko bolje, kot ga bom sam kdajkoli; glej spis Linux Netatalk-HOWTO.

Iz PDQ

PDQ obsega deklaracijo vmesnika, imenovanega ,,appletalk``. Ta uporablja paket Netatalk za tiskanje na omreženi tiskalnik Apple. Le izberite vmesnik v čarovniku ,,Add printer`` v xpdq.

11.5 Tiskanje na omrežni tiskalnik

Številni tiskalniki imajo omrežni vmesnik, na katerega lahko neposredno tiskate, navadno s pomočjo protokola LPD. Uporabljati morate navodila, priložena tiskalniku ali njegovemu omrežnemu priključku, na splošno pa taki tiskalniki delujejo z lpd in imajo eno ali več čakalnih vrst, na katere lahko tiskate. HP, na primer, lahko deluje s podobno datoteko printcap:

lj-5|remote-hplj:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/lj-5:\
        :rm=ime.tiskalnika.si:rp=raw:

Ali pa uporabite naslednja argumenta za vmesnik bsd-lpd za PDQ: REMOTE_HOST=ime.tiskalnika.si in QUEUE=raw.

Tiskalniki HP Laserjet z vmesniki Jet Direct na splošno podpirajo dve vgrajeni vrsti za lpd -- surovo (,,raw``), ki sprejema PCL (in morda tudi postscript), in tekstovno (,,text``), ki sprejema navaden ASCII (in samodejno odpravi učinek stopnic). Če imate tiskalnik z JetDirect Plus3 s tremi vhodnimi vrati, se vrste imenujejo ,,raw1``, ,,text2`` in tako naprej.

Bodite pozorni na to, da je podjetje ISS identificiralo večje število napadov, ki blokirajo vmesnike HP Jetdirect. Večina se je zgodila od začetka jeseni 1998. Te težave so pogoste v vgrajeni kodi; malo naprav v slogu pripomočkov bi moralo biti izpostavljenih internetnemu prometu.

V velikem okolju, posebej v tako velikem okolju, v katerem nekateri tiskalniki ne podpirajo postscripta, je lahko uporabno ustvariti poseben tiskalniški strežnik, na katerega tiskajo vsi stroji in na katerem tečejo opravila ghostScripta. To omogoča, da se čakalna vrsta zaustavi ali preuredi z ukazoma topq in lprm.

Vaš Linux lahko torej deluje kot čakalni strežnik za tiskalnik, tako da lahko uporabniki vašega omrežja končajo svoja tiskalna opravila hitro in nadaljujejo delo, ne da bi morali čakati, da bo tiskalnik natisnil izpis drugega uporabnika. To je priporočeno tudi, če imate nepopravljive stare tiskalnike HP Jetdirect; zmanjšuje verjetnost blokiranja tiskalnika (angl. printers wedging).

Za kaj takega napravite čakalno vrsto na vašem Linuxu, ki kaže na HP LJ z omrežno podporo (kot zgoraj). Zdaj nastavite vse odjemalce vašega omrežja LAN, da bodo kazali na čakalno vrsto Linuxa (npr. lj-5 v zgornjem primeru).

Nekateri omrežni tiskalniki HP očitno ne upoštevajo nastavitev naslovne strani, ki jo pošljejo odjemalci; njihovo notranje narejeno stran lahko izključite tako, da se s telnet priključite na tiskalnik, dvakrat pritisnete Enter, napišete ,,banner: 0`` in potem ,,quit``. Na voljo so tudi druge nastavitve, ki jih lahko tako spremenite; napišite ,,?`` za seznam.

Poln nabor nastavitev lahko nadzirate s programjem HP webJetAdmin. Ta paket teče kot pritajeni strežnik in sprejme zahtevke HTTP na določenih vratih. Streže obrazce in java applete, ki lahko nadzorujejo tiskalnike HP v omrežju. Teoretično lahko nadzoruje tudi tiskalniške čakalne vrste v Unixu, a to počne s storitvijo rexec, ki je popolnoma nezaščitena. Ne priporočam vam uporabe te lastnosti.

Na naprave AppSocket

Nekateri tiskalniki (in omrežne tiskalniške ,,črne škatle``) podpirajo le krasne majhne povezave TCP brez dodatnega protokola. V tej kategoriji so opazni zgodnji modeli kartic JetDirect (skupaj z nekaterimi JetDirectEx). V bistvu morate za tiskanje na tak tiskalnik odpreti povezavo TCP na določenih vratih (tipično 9100 ali 9100, 9101 in 9102 na škatlah s tremi vrati) in vanjo stlačiti svoje tiskalniško opravilo. V LPR je vgrajena podpora tlačenju tiskalniških opravil na naključna vrata TCP, a z BSD lpd ni tako preprosto. Verjetno bo najbolje, da dobite in uporabite mali pripomoček, imenovan netcat.

Vmesnik za PDQ, ki bi uporabljal netcat, bi bil nekako takle:

interface tcp-port-0.1 {

   help "To je eden prvih vmesnikov, ki jih podpirajo
         samostojni tiskalniki in tiskalniški strežniki. Naprava
         preprosto posluša za povezavo TCP na določenih vratih
         in čaka podatke s katerekoli povezave na tiskalnik.\nTa
         vmesnik potrebuje program netcat (\"nc\")."

   required_args "REMOTE_HOST"

   argument {
      var = "REMOTE_HOST"
      desc = "Oddaljeni gostitelj"
      help = "To je ime ali številka IP tiskalniškega strežnika."
   }

   argument {
      var = "REMOTE_PORT"
      def_value = "9100"
      desc = "Oddaljena vrata"
      help = "To je število vrat TCP na tiskalniškem strežniku,
              na katerega mora biti poslano tiskalniško opravilo.
              Večina kartic JetDirect in klonov sprejme opravila
              na vratih 9100 (ali 9101 za vrata 2 itd.)."
   }

   requires "nc"

   send_exec { cat $OUTPUT | nc $REMOTE_HOST $REMOTE_PORT }

}

Če to spodleti, lahko izvedete na druge načine, med drugimi v Perlu s spodnjim programom. Za boljše delovanje uporabite program netcat (,,nc``), ki opravi pretežno isto na bolj splošen način. Večina distribucij bi morala imeti netcat dostopen že v pakirani obliki.

#!/usr/bin/perl
# Hvala Danu McLaughlinu, ker je napisal izvirno različico
# tega skripta (in Jimu W. Jonesu, ker je sedel poleg Dana, ko
# mi je pisal za pomoč ;)

$fileName = @ARGV[0];

open(IN,"$fileName") || die "Can't open file $fileName";

$dpi300     = "\x1B*t300R";
$dosCr      = "\x1B&k3G";
$ends = "\x0A";

$port =  9100 unless $port;
$them = "bach.sr.hp.com" unless $them;

$AF_INET = 2;
$SOCK_STREAM = 1;
$SIG{'INT'} = 'dokill';
$sockaddr = 'S n a4 x8';

chop($hostname = `hostname`);
($name,$aliases,$proto) = getprotobyname('tcp');
($name,$aliases,$port) = getservbyname($port,'tcp')
    unless $port =~ /^\d+$/;;
($name,$aliases,$type,$len,$thisaddr) =
        gethostbyname($hostname);
($name,$aliases,$type,$len,$thataddr) = gethostbyname($them);
$this = pack($sockaddr, $AF_INET, 0, $thisaddr);
$that = pack($sockaddr, $AF_INET, $port, $thataddr);

if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
#    print "socket ok\n";
}
else {
    die $!;
}
# Give the socket an address.
if (bind(S, $this)) {
#    print "bind ok\n";
}
else {
    die $!;
}

# Call up the server.

if (connect(S,$that)) {
#    print "connect ok\n";
}
else {
    die $!;
}

# Set socket to be command buffered.

select(S); $| = 1; select(STDOUT);

#    print S "@PJL ECHO Hi $hostname! $ends";
#    print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends";
#    print S $dpi300;

# Avoid deadlock by forking.

if($child = fork) {
    print S $dosCr;
    print S $TimesNewR;

    while (<IN>) {
        print S;
    }
    sleep 3;
    do dokill();
} else {
    while(<S>) {
        print;
    }
}

sub dokill {
    kill 9,$child if $child;
}

11.6 Poganjanje if za oddaljene tiskalnike s starejšimi LPD

Čudna posebnost starejših različic lpd je, da se if ne požene za oddaljene tiskalnike. (Različice po 0.43 ali nekaj takega imajo spremembo, ki izvira iz FreeBSD, tako da se if vedno požene.) Če ugotovite, da morate pognati if, lahko to storite tako, da naredite dvojno čakalno vrsto in prevrstite opravilo. Na primer, poglejte tole datoteko printcap:

lj-5:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/lj-5:\
        :if=/usr/lib/lpd/filter-lj-5:
lj-5-remote:lp=/dev/null:sh:rm=ime.tiskalnika.si:\
        :rp=raw:sd=/var/spool/lpd/lj-5-raw:
V tej luči je skript filter-lj-5 tak:
#!/bin/sh
gs <izbire> -q -dSAFER -sOutputFile=- - | \
        lpr -Plj-5-remote -U$5

Izbira -U za lpr deluje le, če je lpr pognan pritajeno (angl. daemon), in pravilno nastavi ime pošiljatelja opravila v še enkrat poslano vrsto. Verjetno morate uporabiti bolj robustno metodo za določitev uporabniškega imena, saj v nekaterih primerih to ni peti argument. Glej stran referenčnega priročnika o printcap.

11.7 Iz Windows

Tiskanje iz odjemalca z Windows (ali morda z OS/2) na strežnik z Linuxom je neposredno podprto čez SMB z uporabo paketa SAMBA, ki podpira tudi deljenje datotek med datotečnim sistemom Linuxa in odjemalci z Windows.

Samba ima precej popolno dokumentacijo, na voljo je tudi dober seznam pogostih vprašanj z odgovori, ki pokriva to temo. Na svoji škatli z Linuxom lahko nastavite magični filter in tiskate skozenj postscript ali pa uporabljate posebne, za tiskalnik specifične gonilnike na vseh strojih z Windows in imate zanje čakalno vrsto brez vsakršnih filtrov. Zanašanje na gonilnike v Windows lahko v nekaterih primerih da boljši izpis, a je malce težavnejše administrativno opravilo, če imate veliko škatel z Windows. Zato najprej poskusite postscript. Sodobne različice Sambe bi morale podpirati samodejno prenašanje gonilnika, ki ga ponujajo strežniki Windows NT, ki razreši to težavo.

S PDQ bi morali nastaviti Sambo, da požene ukaz pdq z ustreznimi argumenti namesto ukaza lpr, ki ga požene privzeto. Mislim, da Samba požene pdq kot pravi uporabnik, zato bi moralo tako dobro delovati. Na voljo je precej izbir za Sambo, ki bi jih morali nastaviti za to:

printcap

To bi moralo kazati na ,,ponarejeni`` printcap, v katerem navedete seznam dostopnih tiskalnikov. Vse, kar potrebujete, je kratko in dolgo ime za vsak tiskalnik, enega na vrstico:

lp1|Prvi tiskalnik
lp2|Drugi tiskalnik
lp3|Tretji tiskalnik
V ukazu za tiskanje bo uporabljeno kratko ime.

ukaz za tiskanje

Ta bi moral biti nastavljen na nekaj kot pdq -P %p %s ; rm %s.

ukaz lprm

Za nastavljanje tega trenutno ni videti dobre vrednosti. Opravila, ki jih ima PDQ v vrsti, bodo sčasoma zastarela, zato ni težav, če tiskalnik povsem odpove. Če si premislite, lahko uporabite xpdq, da prekličete opravila, a to priročno iz Windows. Zaenkrat le vstavite ukaz, ki ne počne nič, denimo true. Če kot sistem v ozadju uporabljate lpd ali LPRng, bi moral delovati primeren ukaz lprm. Nisem prepričan, kako bi Samba določila številko vnosa za vrsto lpr za opravila, ki jih je uvrstil PDQ.

ukaz lpq

PDQ spet nima dobre vrednosti, da bi jo podali tu. Porazdeljeni sistemi ne ponujajo razumnega načina, da bi videli vrsto, a centralizirani strežniški sistemi, osredotočeni na Sambo, imajo lahko čakalno vrsto, ki jo je vredno preučiti. Zaenkrat tu dodajte le ukaz, ki ne dela nič, denimo true. Če kot sistem v ozadju uporabljate LPD ali LPRng, bi moral delovati primeren ukaz lpq, le da ne boste videli opravil, dokler jih PDQ ne neha filtrirati.

11.8 Iz računalnika Apple

Netatalk podpira tiskanje iz odjemalcev Apple čez EtherTalk. Glej spletno stran Netatalk HOWTO Page za več informacij.

11.9 Iz NetWarea

Paket ncpfs vključuje demonski strežnik pserver, ki ga lahko uporabite za ustvarjanje opravila za tiskalniško čakalno vrsto NetWarea. Kakor razumem, ta sistem potrebuje NetWare, grajen na Bindery, kot je 2.x, 3.x, ali 4.x, z omogočenim povezovalnim dostopom.

Za več podatkov o ncpfs in programu pserver glej mesto za FTP ncpfs.

11.10 Upravljanje omrežnih tiskalnikov

Večina omrežnih tiskalnikov podpira nekakšno upravljanje na daljavo. Pogosto so na voljo preproste spletne strani za nastavitev. Pogosto je na voljo tudi podpora upravljanju prek SNMP, kar je bolj uporabno. Tipično lahko izveste zanimive podatke o stanju tiskalnika, kot so zaloge črnila in papirja, število natisnjenih izvodov in tako naprej, in navadno lahko spreminjate določene nastavitve. Nadzor tiskalnikov prek SNMP in številne druge stvari, povezane s tiskanjem, standardizira delovna skupina za tiskanje pri IEEE.

Npadmin

Npadmin je program za ukazno vrstico, ki ponuja vmesnik do pogoste funkcionalnosti SNMP omrežnih tiskalnikov. Izvaja standard Printer MIB kot tudi lastniške sheme nekaterih izdelovalcev, ki jih uporabljajo pretežno starejše naprave. Podprta so tako dejanja za odkrivanje tiskalnikov kot tudi različna povpraševanja tiskalnikov o stanju.

Npadmin ima izvrstno stran v referenčnem priročniku in vnaprej prevedeni paketi se razširjajo za številne distribucije, ki uporabljajo pakete RPM ali dpkg.

Druga orodja za SNMP

Poleg orodja npadmin so na voljo številna orodja za SNMP, ki bodo uporabna. Pripomoček snmptraplogd lahko zapisuje dogodke SNMP trap. To je uporabno za spremljanje zatikanja papirja v tiskalniku, dogodke, ko zmanjka papirja itd.; preprosto je preusmeriti določene dogodke na pozivnik ali poslati e-pošto.

Medtem ko npadmin ponuja poenostavljeno podporo številnim Vmesnikom SNMP omrežnih tiskalnikov, imajo lahko nekateri tiskalniki razširitve izdelovalcev, o katerih npadmin ne ve ničesar. V tem primeru lahko uporabljate orodja SNMP podjetja CMU, ki podpirajo poljubne operacije SNMP GET in SET, pa tudi sprehode in podobno. S temi in malce dela lahko izkoristite katerokoli lastnost SNMP, ki jo ponuja MIB vašega tiskalnika. Morda boste morali dobiti od svojega dobavitelja MIB, da boste ugotovili, kaj pomenijo vse spremenljivke; včasih dobavitelji mislijo, da ljudje celo uporabljajo lastniška orodja, ki jih dobavljajo.

Orodje libprinterconf vključuje kodo, ki izvaja odkrivanje tiskalnikov v omrežju. Tiskalniki so prepoznani glede na prevedeno knjižnico tiskalniških podpisov; trenutno knjižnica ni ravno velika, a pokriva številne pogoste modele omrežnih tiskalnikov.


Naprej Nazaj Kazalo