Naprej Nazaj Vsebina

11. Kako tiskati na tiskalnik prek omrežja

Ena od lastnosti strežnika lpd 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 pripravite lpr do transparentnega tiskanja na tiskalnike na vseh vrstah omrežij.

11.1 Na gostitelju z Unix/lpd

Če želite dovoliti oddaljenim strojem tiskanje 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; prepričajte se, da veste, kaj počnete, če tam navedete nek stroj.) Tiskanje na svojem tiskalniku lahko dovolite tudi le posameznih uporabnikom drugih strojev s tem, da uporabite atribut rs; preberite stran ukaza lpd v referenčnem priročniku.

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:
Opazite, da je na lokalnem stroju še vedno čakalni imenik, ki ga ureja lpd. Če je oddaljen 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 občasno tiskate na različne tiskalnike. Iz najave programa rlpr:

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

Za razliko od lpr, ni potrebno, 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 administracije.

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

Glavna moč, ki jo daje rlpr je moč oddaljenega tiskanja s 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 Win95, WinNT, LanManager, ali Samba

Obstaja spis Printing to Windows mini-HOWTO, ki vsebuje več informacij kot jih najdete tukaj.

Mogoče je preusmeriti čakalno vrsto lpd skozi program smbclient (del zbirke samba) na tiskalniško storitev SMB, počivajočo na TCP/IP. Samba vključuje skript, imenovano 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šen:

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 oddate datoteko neposredno v tiskalniško storitev SMB, ne da bi vključevali lpd. Glejte stran v referenčnem priročniku (man smbclient).

11.3 Na tiskalnik pod NetWare

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

S paketom ncpfs lahko nameščate pogone vašega strežnika NetWare pod Linuxom. 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.

Če želite pripraviti nprint do delovanja čez lpd, napišite majhen ukazni skript za izpis standardnega vhoda (stdin) na NetWareov tiskalnik, in jo 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 lahko izgleda 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 Na tiskalnik pod EtherTalk (Apple)

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

11.5 Na HP ali drug tiskalnik omrežja ,ethernet`

HP-ji in nekateri drugi tiskalniki pridejo skupaj z omrežnim vmesnikom na katerega lahko neposredno tiskate s pomočjo lpd. Uporabljati morate navodila, priložena vašem tiskalniku ali njegovemu omrežnemu priključku, a splošnem lahko takšni 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:

Tiskalniki HP Laserjet z vmesniki Jet Direct v splošnem 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 efekt 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 od teh se je zgodila od začetka jeseni 1998.

V velikem okolju, posebej v takem velikem okolju, kjer 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.

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 z delom, 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še mreže LAN, da bodo kazali na čakalno vrsto Linuxa (npr. lj-5 v zgornjem primeru).

Nekateri mrež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``. Obstajajo tudi druge nastavitve, ki jih lahko tako spremenite; napišite ,,?`` za seznam.

Na starejše HP-je

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 (vključno 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 noter natlačiti vaše tiskalniško opravilo. LPRng ima vgrajeno podporo za tlačenje tiskalniških opravil na naključna vrata TCP, a z BSD-jevim lpd to ni tako preprosto. To lahko storite, med drugim, v Perlu:

#!/usr/bin/perl
# Hvala Danu McLaughlinu, ker je napisal izvorno 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

Čudna posebnost lpd je, da se if ne požene za oddaljene tiskalnike. Č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šen:
#!/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. Glejte 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 direktno podprto čez SMB z uporabo paketa SAMBA, ki podpira tudi deljenje datotek med datotečnim sistemom Linuxa in odjemalci z Windows.

Samba vključuje precej popolno dokumentacijo, obstaja tudi dober spisek pogosto zastavljenih vprašanj z odgovori, ki pokriva to temo. Na svoji škatli z Linuxom lahko nastavite magični filter in tiskate skozi njega PostScript, ali pa uporabljate posebne tiskalniku specifične gonilnike na vseh strojih z Windows in imate za njih č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.

11.8 Iz računalnika Apple

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

11.9 Iz NetWare-a

Paket ncpfs vključuje demonski strežnik pserver, ki ga lahko uporabite za ustvarjanje opravila za tiskalniško čakalno vrsto NetWare-a. 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 glejte mesto za FTP ncpfs.


Naprej Nazaj Vsebina