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 <http://www.picante.com/~gtaylor/pht/>, b) podrzuciæ mi informacjê co powinno tu byæ, a nie ma tego. Strona domowa tego HOWTO <http://www.picante.com/~gtaylor/pht/> 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 <http://www.jtz.org.pl/~bart/Tlumaczenie/Html/Printing-Usage- HOWTO.pl.html> 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 <http://www.cyberelk.demon.co.uk/parport.html>. 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 <http://www.jtz.org.pl/Html/Serial-HOWTO.pl.html> 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 <http://www.cs.wisc.edu/~ghost/> 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 <http://ltpwww.gsfc.nasa.gov/ltpcf/about/unix/Depotdoc/LPRng/>. 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(<STDIN>){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 <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/printing/>. 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 <hpa@zytor.com> 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 <http://www.cs.wisc.edu/~ghost/> 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 <opcje> -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 <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/printing/>. 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 <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/filesystems/ncpfs>. 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 <http://thehamptons.com/anders/netatalk/>. 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 <<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ê. 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 (<IN>) { print S; } sleep 3; do dokill(); } else { while(<S>) { 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 <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 _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 <http://thehamptons.com/anders/netatalk/> 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 <http://www.tpc.int/>. 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 <http://www- pu.informatik.uni-tuebingen.de/users/ettrich/> 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 <http://www.caldera.com/>. 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 = <undef>; eol2 = <undef>; 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 <marcel@paragon.nl>. Informacje na temat _n_p_r_i_n_t i u¿ywania drukarek NetWare zosta³y dostarczone przez Michaela Smitha <mikes@bioch.ox.ac.uk>. Sekcja na temat drukarek szeregowych pod lpd zosta³a napisana przez Andrew Teffta <teffta@engr.dnet.ge.com>. Te wszystkie gammy i inne takie dla "gs" zosta³y dostarczone przez Andreasa <quasi@hub-fue.franken.de>. Dwa paragrafy na temat 30 sekundowego "closing_wait" przy sterownikach szeregowych zosta³y dostarczone przez Chrisa Johnsona <cdj@netcom.com>. 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. <http://www.jtz.org.pl/bartek/tlumaczenie.html> 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