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.
Č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.
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.
lpd
Za tiskanje na drugem stroju napravite podoben vnos v datoteko
/etc/printcap
:
Vedite, da je na lokalnem stroju še vedno čakalni imenik, ki ga ureja# ODDALJENI djet500 lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :rm=stroj.tam.nekje.ustanova.si:\ :rp=printername:\ :lp=/dev/null:\ :sh:
lpd
. Če je oddaljeni 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
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.
V spisu Printing to Windows mini-HOWTO je več Informacij, kot jih najdete tukaj.
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.
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
).
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.
Č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:
Skriptsub2|remote-NWprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/sub2:\ :if=/var/spool/lpd/nprint-script:
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 -
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.
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
.
Š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.
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; }
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
:
V tej luči je skriptlj-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:
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.
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:
V ukazu za tiskanje bo uporabljeno kratko ime.lp1|Prvi tiskalnik lp2|Drugi tiskalnik lp3|Tretji tiskalnik
Ta bi moral biti nastavljen na nekaj kot pdq -P %p
%s ; rm %s
.
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.
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.
Netatalk podpira tiskanje iz odjemalcev Apple čez EtherTalk. Glej 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 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.
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 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.
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.