Drukowanie w Linux-ie: Jak drukować poprzez sieć.
Następna strona
Poprzednia strona
Spis treści
11. Jak drukować poprzez sieć.
Jedną z zalet lpd jest to, że można przy jego pomocy drukować
na drukarkach przyłączonych fizycznie do innych komputerów. Jeśli
dobrze dobierzesz kombinację skryptów i narzędzi, to możesz
drukować przy pomocy lpr na wszelkiego rodzaju sieciach.
11.1 Na hoście unix/lpd.
Aby pozwolić odległym maszynom drukować na twojej drukarce, musisz
je umieścić w /etc/hosts.equiv lub
/etc/hosts.lpd. (Zauważ, że hosts.equiv ma kilka
innych efektów; upewnij się, że wiesz co robisz jeśli umieszczasz
tam jakąś maszynę). Używając opcji rs możesz pozwolić tylko
wybranym użytkownikom na drukowanie; informacje na ten temat
znajdziesz na stronie podręcznika systemowego na temat
lpd.
Przy pomocy lpd.
Aby wydrukować coś na innej maszynie, musisz zrobić pozycję w
/etc/printcap podobną do tej:
# REMOTE djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:rm=jakaś.odległa.maszyna.pl:\
:rp=nazwa_drukarki:\
:lp=/dev/null:\
:sh:
Zauważ, że lokalnie nadal znajduje się katalog zadań obsługiwany
przez lpd. Jeśli odległa maszyna jest zajętą albo wyłączona,
to zadania do drukowania czekają lokalnie aż będą mogły zostać
wysłane.
Przy pomocy rlpr.
Żeby ominąć konfigurowanie lokalnego lpd, możesz użyć rlpr,
aby wysłać coś bezpośrednio do kolejki na odległej maszynie. Jest
to bardzo użyteczne jeśli drukujesz na różnych drukarkach tylko
okazyjnie. Z ogłoszenia o rlpr:
Rlpr używa protokołu TCP/IP, aby wysłać zadania do drukowania do
serwera lpd gdziekolwiek w sieci.
W przeciwieństwie do lpr, ten *nie* wymaga, żeby drukarki, na
których chcesz drukować były znane dla lokalnej maszyny (np. w
/etc/printcap) i przez to jest bardziej elastyczny i
wymaga mniejszego nakładu pracy administratora.
rlpr może zostać użyty gdziekolwiek, gdzie mógłby zostać użyty zwykły
lpr, i jest kompatybilny w dół z tradycyjnym lpr z BSD.
Najważniejszą zaletą rlpr jest, to że można drukować
*skądkolwiek dokądkolwiek*, niezależnie od tego jak jest
skonfigurowany system, z którego chcesz drukować. Może też być
użyty jako serwer, tak że klienci uruchomieni na innych maszynach
jak np.: netscape, xemacs, itp. mogą drukować na twojej drukarce
małym nakładem wysiłku.
Rlpr dostępny jest na
SUNSite Polska.
11.2 Na Win95, WinNT, LanManager lub Sambie.
Jest dostępne mini-HOWTO "Printing to Windows", które zawiera
więcej inormacji niż ta sekcja.
Możliwe jest przekierowanie kolejki lpd poprzez program
smbclient
(część pakietu Samba) do serwisu drukowania Samby opartego na
TCP/IP. Samba zawiera odpowiedni skrypt pod nazwą
smbprint. Krótko mówiąc umieszczasz plik konfiguracyjny dla
konkretnej drukarki w katalogu zadań i instalujesz skrypt
smbprint jako if.
Odpowiednia pozycja w /etc/printcap powinna wyglądać tak:
lp|remote-smbprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lp:\
:if=/usr/local/sbin/smbprint:
Aby uzyskać więcej informacji na temat konfigurowania takich
przypadków przeczytaj dokumentację zawartą w skrypcie
smbprint.
Możesz także użyć smbclient, aby wysłać zadanie drukowania
bezpośrednio do serwisu drukowania SMB bez włączania w to
lpd. Zobacz informacje w podręczniku systemowym.
11.3 Na drukarce NetWare.
Pakiet ncpfs zawiera narzędzie zwane nprint, które udostępnia
te same funkcje co smbprint, ale dla NetWare. Pakiet ten można
zdobyć z
SunSITE Polska. Z informacji LSM dla wersji
0.16:
Przy pomocy pakietu ncpfs możesz montować wolumeny z serwera netware
pod Linux-em. Możesz także drukować na drukarkach podłączonych pod
netware oraz kolejkować zadania z netware dla drukarek podłączonych
do Linux-a. Potrzebujesz jądra w wersji 1.2.x lub 1.3.54 i nowsze.
ncpfs nie będzie działał z jądrem w wersji 1.3 poniżej 1.3.54.
Aby nprint działał poprzez lpd, musisz napisać mały skrypt,
aby drukować "stdin" na drukarkach NetWare i zainstalować go jako
if dla kolejki lpd. Otrzymasz coś takiego:
sub2|remote-NWprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/sub2:\
:if=/var/spool/lpd/nprint-script:
Skrypt "nprint-script" może wyglądać tak:
#! /bin/sh
# Powinieneś najpierw sprawdzić konto guest bez hasła!
/usr/local/bin/nprint -S sieć -U nazwa -P hasło -q nazwa-kolejki -
11.4 Na drukarce EtherTalk (Apple).
Pakiet netatalk zawiera coś podobnego do nprint i
smbclient. Werner Eugster udokumentował procedurę dla drukowania
do i z sieci Apple o wiele lepiej niż ja kiedykolwiek; zobacz to w
Netatalk-HOWTO.
Netatalk nie działa z kartą SMC Etherpower PCI z chip-em DEC tulip.
11.5 Na drukarce HP i innych ethernetowych drukarkach.
Drukarki HP i niektóre inne mają ethernetowy interfejs, do którego
możesz drukować bezpośrednio używając lpd. Powinieneś postępować
zgodnie z instrukcją, którą dostałeś do drukarki albo jej
sterownika, ale ogólnie takie drukarki "mają uruchomionego" lpd i
dostarczają jedną lub więcej kolejek, do których możesz
drukować. HP może pracować np. z takim /etc/printcap:
lj-5|remote-hplj:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lj-5:\
:rm=nazwa.drukarki.pl:rp=raw:
Drukarki HP LaserJet z interfejsami Jet Direct obsługują
generalnie dwie wbudowane kolejki - "surową" (raw), która akceptuje
PCL (i możliwe, że PostScript) oraz "tekstową", która akceptuje
zwykłe ASCII i radzi sobie od razu z "efektem schodków".
W środowisku wielkoskalowym, szczególnie w dużych środowiskach,
gdzie niektóre drukarki nie obsługują PostScript-u, może być
pożyteczne ustawienie specjalnego serwera drukowania, do którego
drukują wszystkie maszyny i na którym uruchamiane są wszystkie
zadania ghostscript-a.
Pozwala to twojemu Linux-owi działać jako serwer wydruków dla
drukarki, i użtykownicy mogą robić swoje wydruki szybko i zajmować
się swoimi rzeczami zamiast czekać aż drukarka skończy drukować
pracę kogoś innego.
Aby to zrobić, ustaw na swoim Linux-ie kolejkę, która wskazuje na
HP LJ wyposażoną w ethernet. Teraz ustaw kolejkę u wszystkich
swoich klientów na tego Linux-a.
Niektóre drukarki sieciowe HP wyraźnie nie akceptują ustawień
strony tytułowej (banner page) wysłanej przez klienta; można
wyłączyć ich wewnętrznie generowaną taką stronę przez połączenie
się z drukarką telnet-em, wciśnięcie dwa razy <<ENTER>>, wpisanie
"banner: 0" i następnie "quit". Są inne ustawienia, które możesz
także w taki sposób zmienić - wpisz "?", żeby wyświetlić ich
listę.
Na starszych drukarkach HP.
Niektóre drukarki (oraz "czarne pudełka" z sieciowym drukowaniem)
obsługują tylko prościutkie nie-protokołowane czyste połączenia
TCP. Zauważalne w tej kategorii są wczesne modele kart JetDirect
(właczając niektóre JetDirectEx). Ogólnie, aby drukować na takiej
drukarce, musisz otworzyć połączenie TCP na danym porcie (z reguły
9100) i umieścić tam swoje zadanie do wydrukowania. Można to
zaimplementować m.in. w Perl-u:
#!/usr/bin/perl
# Thanks to Dan McLaughlin for writing the original version of this
# script (And to Jim W. Jones for sitting next to Dan when writing me
# for help ;)
$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 Uruchamianie if dla odległych drukarek.
Jedną wadą lpd jest to, że if nie są uruchamiane dla
drukarek odległych. Jeśli okaże się, że potrzebujesz if, możesz
ustawić podwójną kolejkę i ponownie zkolejkować dany wydruk. Weź
ten printcap jako przykład:
lj-5:remote-hplj:\
: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=nazwa.drukarki.pl:\
:rp=raw:sd=/var/spool/lpd/lj-5-raw:
w świetle tego, skrypt filter-lj-5 to:
#!/bin/sh
gs <opcje> -q -dSAFER -sOutputFile=- - | \
lpr -Plj-5-remote -U$5
Opcja -U dla lpr działa tylko wtedy jeśli lpr jest uruchomiony
jako demon i ustawia ona poprawnie zleceniodawcę kolejki w ponownie
zainicjowanej kolejce. Powinieneś raczej użyć bardziej pewnej
metody na zdobycie identyfikatora użytkownika, ponieważ niezawsze
jest to argument 5. Zobacz w podręcznik systemowym na temat
printcap.
11.7 Z Windows.
Drukowanie z Windows (czy OS/2) na Linux-ie jest obsługiwane
poprzez SMB w pakiecie SAMBA, który także umożliwia współdzielenie
plików dla Windows.
Samba zawiera całkiem pokaźną dokumentację. Możesz albo
skonfigurować magic-filter na Linux-ie i drukować tam PostScript,
albo zainstalować sterowniki dla konkretnej drukarki na wszystkich
komputerach z Winndows i mieć kolejkę dla nich bez żadnych
filtrów. Poleganie na tych sterownikach może czasami dawać lepsze
efekty, ale jest to uciążliwe ze strony administratora jeśli jest
dużo komputerów z Windows. Więc spróbuj najpierw PostScript-u.
11.8 Z Apple.
Netatalk obsługuje drukowanie z Apple poprzez EtherTalk. Na
stronie Netatalk HOWTO znajdziesz więcej
informacji.
11.9 Z Netware.
Jest jakaś obsługa drukowania z Netware przez Linux-a oferowana
przez czy z powodu Calder-y, ale nie mam pojęcia czy Linux może
oferować drukarki dla klientów Netware.
Następna strona
Poprzednia strona
Spis treści
Wyszukiwarka
Podobne podstrony:
printing howto pl 5printing howto pl 4AX25 HOWTO pl 11printing howto pl 6info sheet howto pl 11printing howto pl 12printing howto pl 10printing howto pl 8printing howto pl 9printing howto pl 14NIS HOWTO pl 11 (2)printing howto pl 3printing howto plNET 3 HOWTO pl 11 (2)printing howto pl 1DOSEMU HOWTO pl 11 (2)Ftape HOWTO pl 11 (2)ppp howto pl 11więcej podobnych podstron