Drukowanie w Linux-ie
Autor: Grant Taylor, gtaylor+pht@picante.com
v3.14, 23 Września 1997
WWeerrssjjaa ppoollsskkaa:: BBaarrttoosszz MMaarruusszzeewwsskkii BB..MMaarruusszzeewwsskkii@@jjttzz..oorrgg..ppll
v1.3, 12 Lutego 1998
Jest to dokument zawierający informacje na takie tematy jak: gen
erowanie wydruku, podglądnięcie go przed drukowaniem, wydrukowanie go
oraz przefaxowanie czegoś pod Linux-em (i innymi Unix-ami w
ogólności). Dokument ten został napisany w standardzie ISO-8859-2.
Oryginał można znaleźć pod adresem ftp.icm.edu.pl w katalogu
/pub/Linux/sunsite/docs/HOWTO.
______________________________________________________________________
Table of Contents:
1. Wprowadzenie.
1.1. Historia
1.2. Prawa autorskie.
2. Jak drukować.
3. Urządzenia dotyczące drukarki w jądrze.
3.1. Urządzenie lp.
3.2. Urządzenie parport (jądra >= 2.1.33)
3.3. Urządzenia szeregowe.
4. Obsługiwane drukarki.
5. Jakie oprogramowanie do kolejkowania ?
6. Jak to działa - podstawy.
7. Jak poustawiać to wszystko - podstawy.
7.1. Tradycyjna konfiguracja lpd.
7.2. Prawa dostępu do plików.
8. Zdobywanie oprogramowania do drukowania.
8.1. Magicfilter.
8.2. Filtr APS.
8.3. EZ-Magic.
9. Rozwiązania sprzedawców.
9.1. RedHat.
9.2. Inne dystrybucje.
10. Ghostscript.
10.1. Wywoływanie Ghosscript-u.
10.2. Dostrajanie wyników w Ghostscripcie.
10.2.1. Umiejscowienie i rozmiar wyniku.
10.2.2. Gamma, rozmiar pikseli itp.
11. Jak drukować poprzez sieć.
11.1. Na hoście unix/lpd.
11.1.1. Przy pomocy lpd.
11.1.2. Przy pomocy rlpr.
11.2. Na Win95, WinNT, LanManager lub Sambie.
11.3. Na drukarce NetWare.
11.4. Na drukarce EtherTalk (Apple).
11.5. Na drukarce HP i innych ethernetowych drukarkach.
11.5.1. Na starszych drukarkach HP.
11.6. Uruchamianie
11.7. Z Windows.
11.8. Z Apple.
11.9. Z Netware.
12. Jak drukować na fax-ie.
12.1. Używanie faxmodemu.
12.2. Używanie Zdalnego Serwisu Drukowania.
13. Jak wygenerować coś wartego drukowania.
13.1. Języki "Markup".
13.2. WYSIWYG.
14. Podgląd przed wydrukiem.
14.1. PostScript.
14.2. TeX dvi.
15. Drukarki szeregowe pod lpd.
15.1. Ustawianie w printcap-ie.
15.2. Starsze drukarki szeregowe, które gubią znaki.
16. Wyrazy uznania.
16.1. Od tłumacza.
______________________________________________________________________
11.. WWpprroowwaaddzzeenniiee..
Printing HOWTO powinno zawierać wszystko co powinieneś wiedzieć, aby
ustawić drukarkę na swoim Linux-ie. Jest to trochę bardziej
skomplikowane niż w świecie pokaż-i-kliknij Microsoft-u i Apple'a, ale
za to bardziej elastyczne i z pewnością prostsze jeśli chodzi o
administrowanie w dużych sieciach lokalnych.
Dokument ten jest tak ułożony, że większość będzie musiała przeczytać
tylko pierwszą połowę czy coś koło tego. Większość nieciekawych
informacji i takich, które są zależne od sytuacji znajduje się w
drugiej połowie i łatwo je znaleźć w spisie treści, podczas gdy
informacje zawarte w sekcjach 9 i 10 będą potrzebne większości.
Większość informacji z poprzedniej wersji zostało usuniętych, ponieważ
zdecydowałem się na napisanie tego dokumentu całkowicie od nowa.
Zrobiłem tak, bo poprzednie wersje były takie wielkie - około 60 stron
A4, i narracja była do kitu. Jeśli nie znalazłeś tutaj odpowiedzi to
powinieneś a) przeszukać poprzednią wersję na stronie domowej tego
HOWTO , b) podrzucić mi
informację co powinno tu być, a nie ma tego.
Strona domowa tego HOWTO jest
dobrym miejscem na szukanie nowszych wersji tego dokumentu; jest ona
oczywiście także dystrybuowana przez Projekt Dokumentacji Linux-a;
archiwum zawierające dokumenty HOWTO możesz znaleźć w Polsce pod
adresem ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/docs/HOWTO.
11..11.. HHiissttoorriiaa
To jest trzecia generacja, a szczerze mówiąc, to trzecia edycja
zrobiona od nowa, dokumentu Printing-HOWTO. Historia PHT może w ujęciu
chronologicznym wyglądać tak:
1. Napisałem Printing-HOWTO w 1992 w odpowiedzi na wiele pytań
pojawiających się na grupie comp.os.linux dotyczących drukowania
napisałem PHT i wysłałem go tam. Dokument ten wyprzedził Projekt
Dokumentacji Linux-a o kilka miesięcy i był pierwszym dokumentem
a'la FAQ zwanym HOWTO. Edycja ta była w czystym ASCII.
2. Po dołączeniu do PDL, PHT zostało wcielone do tegoż projektu przez
Briana McCauley _<_B_._A_._M_c_C_a_u_l_e_y_@_b_h_a_m_._a_c_._u_k_>; przez kolejne dwa lata
współtworzyliśmy PHT. Po jakimś czasie dołączyliśmy pracę Karla
Auera_<_K_a_r_l_._A_u_e_r_@_a_n_u_._e_d_u_._a_u_>. Ta generacja PHT była w TeXinfo oraz
także w PS, HTML, ASCII i Info.
3. Po tym jak pozwoliliśmy PHT żeby trochę "podgniło" przez rok i po
nieskutecznych poszukiwaniach jakiejś osoby, która zajęłaby się
PHT, miało miejsce powstanie tej wersji. Ta generacja PHT jest w
Linuxdoc-SGML.
11..22.. PPrraawwaa aauuttoorrsskkiiee..
Prawa autorskie należą do Granta Taylora (c) 1997. Proszę kopiować i
dystrybuować ten dokument do woli, ale nie modyfikoewać ani nie
zapomnieć mojego nazwiska.
22.. JJaakk ddrruukkoowwaaćć..
Jeśli masz już zainstalowany program lpd i jest on ustawiony dla
twojej drukarki przez kogokolwiek, to wszystko czego potrzebujesz, to
nauczyć się posługiwać poleceniem _l_p_r. Dokument Printing-Usage-HOWTO
zawiera opis tego polecenia i kilku innych używanych do
manipulowania kolejką wydruku.
Jednak jeśli masz nowy system albo nową drukarkę, to będziesz musiał
ustawić serwis drukowania w ten lub inny sposób zanim będziesz mógł
drukować. Czytaj dalej!
33.. UUrrzząąddzzeenniiaa ddoottyycczząąccee ddrruukkaarrkkii ww jjąąddrrzzee..
33..11.. UUrrzząąddzzeenniiee llpp..
Jądro Linux-a (<=2.1.32), zakładając, że wkompilowałeś lub załadowałeś
urządzenie _l_p (polecenie cat /proc/devices powinno pokazać urządzenie
_l_p), dostarcza jedno lub więcej urządzeń _/_d_e_v_/_l_p_0, _/_d_e_v_/_l_p_1 i
_/_d_e_v_/_l_p_2. NNiiee ssąą one kojarzone dynamicznie, ale są one na stałe
przypisane konkretnym adresom I/O. Oznacza to, że twoja pierwsza
drukarka może być na _l_p_0, albo _l_p_1 w zależności od sprzętu. Spróbuj
obu. ;)
Kilku użytkowników zgłosiło, że ich dwukierunkowe porty lp nie zostają
wykryte jeśli używają starszego, jednokierunkowego kabla. Sprawdź czy
masz przyzwoity kabel.
Na danym porcie nie można mieć na raz sterowników _p_l_i_p oraz _l_p. Ale
można załadować jeden albo drugi sterownik w każdej chwili; ręcznie
albo przez _k_e_r_n_e_l_d przy jądrze w wersji 2.x.x (lub późniejsze 1.3.x).
Jeśli dokładnie ustawisz przerwania itp., to możesz przypuszczalnie
mieć _p_l_i_p na jednym porcie, a _l_p na drugim. Jedna osoba zrobiła tak,
przez edycję sterowników; z niecierpliwością oczekuję osoby, która
zrobiłaby to tylko przy użyciu argumentów z linii poleceń.
Jest takie narzędzie zwane _t_u_n_e_l_p
_<_h_t_t_p_:_/_/_w_w_w_._p_i_c_a_n_t_e_._c_o_m_/_~_g_t_a_y_l_o_r_/_p_h_t_/_m_a_n_/_t_u_n_e_l_p_._h_t_m_l>, przy pomocy
którego "root" może ustawiać przerwania i inne opcje na urządzeniu _l_p.
Jeśli urządzenie _l_p jest wbudowane w jądro w wersji 1.3.x lub wyższej,
to możesz przekazać parametr lp= do jądra, w którym możesz ustawić
przerwanie, adres itp.
Jeśli sterownik lp jest wbudowany w jądro, to możesz użyć parametru
LILO/LOADLIN, aby ustawić adres portu i przerwanie, których sterownik
będzie używał.
Składnia: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
Na przykład: lp=0x378,0 lub lp=0x278,5,0x378,7 **
Zauważ, że jeśli używasz tego parametru, to musisz podać *wszystkie*
porty, których będziesz używać - nie ma wartości domyślnych. Możesz
wyłączyć wbudowany sterownik parametrem lp=0.
Jeśli ładujesz sterownik drukarki jako moduł w wersji jądra 2.x.x lub
późnej 1.3.x, to możesz podać przerwanie i port jako parametr w linii
poleceń przy _i_n_s_m_o_d (albo w pliku /etc/conf.modules, żeby działało
także dla kerneld). Parametry to: _i_o_=_p_o_r_t_0_,_p_o_r_t_1_,_p_o_r_t_2 i
_i_r_q_=_i_r_q_0_,_i_r_q_1_,_i_r_q_2. Więcej informacji znajdziesz w podręczniku
systemowym _m_a_n na stronie dotyczącej _i_n_s_m_o_d.
**Dla tych, którzy (jak ja) nigdy nie mogą znaleźć standardowego portu
kiedy go potrzeba, to są one takie jak w podanym wyżej drugim
przykładzie. Drugi port (_l_p_0) jest pod adresem 0x3bc. Nie mam pojęcia
jakiego przerwania zwykle używa.
Kod źródłowy linux-owego sterownika portu równoległego jest w pliku
/usr/src/linux/drivers/char/lp.c
33..22.. UUrrzząąddzzeenniiee ppaarrppoorrtt ((jjąąddrraa >>== 22..11..3333))
Począwszy od jądra w wersji 2.1.33 (dostępne także jako łata dla jądra
2.0.30), urządzenie lp jest po prostu klientem nowego urządzenia
parport. Dodanie urządzenia parport naprawia pewną ilość błędów, które
dręczyły poprzedni sterownik urządzenia lp - może ono wpółdzielić port
z innym urządzeniem, przypisuje dynamicznie dostępne porty równoległe
numerom urządzeń zamiast wymuszać z góry narzuconą komunikację
pomiędzy adresami I/O a numerami portów i tak dalej.
Więcej szczegółów na temat parport podam kiedy sam znajdę się w
sytuacji kiedy będę tego używał. A w międzyczasie możesz przeczytać
plik Documentation/parport.txt w drzewie ze źródłami jądra albo
zajrzyj na stronę parport
.
33..33.. UUrrzząąddzzeenniiaa sszzeerreeggoowwee..
Urządzenia szeregowe pod Linux-em zwykle nazywają się /dev/ttyS1 lub
podobnie. Narzędzie _s_t_t_y
_<_h_t_t_p_:_/_/_w_w_w_._p_i_c_a_n_t_e_._c_o_m_/_~_g_t_a_y_l_o_r_/_p_h_t_/_m_a_n_/_s_t_t_y_._h_t_m_l> pozwala na
interaktywne przeglądanie lub określanie ustawień dla portu
szeregowego; _s_e_t_s_e_r_i_a_l
_<_h_t_t_p_:_/_/_w_w_w_._p_i_c_a_n_t_e_._c_o_m_/_~_g_t_a_y_l_o_r_/_p_h_t_/_m_a_n_/_s_e_t_s_e_r_i_a_l_._h_t_m_l> pozwoli ci na
kontrolowanie kilku rozszerzonych właściwości oraz na skonfigurowanie
IRQ i adresów I/O dla niestandardowych portów. Więcej na temat portów
szeregowych znajdziesz w Serial-HOWTO
dostępnym także w
języku polskim.
Jeśli używasz wolnej drukarki szeregowej z kontrolą przepływu (flow
control), może się okazać, że niektóre z twoich wydruków są obcinane.
Może być to spowodowane zachowaniem portu szeregowego, który wyrzuca
wszystkie znaki ze swojego bufora po 30 sekundach od momentu
zamknięcia portu. W buforze może się znajdować do 4096 znaków a jeśli
twoja drukarka używa kontroli przepływu i jest wystarczająco wolna,
tak że nie może przyjąć wszystkich 4096 znaków z portu w ciągu 30
sekund, po tym jak oprogramowanie drukujące zakmnęło port, to końcowa
zawartość bufora zostanie utracona. Jeśli w wyniku polecenia _c_a_t _p_l_i_k
_> _/_d_e_v_/_t_t_y_S_2 pojawia się cały wydruk dla krótkich plików, a dłuższe są
obcinane, to to może być twój problem.
Okres 30 sekund może zostać zmieniony poprzez opcję "closing_wait"
programu setserial (wersja 2.12 i późniejsze). Porty szeregowe maszyny
są z reguły inicjowane poprzez odwołanie do setserial w pliku
startowym rc.serial. Odwołanie do portu szeregowego drukarki może być
zmodyfikowane, tak aby ustawić closing_wait w tym samym czasie kiedy
ustawia inne parametry tego portu.
44.. OObbssłłuuggiiwwaannee ddrruukkaarrkkii..
Jądro Linux-a obsługuje raczej każdą drukarkę, którą możesz podłączyć
do szeregowego albo równoległego portu, ale są rzeczy na które trzeba
spojrzeć oraz drukarki których nie będziesz w stanie użyć nawet
pomimo, że (elektrycznie mówiąc) mogą one komunikować się z Linux-em.
W grupie tych niekompatybilnych drukarek przeważają te, które polegają
na "Windows Printing System". (Często są one oznaczone "for Windows".)
Te drukarki _n_i_e współpracują z Linux-em. Nie mają żadnych
inteligentnych części i polegają na procesorze komputera, który musi
zrobić większość tego co kiedyś robiły procesory w drukarce. Niestety
te zadania mogą być wykonane tylko przez sterowniki dostarczone przez
producenta, które działają tylko pod Windows. Więc nie kupuj takiej
drukarki do Linux-a.
Jeśli chodzi o drukarki, które _d_z_i_a_ł_a_j_ą z Linux-em, to najlepszym
wyborem jest kupienie drukarki z interpreterem PostScript-u. Prawie
każde oprogramowanie pod Unix-a, które tworzy jakiś drukowalny wynik
tworzy go w PostScripcie, więc oczywistym jest, że najlepiej kupić
drukarkę obsługującą PostScript. Niestety, ale obsługa tego języka
poza drukarkami laserowymi jest bardzo rzadko spotykana.
Jeśli nie uda ci się wydobyć (raczej większego) budżetu potrzebnego na
kupno drukarki PostScript-owej, możesz użyć jakiejkolwiek drukarki
obsługiwanej przez Ghostcript, darmowy interpreter PostScript-u
używanego do druku PostScript-owego. Na domowej stronie
Ghostscript-u znajdziesz obsługiwane
drukarki i informacje na temat nowych i ekpserymentalnych sterowników.
Pomóż proszę w ulepszaniu Ghostscript-u poprzez zgłaszanie sukcesów
bądź porażek jak o to proszą.
55.. JJaakkiiee oopprrooggrraammoowwaanniiee ddoo kkoolleejjkkoowwaanniiaa ??
Do niedawna wybór dla użytkowników Linux-a był prosty - wszyscy
używali tego samego, starego lpd wziętego bezpośrdnio z kodu Net-2
BSD. Nawet dzisiaj większość sprzedawców dostarcza ten właśnie
program. Ale to się zaczyna zmieniać. Systemy SVR4 włączając w to
Solaris Sun-a dostarczają całkiem inny pakiet do kolejkowania oparty
na _l_p_s_c_h_e_d. Pojawiają się także oznaki, iż niektórzy sprzedawcy Linux-
a przejdą na dostarczanie LPRng, o wiele mniej zabytkowej
implementacji, która jest dostępna za darmo. LPRng jest o wiele
prostszy w administrowaniu dla większych instalacji i ma o wiele
przyjaźniejszą bazę danych aniżeli lpd.
Na dzień dzisiejszym nawet w świetle nowych opcji, lpd jest
przypuszczalnie dobry dla większości użytkowników Linux-a. Raz
ustawiony działa dobrze i jest łatwy w zrozumieniu oraz szeroko
udokumentowany w książkach o Unix-ie.
Jeśli chcesz więcej informacji na temat LPRng to zobacz LPRng - An
Enhanced Printer Spooler
.
Przyszłe wersje tego dokumentu będą zawierały informacje o zwykłym lpd
oraz o LPRng.
66.. JJaakk ttoo ddzziiaałłaa -- ppooddssttaawwyy..
Żeby drukowanie działało, musisz zrozumieć jak działa system lpd.
LPD to skrót od Line Printer Daemon i odnosi się w różnych kontekstach
do demona i do całej kolekcji programów, które drukują. Są to:
llppdd
Demon kolejkowania. Jeden z nich jest uruchomiony, aby
kontrolować wszystko na maszynie, I jeden jest uruchamiany dla
drukarki podczas drukowania.
llpprr
Polecenie dla użytkowników do kolejkowania wydruków. Lpr
kontaktuje się z lpd i umieszcza nowe zadanie w katalogu
kolejkowania.
llppqq
Wyświetla wydruki umieszczone w kolejce.
llppcc
Polecenie do kontrolowania systemu lpd. Poleceniem tym możesz
wystartować, zatrzymać, zmienić porządek w kolejce drukowania.
llpprrmm
Usuwa wydruk z kolejki.
To jak to wszystko działa ? No... kiedy system startuje, uruchamiany
jest lpd. Czyta on plik /etc/printcap, aby się dowiedzieć dla jakich
drukarek będzie obsługiwał kolejki. Za każdym razem kiedy ktoś
uruchomi _l_p_r, lpr kontaktuje się z lpd poprzez gniazdko /dev/printer i
podaje mu wydruk oraz kilka informacji o tym kto drukuje i jak ma to
być wydrukowane. Potem lpd drukuje otrzymany plik na odpowiedniej
drukarce.
System lp powstał w czasach kiedy większość drukarek była drukarkami
liniowymi - tzn. ludzie drukowali w większośći teksty w ASCII. Jak się
okazało, nie trzeba dużo pracy, aby lpd działał dobrze dla
dzisiejszych wydruków takich jak PostScript, czy text, czy dvi, czy
...
77.. JJaakk ppoouussttaawwiiaaćć ttoo wwsszzyyssttkkoo -- ppooddssttaawwyy..
77..11.. TTrraaddyyccyyjjnnaa kkoonnffiigguurraaccjjaa llppdd..
Minimalne ustawienia objawiają się tym, że system może kolejkować
pliki i je drukować. Nie będzie zwracał uwagi na to, czy twoja
drukarka je zrozumie czy nie i przypuszczalnie nie pozwoli ci na
zrobienie atrakcyjnego wydruku. Jednak jest to pierwszy krok do
zrozumienia, więc czytaj dalej !
Ogólnie mówiąc, żeby dodać kolejkę dla drukarki musisz dodać pozycję
do /etc/printcap i utworzyć katalog do kolejkowania w /var/spool/lpd/.
Pojedyncza pozycja w /etc/printcap wygląda tak:
# LOCAL djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:sh:
Definiuje ona drukarkę o nazwach _l_p, _d_j i _d_e_s_k_j_e_t, z katalogiem
kolejkowania /var/spool/lpd/dj/, bez limitu na każdy wydruk, która
drukuje na urządzeniu /dev/lp0 i która nie ma strony tytułowej (z
danymi o osobie, która drukowała itp.) na początku wydruku.
Teraz poczytaj stronę w podręczniku systemowym na temat _p_r_i_n_t_c_a_p.
Powyższy przykład wygląda bardzo prosto, ale jest tam jeden kruczek -
drukarka będzie tak długo dobrze drukowała, dopóki będę wysyłał pliki,
które ona rozumie. Na przykład wysłanie na drukarkę zwykłego unix-
owego pliku tekstowego spowoduje, że na papierze pojawi się coś
takiego:
To jest pierwsza linia.
To jest druga linia.
To jest trzecia linia.
Wysłanie na tę drukarkę pliku w PostScripcie spowodowałoby
wydrukowanie pięknej listy poleceń PostScript z dodatkowym efektem
schodków :) - beż żadnego pożytecznego efektu.
Wynika z tego jasno, że czegoś tu jeszcze brakuje - i to jest właśnie
celem filtrowania. Ci, którzy czytali stronę podręcznika systemowego o
pliku "printcap" mogli zuważyć atrybuty kolejki - _i_f i _o_f. _i_f - czyli
input filter - to właśnie to czego potrzebujemy.
Jeśli napiszemy krótki skrypt o nazwie "filter", który doda przed
końcem linii znak CR (cariage return - powrót karetki), to efekt
schodów może być wyeliminowany. Tak więc musimy dodać do naszej
pozycji w /etc/printcap jeszcze jedną linię informującą o istniejącym
filtrze:
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:if=/var/spool/lpd/dj/filter:\
:sh:
Przykładem prostego skryptu może być:
#!perl
# Powyższa linia tak na prawdę powinna zawierać pełną ścieżkę do perl-a
# Skrypt ten musi być wykonywalny: chmod 755 filter
while(){chop $_; print "$_\r\n";};
# Możesz też zakończyć znacznikiem "form feed": print "\f";
Jeśli zrobimy powyższe, to otrzymamy drukarkę, na którą będziemy mogli
wysyłać pliki tekstowe z Unix-a i otrzymamy sensowny wydruk. (Tak, są
4 miliony lepszych sposobów na napisanie tego skryptu, ale tylko kilka
jest tak bardzo ilustracyjnych. Ty masz to napisać bardziej wydajnie.)
Jedynym problemem jest to, że drukowanie plików tekstowych nie jest
takie znowu fajne - byłoby o wiele lepiej, jeśli moglibysmy drukować
pliki PostScriptowe czy graficzne. No... tak, byłoby i jest to łatwe
do zrobienia. Metoda jest rozszerzeniem tego co zrobiliśmy, żeby się
pozbyć schodków. Jeśli napiszesz program, który może przyjmować różne
formaty i tłumaczyć je na język zrozumiały dla drukarki, to masz
naprawdę dobry filtr.
Taki filtr nazywany jest filtrem magicznym. Nie męcz się nad pisaniem
własnego - o ile nie drukujesz jakichs cudów - na sieci jest już pełno
filtrów, które możesz śmiało używać.
77..22.. PPrraawwaa ddoossttęęppuu ddoo pplliikkóóww..
Ponieważ otrzymałem wiele próśb, załączam listę plików wraz z prawami
dostępu jakie mają one w moim systemie. Jest wiele lepszych sposobów
na zrobienie tego - idealnym sposobem jest używanie programów tylko z
atrybutami SGID, a nie robienie wszystkiego SUID dla "root-a", ale mój
system tak już miał i dla mnie to działa.
-r-sr-sr-x 1 root lp /usr/bin/lpr*
-r-sr-sr-x 1 root lp /usr/bin/lprm*
-rwxr--r-- 1 root root /usr/sbin/lpd*
-r-xr-sr-x 1 root lp /usr/sbin/lpc*
drwxrwxr-x 4 root lp /var/spool/lpd/
drwxr-xr-x 2 root lp /var/spool/lpd/lp/
W chwili obecnej lpd musi być uruchamiany z prawami "root-a", ponieważ
używa on numerów portów zastrzeżonych dla systemu (poniżej 1024). Po
tym jak już się podczepi pod ten port powinien się zmienić na lp.lp,
ale raczej tego nie robi...
88.. ZZddoobbyywwaanniiee oopprrooggrraammoowwaanniiaa ddoo ddrruukkoowwaanniiaa..
Wiele napisanych pakietów filtrujących (i innych programów związanych
z drukowaniem) dostępnych jest na SunSite Polska
. Można tam
znaleźć takie programy jak: psutils, a2ps, mpage, dvitodvi, flpr.
88..11.. MMaaggiiccffiilltteerr..
"Magic filter" jest jednym z najlepszych pakietów filtrujących;
zaprojektowany jest do instalacji w 10 minut. Powiedziano mi też, że
zawiera specjalną obsługę LPRng.
Title: magicfilter
Version: 1.1b
Entered-date: 04APR95
Description: A customizable, extensible automatic printer filter.
Lets you automatically detect and print just about any
data type you can find a conversion utility for. This
filter is written in C and is controlled completely
from an external printer configuration file.
This version adds automagic creation of configuration
files based on the installed software on your system,
courtesy of GNU Autoconf.
This version is a bug fix from 1.1/1.1a; filters for
non-ASCII capable PostScript printers have been added.
Author: H. Peter Anvin
Primary-site: sunsite.unc.edu
53000 /pub/Linux/system/printing/magicfilter-1.1b.tar.gz
Copying-policy: GPL
88..22.. FFiillttrr AAPPSS..
Innym z wielu magicznych filtrów jest APS zrobiony przez Andreasa
Klemma. Linux Software Map wygląda tak:
Begin3
Title: apsfilter
Version: 4.9.1
Entered-date: Montag, 10. Juli 1995, 21:22:35 Uhr MET DST
Description: magicfilter for lpd with auto filetype detection
Keywords: lpd magicfilter aps apsfilter
Original-site: ftp-i2.informatik.rwth-aachen.de
/pub/Linux/pak/APSfilter/aps-491.tgz
211KB aps-491.tgz
Platforms: C-Compiler, gs Postscript emulator, pbmutils
Copying-policy: GPL
End
Filtr APS instaluje się jako filtr _i_f dla kolejki drukowania, i
tłumaczy z wielu popularnych typów plików na polecenia twojej
drukarki.. Rozumie np. tekst, PostScript, dvi, gif i inne.
88..33.. EEZZ--MMaaggiicc..
EZ-Magic to kolejny pakiet filtrujący, napisany w bash-u, dostepny na
sunsite.
Title: ez-magic printer filter
Version: 1.0.5
Entered-date: January 26, 1997
Description: ez-magic is a printer filter that supports 8 common file
formats (txt,ps,gif,bmp,pcx,png,jpg,tif) for printing.
It can print over a network (SMB), or to a local printer.
Reads from a file, STDIN, or lpd. Simple to use and
configure. Just one script file, no huge manuals and
multibillion drivers. The only catch is that you need a
few common helper programs like netpbm and ghostscript.
Written in bash. Easy to add formats and code. Still more
bugs than I have appendages, but less than the number of
grams of fat in a hot dog. Pre-configured for HP DeskJet
870Cse over network. Comparable to apsfilter and others.
Keywords: magic filter, print, graphics, samba, network, smb,
ghostscript, postscript, gif, jpg, simple
Author: toby@eskimo.com (Toby Reed)
Maintained-by: toby@eskimo.com (Toby Reed)
Primary-site: http://www.eskimo.com/~toby/ez-magic-1.0.5.tar.gz
38 kb ez-magic-1.0.5.tar.gz
Alternate-site: sunsite.unc.edu /pub/Linux/system/printing
38 kb ez-magic-1.0.5.tar.gz
Copying-policy: Copyrighted, full manipulation rights, with one or two
restrictions.
99.. RRoozzwwiiąązzaanniiaa sspprrzzeeddaawwccóóww..
[ Sekcja ta, jest z definicji niekompletna. Przysyłaj szczegóły twojej
ulubionej dystrybucji. ]
99..11.. RReeddHHaatt..
W RedHacie znajduje się graficzne narzędzie do admiistracji, przy
pomocy którego można dodawać drukarki odległe oraz lokalne. Pozwala
ono na wybór drukarki z obsługą "ghostscript" oraz pliku urządzenia,
do którego kierowany jest wydruk; potem dana drukarka instalowana jest
w /etc/printcap. Następnie tworzony jest krótki filtr magiczny
PostScript-ASCII na podstawie _g_s i _n_e_n_s_c_r_i_p_t. Rozwiązanie to działa
całkiem dobrze i jest łatwe do ustawienia dla popularnych przypadków.
99..22.. IInnnnee ddyyssttrryybbuuccjjee..
Proszę o informacje jakie są rozwiązania w innych dystrybucjach.
1100.. GGhhoossttssccrriipptt..
Ghostscript jest najbardziej
znaczącym programem do drukowania dla Linux-a. Większość
oprogramowania do drukowania pod Unix-a generuje PostScript, który
jest opcją dla drukarki wartą ok. $100. Jednak ghostscript jest za
darmo i wygeneruje język dla twojej drukarki z PostScriptu. Jeśli jest
on podczepiony pod filtr wejściowy dla lpd, to daje wirtualną drukarkę
PostScriptową i bardzo ułatwia życie.
Ghostscript jest dostępny w dwóch postaciach. Komercyjna wersja
Ghostscript-u pod nazwą Alladin Ghostscript może być używana dla celów
osobistych, ale nie może być rozprowadzana w komercyjnych
dystrybucjach Linux-a. Jest on z reguły o jakiś rok do przodu względem
darmowej wersji; w tym momencie na przykład, obsługuje on Adobe
Acrobat's Portable Document Format, podczas gdy starsze wersje tego
nie mają.
Wersja darmowa to GNU Ghostscript i jest starszą wersją Aladdina
uprzejmie użyczoną dla GNU. (Cześć i chwała dla Aladdina za to; więcej
sprzedawców oprogramowania powinna wspomagać darmowe oprogramowanie w
ten sposób)
Cokolwiek robisz w _g_s, upewnij się, że uruchomiłeś go z opcją
wyłączającą dostęp do plików (-dSAFER). PostScript jest językiem w
pełni funkcjonalnym i zły program w PostScripcie mógłby cię przyprawić
o ból głowy.
Mówiąc o PDF-ie (Adobe's Portable Document Format), właściwie jest to
trochę bardziej zorganizowany PostScript w skompresowanym pliku.
Ghostscript umie obsłużyć PDF tak samo jak PostScript, więc możesz być
pierwszym w swoim otoczeniu z drukarką umiejącą wydrukować PDF.
1100..11.. WWyywwoołłyywwaanniiee GGhhoossssccrriipptt--uu..
Zwykle ghostscript jest uruchamiany przez filtr, który założyłeś, ale
w celach śledzenia błędó÷ dobrze jest go uruchamiać ręcznie.
gs -help pokaże krótką listę opcji i dotępnych sterowników (lista ta
pokazuje tylko sterowniki wkompilowane, a nie wszystkie dostępne
sterowniki).
Możesz uruchomić gs w celach testowych np. tak:
gs -q -dSAFER -sOutputFile=/dev/lp1 test.ps
1100..22.. DDoossttrraajjaanniiee wwyynniikkóóww ww GGhhoossttssccrriippcciiee..
Jest wiele rzeczy, które można zrobić jeśli wynik powstały przy
opracowywaniu tekstu nie jest zadowalający (właściwie, to możesz
zrobić co ci się tylko zamarzy, jeśli masz źródła).
1100..22..11.. UUmmiieejjssccoowwiieenniiee ii rroozzmmiiaarr wwyynniikkuu..
Umiejscowienie, rozmiar i wspolczynik ksztaltu obrazu na stronie jest
kontrolowane przez specyficzny dla danej drukarki sterownik w
ghostscripcie. Jeśli na przykład zauważysz, że strony wychodzą za
krótkie, albo za długie, albo za duże o dwa razy, możesz zajrzeć do
źródeł twojego sterownika i dopasować jakiekolwiek parametry, które ci
nie pasują. Niestety, każdy sterownik jest inny, tak więc nie mogę ci
powiedzieć co tak na prawdę trzeba zmienić, ale większość z nich jest
dobrze skomentowana.
1100..22..22.. GGaammmmaa,, rroozzmmiiaarr ppiikksseellii iittpp..
Większość nielaserowych drukarek ma tę wadę, że rozmiar ich punktu
jest raczej duży. Rezultatem tego są zbyt ciemne obrazy. Jeśli masz
ten problem, to powinieneś użyć swojej własnej funkcji do transferu.
Po prostu stwórz następujący plik w katalogu bibliotecznym
ghostscripta i dodaj jego nazwę do wywołania _g_s zaraz przed właściwym
plikiem. Może będziesz musiał zmienić wartości, żeby pasowały do
twojej drukarki. Mniejsze wartości dają jaśniejszy obraz. Mniejsze
wartości (0.2 - 0.15) są dobrym pomysłem, szczególnie jeśli twój
sterownik używa algorytmu Floyda-Steinberga do rasteryzacji kolorów.
---8<---- gamma.ps ----8<---
%!
%transfer functions for cyan magenta yellow black
{0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer
---8<------------------8<---
Przez dopasowanie tych wartości możliwe jest też naprawienie drukarki,
która ma jakąś wadę związaną z kolorami. Jeśli będziesz robił coś
takiego, to radzę użyć pliku _c_o_l_o_r_c_i_r_._p_s, który dostarczany jest wraz
z ghostscriptem (w podkatalogu examples) jako przykładowa strona.
1111.. JJaakk ddrruukkoowwaaćć ppoopprrzzeezz ssiieećć..
Jedną z zalet _l_p_d 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 _l_p_r na wszelkiego rodzaju sieciach.
1111..11.. NNaa hhoośścciiee uunniixx//llppdd..
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 _r_s możesz
pozwolić tylko wybranym użytkownikom na drukowanie; informacje na ten
temat znajdziesz na stronie podręcznika systemowego na temat _l_p_d.
1111..11..11.. PPrrzzyy ppoommooccyy llppdd..
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
_l_p_d. 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.
1111..11..22.. PPrrzzyy ppoommooccyy rrllpprr..
Żeby ominąć konfigurowanie lokalnego lpd, możesz użyć _r_l_p_r, 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 _r_l_p_r:
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ą _r_l_p_r 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
.
1111..22.. NNaa WWiinn9955,, WWiinnNNTT,, LLaannMMaannaaggeerr lluubb SSaammbbiiee..
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 _s_m_b_c_l_i_e_n_t
(część pakietu Samba) do serwisu drukowania Samby opartego na TCP/IP.
Samba zawiera odpowiedni skrypt pod nazwą _s_m_b_p_r_i_n_t. Krótko mówiąc
umieszczasz plik konfiguracyjny dla konkretnej drukarki w katalogu
zadań i instalujesz skrypt _s_m_b_p_r_i_n_t jako _i_f.
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 _s_m_b_p_r_i_n_t.
Możesz także użyć _s_m_b_c_l_i_e_n_t, aby wysłać zadanie drukowania
bezpośrednio do serwisu drukowania SMB bez włączania w to lpd. Zobacz
informacje w podręczniku systemowym.
1111..33.. NNaa ddrruukkaarrccee NNeettWWaarree..
Pakiet ncpfs zawiera narzędzie zwane _n_p_r_i_n_t, które udostępnia te same
funkcje co _s_m_b_p_r_i_n_t, 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 _n_p_r_i_n_t działał poprzez lpd, musisz napisać mały skrypt, aby
drukować "stdin" na drukarkach NetWare i zainstalować go jako _i_f 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 -
1111..44.. NNaa ddrruukkaarrccee EEtthheerrTTaallkk ((AAppppllee))..
Pakiet netatalk zawiera coś podobnego do _n_p_r_i_n_t i _s_m_b_c_l_i_e_n_t. 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.
1111..55.. NNaa ddrruukkaarrccee HHPP ii iinnnnyycchh eetthheerrnneettoowwyycchh ddrruukkaarrkkaacchh..
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 <>, 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ę.
1111..55..11.. NNaa ssttaarrsszzyycchh ddrruukkaarrkkaacchh HHPP..
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 () {
print S;
}
sleep 3;
do dokill();
} else {
while() {
print;
}
}
sub dokill {
kill 9,$child if $child;
}
1111..66.. UUrruucchhaammiiaanniiee _i_f dla odległych drukarek.
Jedną wadą _l_p_d jest to, że _i_f nie są uruchamiane dla drukarek
odległych. Jeśli okaże się, że potrzebujesz _i_f, możesz ustawić
podwójną kolejkę i ponownie zkolejkować dany wydruk. Weź ten _p_r_i_n_t_c_a_p
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 _f_i_l_t_e_r_-_l_j_-_5 to:
#!/bin/sh
gs -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 _p_r_i_n_t_c_a_p.
1111..77.. ZZ WWiinnddoowwss..
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.
1111..88.. ZZ AAppppllee..
Netatalk obsługuje drukowanie z Apple poprzez EtherTalk. Na stronie
Netatalk HOWTO znajdziesz
więcej informacji.
1111..99.. ZZ NNeettwwaarree..
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.
1122.. JJaakk ddrruukkoowwaaćć nnaa ffaaxx--iiee..
1122..11.. UUżżyywwaanniiee ffaaxxmmooddeemmuu..
Jest wiele programów, które pozwolą ci na odbieranie i wysyłanie
faxów. Jednym z bardziej złożonych jest program Sama Lefflera pod
nazwą _H_y_l_a_F_a_x. Jest on dostępny na ftp.sgi.com. Obsługuje on wiele
rzeczy od większej ilości modemów do rozgłaszania (broadcasting).
Dostępny jest także _e_f_a_x, prosty program wysyłający fax-y - jest on
lepszym wyborem dla Linux-owców. Program _m_g_e_t_t_y może odbierać faxy (a
nawet wysyłać pocztę głosową na niektórych modemach!).
1122..22.. UUżżyywwaanniiee ZZddaallnneeggoo SSeerrwwiissuu DDrruukkoowwaanniiaa..
Dostępny jest eksperymentalny serwis, który pozwala ci na wysłanie
poczty elektronicznej z dołączonym fragmentem, który ma być
wydrukowany na faxie gdzieś indziej. Obsługiwane są takie formaty jak
PostScript, tak więc pomimo, iż nie obejmuje swym zasięgiem
wszystkiego, może być on bardzo przydatnym serwisem. Więcej informacji
na temat drukowania poprzez Zdalny Serwis Drukowania znajdziesz na
stronie o zdalnym drukowaniu .
1133.. JJaakk wwyyggeenneerroowwaaćć ccoośś wwaarrtteeggoo ddrruukkoowwaanniiaa..
Tutaj wchodzimy w prawdziwą sieć oprogramowania. Ogólnie, Linux może
uruchamiać cztery typy binariów z różnym sukcesem: Linux, iBCS,
Win16/Win32s (za pomocą dosemu i kiedyś Wine) oraz Mac/68k (przy
pomocy Executora). Ja omówię tylko czysto-Linux-owe i popularne Unix-
owe oprogramowanie, poza tym WordPerfect dla SCO i przypuszczalnie
inne komercyjne procesory tekstu także dobrze działają na Linux-owej
emulacji iBCS.
Dla Linux-a wybór jest przeważnie ograniczony do oprogramowania
dostępnego ogólnie dla Unix-a.
1133..11.. JJęęzzyykkii ""MMaarrkkuupp""..
Większość języków "markup" jest bardziej elastyczna dla większych albo
powtarzalnych projektów, gdzie chcesz, aby komputer kontrolował wygląd
rezultatu/wydruku, aby utworzyć ogólny wzór. Próba zrobienia jakiegoś
ładnego znaczka w języku "markup" przypuszczalnie by "bolała"...
nnrrooffff
To był jeden z pierwszych języków "markup" dla Unix-a. Strony z
podręcznika systemowego są najpopularniejszym przykładem tekstów
sformatowanych przy pomocy makr *roff-a. Wiele ludzi przeklina
ten język, ale nroff ma, przynajmniej dla mnie, bardziej złożoną
składnię niż to jest konieczne i przypuszczalnie jest złym
wyborem dla nowych prac. Jednak warto jest wiedzieć, że możesz
zamienić napisaną w groff-ie stronę bezpośrednio na PostScript.
Większość poleceń "man" zrobi to za ciebie np. _m_a_n _-_t _c_o_ś_| _l_p_r.
TTeeXX
oraz język makr - LaTeX, są jednym z najczęściej używanych
języków "markup" na Unix-ie. Techniczne prace są często napisane
w LaTeX-u ponieważ bardzo upraszcza określenie wyglądu tekstu i
jest wwcciiąążż jednym z niewielu systemów obróbki tekstu, który
obsługuje zapisy matematyczne dokładnie i dobrze na raz.
Formatem wyjściowym TeX-a jest _d_v_i (DeVice Independent - czyli
niezależny od urządzenia [przyp. tłum.]) i można go zamienić na
PostScript lub Hewlett Packard PCL przy pomocy _d_v_i_p_s lub _d_v_i_l_j.
[TeX czyta się "tech" - przyp. tłum.].
_S_G_M_L
Dostępny jest przynajmniej jeden program do obróbki tego języka
na Unix-a; formuuje on podstawy systemu dokumentów Linuxdoc-
SGML. Może on także obsługiwać inne DTD.
_H_T_M_L
Ktoś zasugerował, że dla prostych projektów, wystarczy napisanie
w HTML-u i drukować przy pomocy Netscape-a. Ja się z tym jednak
nie zgadzam.
1133..22.. WWYYSSIIWWYYGG..
[ Jest to skrót od What You See Is What You Get - czyli to co widzisz
to dostaniesz, a oznacza, iż wydrukowane zostanie DOKŁADNIE to co jest
widoczne na ekranie i DOKŁADNIE w taki sam sposób - przyp. tłum.]
W tej chwili jest niedobór oprogramownia do obróbki tekstu WYSIWYG.
Nie bój się napisać jakiegoś i daj mi znać jeśli ominąłem coś tutaj.
_L_y_X
Jest to zakończenie dla LaTeX-a, które wygląda bardzo
obiecująco. Odwiedź stronę domową LyX-a jeśli chcesz
więcej informacji.
_A_n_d_r_e_w _U_s_e_r _I_n_t_e_r_f_a_c_e _S_y_s_t_e_m
AUIS zawiera _e_z - edytor w stylu WYSIWYG z większością cech
podstawowego procesora tekstu, możliwościami HTML oraz pełną
obsługą poczty elektronicznej MIME i grup dyskusyjnych (news-
ow).
_O_f_e_r_t_y _k_o_m_e_r_c_y_j_n_e
Przynajmniej Caldera i Red Hat dostarczają pakiety zawierające
zwykłe aplikacje biurowe jak edytor w stylu WYSIWYG i arkusz
kalkulacyjny. Powiedziałbym, że robią dobrą robotę, ale nigdy
nie używałem takich pakietów. Sądze, że Caldera dostarcza także
WABI firmy Sun, tak więc mógłbyś przypuszczalnie uruchomić jakiś
MS Office pod tym jeśli musiałbyś zintegrować się z plikami
innych.
Jeff Phillips _<_j_e_f_f_@_I___R_A_T_U_S_._o_r_g_> używa WordPerfect-a dla Linux-a
z Caldery (w Slackware różnego rodzaju) i twierdzi, że działa mu
to dobrze. Wygląda na to, że zawiera on wbudowaną obsługę
drukarek, jak to można by się spodziewać. Caldera powinna mieć
jakieś informacje na swojej stronie WWW
.
RedHat dostarcza pakiet o nazwie _A_p_p_l_i_x_w_a_r_e; Ich stronę można
znaleźć pod adresem www.redhat.com.
Inni sprzedawcy niech mi dadzą znać jakie mają oferty.
1144.. PPooddgglląądd pprrzzeedd wwyyddrruukkiieemm..
Prawie wszystko co możesz wydrukować, możesz też zobaczyć na ekranie.
1144..11.. PPoossttSSccrriipptt..
Ghostscript posiada sterownik do X11; najlepiej jeśli jest on użyty
pod kontrolą podglądarki PostScript o nazwie _G_h_o_s_t_v_i_e_w. Najnowsza
wersja tego programu powinna być także w stanie wyświetlić pliki PDF.
1144..22.. TTeeXX ddvvii..
Niezależne od urządzenia (DeVice Independant) pliki TeX-a mogą być
wyświetlane w X11 używając _x_d_v_i. Nowsze wersje _x_d_v_i wywołują
ghostscript, aby wykonać polecenia typowo PostScriptowe.
Jest także sterownik na VT100. Nazywa się _d_g_v_t. _T_m_v_i_e_w działa z Linux-
em i svgalib jeśli to wszystko na co cię stać.
1155.. DDrruukkaarrkkii sszzeerreeggoowwee ppoodd llppdd..
1155..11.. UUssttaawwiiaanniiee ww pprriinnttccaapp--iiee..
Lpd udostepnia pięć atrybutów, które możesz ustawić w pliku
/etc/printcap, aby kontrolować wszystkie ustawienia portu szeregowego,
do którego dołączona jest drukarka. Przeczytaj stronę podręcznika
systemowego na temat _p_r_i_n_t_c_a_p
_<_h_t_t_p_:_/_/_w_w_w_._p_i_c_a_n_t_e_._c_o_m_/_~_g_t_a_y_l_o_r_/_p_h_t_/_m_a_n_/_p_r_i_n_t_c_a_p_._h_t_m_l> i zapamiętaj
znaczenia: _b_r_#, _f_c_#, _x_c_#, _f_s_# i _x_s_#. Ostatnie cztery z tych atrybutów
to mapy bitowe oznaczające ustawienia portu. Atrybut _b_r_# jest
prędkością: np. _b_r_#_9_6_0_0.
Tłumaczenie z postaci _s_t_t_y na _p_r_i_n_t_c_a_p jest bardzo proste. Jeśli
musisz, to zobacz stronę podręcznika systemowego na temat _s_t_t_y.
Użyj _s_t_t_y, aby ustawić port drukarki, tak żebyś mógł wysłać plik do
tego portu (poleceniem _c_a_t) i otrzymał poprawny wydruk. Oto co
wyświetla polecenie _s_t_t_y _-_a dla mojego portu drukarki:
dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ;
eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
-igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase
-tostop -echoprt -echoctl -echoke
Jedynymi zmianami między tym, i stanem w jakim port jest inicjowany
podczas startu są -clocal, -crtscts i ixon. Twój port może mieć inne
ustawienia w zaleźności od tego jak twoja drukarka kontroluje przepływ
(flow control).
_s_t_t_y używa się właściwie w dziwny sposób. Ponieważ polecenie _s_t_t_y
operuje na terminalu podłączonym do jego standardowego wejścia, ty
używasz je, aby manipulować danym portem szeregowym przez użycie znaku
< jak powyżej.
Jak już masz dobre ustawienia, tak że _c_a_t _p_l_i_k _> _/_d_e_v_/_t_t_y_S_2 (w moim
przypadku) działa, zajrzyj do pliku
/usr/src/linux/include/linux/termios.h. Zawiera on wiele #define
(definicji) i kilka struktur - możesz go sobie wydrukować (przecież
drukarka działa, nie ?) i używać jako pomocy. Idź do sekcji, która
zaczyna się tak:
/* c_cflag bit meaning */
#define CBAUD 0000017
Sekcja ta zawiera znaczenia bitów _f_c_# i _f_s_#. Zauważysz, że nazwy (po
ilości bodów) są identyczne z tymi z polecenie _s_t_t_y. A nie mówiłem, że
to będzie proste ?
Zobacz, które z tych ustawień mają znak "-" na początku przy poleceniu
_s_t_t_y. Zsumuj te wszystkie liczby (są one zapisane w systemie
ósemkowym). To będą te bity, które będziesz chciał wyzerować, tak więc
wynik jest tym, co masz wpisać do _f_c_#. Pamiętaj oczywiście, że
będziesz ustawiał bity zaraz po tym jak je wyzerujesz, tak więc możesz
użyć "_f_c_#_0_1_7_7_7_7_7" (ja tak robię).
Teraz zrób to samo dla tych ustawień, które nie mają znaku "-" na
początku w poleceniu _s_t_t_y. W moim przykładzie ważne są CS8 (0000060),
HUPCL (0002000) i CREAD (0000200). Zapamiętaj też ustawienie dla
swojej prędkości (u mnie jest to 0000015). Zsumuj to wszystko - w moim
przykładzie będzie to 0002275. To będzie to, co masz wpisać do _f_s_#.
("_f_s_#_0_2_2_7_5 działa u mnie.)
Zrób to samo z ustawieniem i zerowaniem dla następnej sekcji pliku
nagłówkowego. "c_lflag bits". W moim przypadku nie musiałem niczego
ustawiać, tak więc użyłem tylko "_x_c_#_0_1_5_7_7_7_7" i "_x_s_#_0".
1155..22.. SSttaarrsszzee ddrruukkaarrkkii sszzeerreeggoowwee,, kkttóórree gguubbiiąą zznnaakkii..
Jon Luckey pisze, że u niektórych starszych szeregowych drukarek z
interfejsem za 10 centów i małym buforem, stop w kontroli przepływu
oznacza rrzzeecczzyywwiissttee stop dla drukowania. Potem odkrył, że żeby
naprawić tę niedogodność wystarczy wyłączyć FIFO w układzie 16550
poleceniem _s_e_t_s_e_r_i_a_l (żeby to zrobić po prostu podajesz typ ukladu
uart jako 8250).
1166.. WWyyrraazzyy uuzznnaanniiaa..
Informacje na temat _s_m_b_p_r_i_n_t zostały zaczerpnięte z artykułu Marcela
Roelofsa .
Informacje na temat _n_p_r_i_n_t i używania drukarek NetWare zostały
dostarczone przez Michaela Smitha .
Sekcja na temat drukarek szeregowych pod lpd została napisana przez
Andrew Teffta .
Te wszystkie gammy i inne takie dla "gs" zostały dostarczone przez
Andreasa .
Dwa paragrafy na temat 30 sekundowego "closing_wait" przy sterownikach
szeregowych zostały dostarczone przez Chrisa Johnsona
.
Robert Hart przysłał kilka doskonałych paragrafów na temat ustawiania
serwera drukarek dla połączonych HP, któych ja używam w niezmienionej
wersji.
I specjalne podziękowania dla tuzinów nad tuzinami tych, którzy
wskazywali literówki, złe adresy i błędy w tym dokumencie przez lata.
1166..11.. OOdd ttłłuummaacczzaa..
Wersja ta jest wersją ostateczną. Dodany został odnośnik do właśnie
powstałego tłumaczenia dokumentu Printing-Usage-HOWTO.
Tłumaczenie to jest chronione prawami autorskimi Š Bartosza
Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na
prawach takich samych jak dokument oryginalny.
Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne,
składniowe, techniczne (a może ich tu trochę być, bo nie znam się tak
bardzo na poligrafii) to pisz do mnie:
B.Maruszewski@jtz.org.pl
Oficjalną stroną tłumaczeń HOWTO jest http://www.jtz.org.pl/
Aktualne wersje przetłumaczonych dokumentów znajdują się na tejże
stronie. Dostępne są także poprzez anonimowe ftp pod adresem
ftp.jtz.org.pl w katalogu /JTZ.
Przetłumaczone przeze mnie dokumenty znajdują się także na mojej
stronie WWW. Są tam
też odwołania do Polskiej Strony Tłumaczeniowej.
Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę
dyskusyjną jtz@jtz.org.pl. Jeśli chcesz sie na nią zapisać, to wyślij
list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl