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.
Č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.
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.
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.
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
).
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 -
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.
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.
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;
}
Č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.
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.
Netatalk podpira tiskanje z odjemalcev Apple čez EtherTalk. Glejte spletno stran Netatalk HOWTO Page za več informacij.
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.