Jak ustawiæ drukarkê u¿ywaj±c± AppleTalk Autor: Werner Eugster, eugster@giub.unibe.ch WWeerrssjjaa ppoollsskkaa:: BBaarrttoosszz MMaarruusszzeewwsskkii BB..MMaarruusszzeewwsskkii@@zzssmmeeiiee..ttoorruunn..ppll v1.01, 26 Lipca 1997 Jako u¿ytkownik Linux-a chcesz mieæ dostêp do drukarek Mac-a takich jak LaserWriter siedz±cych na sieci z kontrolerem EtherTalk. Jako u¿ytkownik Mac-a chcesz mieæ dostêp do wszystkich drukarek na Linux- ie. Aby ustawiæ taki serwis na Linux-ie musisz postêpowaæ wed³ug tej samej procedury w obu przypadkach. Po skompilowaniu i zainstalowaniu oprogramowania AppleTalk nneettaattaallkk (je¶li tego nie zrobi³e¶, to przeczytaj najpierw Podrêcznik instalacji atalk <http://thehamp tons.com/anders/netatalk> napisany przez AAnnddeerrssaa BBrroowwnnwwoorrtthhaa) pewnie ju¿ uruchomi³e¶ wszystkie demony poprzez rc.atalk w swoim katalogu /etc. Ale najpierw upewnij siê, ¿e serwis AppleTalk rzeczywi¶cie dzia³a zanim zaczniesz konfigurowaæ drukarki. Ja u¿ywam netatalk w wersji 1.3.3 z ³atami opisanymi w Przewodniku instalacyjnym Andersa Brownwortha. Powiedziano mi, ¿e ¶cie¿ka do filtrów netatalk zmieni³a siê w nowszych wersjach. 11.. MMoojjaa ssttrreeffaa AApppplleeTTaallkk.. Napisz /usr/local/atalk/bin/getzones, aby sprawdziæ czy wszystkie strefy AppleTalk s± widziane przez Linux-a. Powiniene¶ widzieæ przynajmniej jedn± nazwê, która jest twoj± stref± lokaln±, w innym przypadku bardzo prawdopodobne jest, ¿e twój serwis AppleTalk nie dzia³a poprawnie. Ja dostajê co¶ takiego (tylko kilka pierwszych linii): Pingo$ /usr/local/atalk/bin/getzones | more VLSB LSB-Integrative Biology LSB-Biology Library LSB-Herbaria LSB-UCMP LSB-MVZ Vanishing Packets MIP Barker Hall Przy pomocy opcji dowiesz siê która jest twoj± stref±: Pingo$ /usr/local/atalk/bin/getzones -m VLSB Pingo$ Tak wiêc moj± stref± lokaln± jest VLSB, kompletn± listê wszystkich lokalnych stref mo¿na uzyskaæ przy pomocy opcji -l (w razie gdy twoja drukarka nie jest w twojej strefie musisz znaæ dok³adn± nazwê strefy). 22.. DDoowwiieeddzz ssiiêê jjaakkaa jjeesstt nnaazzwwaa ddrruukkaarrkkii.. Je¶li chcesz tylko, aby lokalna drukarka UNIX-owa by³a dostêpna dla klientów AppleShare, to przeskocz tê sekcjê i id¼ do ``sekcji nr 3''. Najpierw musimy siê dowiedzieæ jak s± zdefiniowane nazwy Internetowe w AppleTalk. Jest to bardzo podobne do tego co znasz ze swojego Linux-a. Nazwy wystêpuj± w formie: objekt:typ@strefa. Je¶li nie zale¿y ci na nazwie strefy lokalnej to u¿yj @*. Tak wiêc, aby znale¼æ wszystkie objekty w twojej strefie, napisz /usr/local/atalk/bin/nbplkup, co wypluje wielk± listê, z elementami jak ten: Pingo$ /usr/local/atalk/bin/nbplkup |more Sun ValleyUs Macintosh:Macintosh IIsi 12398.245:253 Sun ValleyUs Macintosh:Workstation 12398.245:4 IB Instructional Support: Power Macintosh 12398.196:253 IB Instructional Support:Workstation 12398.196:4 centris 660AV: Macintosh 12398.51:253 centris 660AV:Workstation 12398.51:4 Chapin Lab vx - JoeC:Macintosh IIvx 12398.101:253 Chapin Lab vx - JoeC:Workstation 12398.101:4 Pingo Mac Printer:LaserWriter 12398.164:129 Pingo Default Printer:LaserWriter 12398.164:128 Pingo:AFPServer 12398.164:130 Pingo:netatalk 12398.164:4 Pingo:Workstation 12398.164:4 Lucicutia:AFPServer 12398.123:248 Theobald Chapin, III:LaserWriter 12398.73:191 Je¶li chcesz znaæ tylko objekty konkretnego typu jak LaserWriter, musisz u¿yæ /usr/local/atalk/bin/nbplkup :LaserWriter. Upewnij siê, ¿e wstawi³e¶ dwukropek, który oznacza, ¿e chcesz znaæ tylko objekty typu LaserWriter. S³owo nie mo¿e zawieraæ du¿ych liter, ale nie mo¿esz omin±æ spacji. Tak wiêc, ¿eby zobaczyæ Macintosh IIvx musisz wstawiæ nazwê typu w cudzys³owia: Pingo$ /usr/local/atalk/bin/nbplkup :"Macintosh IIvx" Chapin Lab vx - JoeC:Macintosh IIvx 12398.101:253 Pingo$ Dobra. Krótko: Chcê móc drukowaæ z mojego Linux-a na LaserWriter o nazwie Theobald Chapin, III. Zanim spróbujesz ustawiæ printcap dla kolejki tej drukarki, upewnij siê czy masz dostêp do tej drukarki. Napisz /usr/local/atalk/bin/papstatus -p "Theobald Chapin, III" (zauwa¿, ¿e cudzys³owia s³u¿± tylko temu, aby poinformowaæ twoj± pow³okê, i¿ Theobald Chaplin, III to jeden argument a nie trzy) i powiniene¶ otrzymaæ co¶ takiego: status: idle Je¶li nie, to sprawd¼ czy AppleTalk rzeczywi¶cie dzia³a (mo¿e demon nie jest uruchomiony ? Sprawd¼ tak: ps -xa | grep atalkd i ps -xa | grep afpd). Poniewa¿ LaserWriter spodziewa siê PostScriptu, powiniene¶ mieæ pod rêk± krótki plik testowy w PostScripcie. Nazwa mojego pliku to: test.eps i mogê go wys³aæ bezpo¶rednio do Theobald Chaplin, III uruchamiaj±c klienta drukowania AppleShare: /usr/local/atalk/bin/pap -p "Theobald Chapin, III":LaserWriter@VLSB test.eps Zauwa¿, ¿e do³aczy³em nazwê strefy tylko po to, ¿eby siê upewniæ, ¿e wszystko dzia³a dobrze. Je¶li twoje zadanie drukowania siê pojawi (co sekundê - czy jako¶ tak - otrzymasz komunikat je¶li kto¶ inny u¿ywa drukarki w tym samym momencie. Obserwuj odpowied¼ twojej drukarki i co robi kiedy zacznie drukowaæ twój plik). Je¶li bêdziesz mia³ jakie¶ k³opoty, u¿yj aecho, aby sprawdziæ objekty AppleTalk w ten sam sposób jakby¶ u¿ywa³ ping-a przez TCP/IP (Ctrl-C zatrzymuje aecho): /usr/local/atalk/bin/aecho "Theobald Chapin, III":LaserWriter@VLSB 14 bytes from 12398.73: aep_seq=0. time=15. ms 14 bytes from 12398.73: aep_seq=1. time=14. ms 14 bytes from 12398.73: aep_seq=2. time=14. ms 14 bytes from 12398.73: aep_seq=3. time=14. ms ----12398.73 AEP Statistics---- 5 packets sent, 4 packets received, 20% packet loss round-trip (ms) min/avg/max = 14/14/15 Pingo$ Powiniene¶ straciæ tylko ostatni pakiet przy przerwaniu Ctrl-C, w innym wypadku co¶ jest nie talk z twoim po³±czeniem. 33.. UUssttaawwiiaanniiee sseerrwwiissuu ddrruukkoowwaanniiaa nnaa LLiinnuuxx--iiee.. Bêd± dwa kroki. Najpierw upewnisz siê, ¿e mo¿esz drukowaæ na Linux-ie potem upewnisz siê, ¿e ta drukarka jest dostêpna dla klientów AppleShare. Mówi±c ja¶niej: najpierw ustawisz swoj± drukarkê, ¿eby by³a dostêpna dla UNIX-a (lpd - demona drukowania) (sekcja 3.1 do 3.2), a potem udostêpnisz j± innym u¿ytkownikom w strefie AppleTalk (sekcja 3.3) co jest oczywi¶cie opcjonalne. Wielu ludzi nie lubi ustawiania z dwóch powodów: drukarka AppleTalk jest ju¿ dostepna w strefie AppleTalk, to u¿ytkownicy Mac-ów mog± siê do niej bezpo¶rednio do³±czyæ. Wiêc nie ma potrzeby istnienia kolejki na Linux-ie. Jednak ja jestem u¿ytkownikiem Linux-a i chcê mieæ dostêp do tej drukarki i dlatego mój poni¿szy opis robi dok³adnie to: pozwala u¿ytkownikowi Linux-a na drukowanie na drukarce AplleTalk. jest drukark± lokaln± pod³±czon± do równoleg³ego portu Linux-a (np. /dev/lp1), to jest kilka zmian w pliku /etc/printcap. Ja poka¿ê przyk³ad ustawienia z drukark± lokaln±, którego nie testowa³em, ale dosta³em od innego u¿ytkownika. Przeczytaj ``sekcjê 3.4'' na ten temat i sprawd¼ szczegó³owe informacje na temat u¿ywania Ghostscript-u razem z Netatalk <http://artoo.hitchcock.org/~flowerpt/projects/linux- netatalk/ghostscript.html> napisane przez Mike'a Pearsona i Billa McGonigle'a. 33..11.. KKoonnffiigguurraaccjjaa ttwwoojjeeggoo //eettcc//pprriinnttccaapp.. Je¶li twoja drukarka mo¿e ju¿ drukowaæ przy pomocy polecenia Pingo$ lpr -P lp test.eps to mo¿esz przeskoczyæ ten pierwszy krok. W innym przypadku stañ siê "root-em" i id¼ do katalogu /etc, ¿eby wyedytowaæ plik printcap. Szczegó³y znajdziesz na stronie podrêcznika systemowego "man". Ja opiszê tylko jak ustawiæ LaseWriter, tak ¿eby dzia³a³ z poleceniem lpr z Linux-a. Dodaj pozycjê dla swojej drukarki do pliku printcap. Ja mam zdefiniowan± tylko LaserWriter i mój plik wygl±da tak: lp|Pingo LaserWriter|Theobald Chapin, III:\ :sd=/usr/spool/theobald:\ :lp=/dev/null:\ :pl#63:pw#85:\ :mx#0:\ :sh:sf:\ :lf=/usr/adm/lpd-errs:\ :if=/usr/local/bin/myif:\ :of=/usr/local/atalk/etc/ofpap: 33..11..11.. nnaazzwwaa ddrruukkaarrkkii ddllaa uu¿¿yyttkkoowwnniikkóóww LLiinnuuxx--aa Pierwsza linia definiuje trzy logiczne nazwy, które nie musz± mieæ ¿adnego podobieñstwa do nazw, jakie chcesz nadaæ tej drukarce w kliencie AppleShare. Dlatego nazwa³em j± lp, poniewa¿ jest to nazwa stosowana w wiêkszo¶ci UNIX-ów. Inne nazwy stosujê tylko po to, ¿eby wiedzieæ co to w³a¶ciwie za drukarka. 33..11..22.. kkaattaalloogg zzaaddaaññ Potem musisz mieæ katalog zadañ, gdzie demon bêdzie sk³adowa³ zadania. Ja nazwa³em swój katalog zadañ /usr/spool/theobald w tej samej hierarchii co katalog poczty. Pingo$ ls -l drwxrwxr-x 2 root mail 1024 Feb 8 08:46 mail drwxr-xr-x 2 root mail 2048 Feb 8 17:23 mqueue drwxrwxr-x 5 news news 1024 Sep 1 1994 news drwxrwxr-x 2 root lp 1024 Feb 9 13:15 theobald Stwórz go u¿ywaj±c mkdir a potem ustaw w³a¶ciciela (root), grupê (lp) Pingo$ chown root.lp theobald i prawa dostêpu Pingo$ chmod 775 theobald Potem stworzy³em dwa pliki: lock i status w tym katalogu: Pingo$ cd theobald Pingo$ touch lock; chown root.root lock; chmod 004 lock Pingo$ touch status; chown root.root status; chmod 664 status teraz mo¿esz zdefiniowaæ ten katalog jako katalog zadañ jak ja to zrobi³em w linii 2. 33..11..33.. uurrzz±±ddzzeenniiee ddrruukkaarrkkii Je¶li twoja drukarka jest lokaln± drukark± do³±czon± do urz±dzenia takiego jak/dev/lp1, to to jest urz±dzenie, którego potrzebujesz. U¿yjesz mknod, aby utworzyæ to urz±dzenie je¶li go jeszcze nie ma. Dla drukarki w AppleTalk nie chcesz w³a¶ciwie drukowaæ do ¿adnego urz±dzenia, ale wys³aæ zadanie do tej drukarki u¿ywaj±c programu pap z katalogu /usr/local/atalk/bin. Zrobi siê to przy pomocy filtra psf, który uruchomi program pap, aby mieæ dostêp do drukarki. Dlatego, po tym jak zadanie zosta³o wys³ane do LaserWriter, jest ono ci±gle w Linux-ie, poniewa¿ demon drukowania lpd ma na samym koñcu wys³aæ to zadania na urz±dzenie. Dlatego zdefiniujemy urz±dzenie /dev/null jako urz±dzenie drukarki, które wy¶le twoje zadanie w pró¿niê (bo chcesz mieæ tylko to co siê pojawi³o na drukarce AppleTalk, prawda?). Dlatego w trzeciej linii wpiszemy :lp=/dev/null:\. Przeczytaj stronê podrêcznika systemowego na temat psf, je¶li masz wiêcej ni¿ jedn± drukarkê AppleTalk i je¶li masz problemy z u¿ywaniem urz±dzenia /dev/null jako urz±dzenia drukarki. 33..11..44.. rroozzmmiiaarr ssttrroonnyy,, mmaakkssyymmaallnnyy rroozzmmiiaarr pplliikkuu ii nnaagg³³óówweekk U¿yj pól pl i pw dla okre¶lenia d³ugo¶ci strony (linie) i szeroko¶ci (znaki). Polem mx mo¿esz zdefiniowaæ maksymalny rozmiar pliku drukowanego. Je¶li plik jest wiêkszy, demon drukarki obetnie go, albo odmówi drukowania. Je¶li ustawisz tê warto¶æ na 0 (mx#0), oznacza to, i¿ mo¿na drukowaæ pliki o nieograniczonych rozmiarach. Uwa¿aj, bo przypadkowo papier mo¿e siê skoñczyæ je¶li nikt siê nie bêdzie o to troszczyæ. A twoja g³odna drukarka bêdzie wo³aæ o papier ! Tak wiêc radzê nie ustawiaæ pola mx na 0 je¶li skoñczy³e¶ ju¿ testowaæ i wszystko jest w porz±dku. Polem sh mo¿emy zabroniæ drukowania strony pocz±tkowej (z identyfikatorem w³a¶ciciela itp.) Polem sf mo¿emy zabroniæ drukowania feed forms. 33..11..55.. zzaappiissyywwaanniiee bb³³êêddóóww Ja zdefiniowa³em do tego celu plik /usr/adm/lpd-errs. Bêdziesz musia³ stworzyæ ten plik samemu (np. poleceniem touch /usr/adm/lpd-errs) 33..11..66.. ffiillttrryy TToo jjeesstt wwaa¿¿nnee !! Jak ju¿ to opisa³em, twoje zadanie zostanie wys³ane do drukarki AppleTalk tylko je¶li zainstalujesz odpowiedni filtr, który uruchomi program, pap. Pakiet netatalk u¿ywa konceptu hackerskiego, u¿ywaj±c filtru psf, ale z ró¿nymi do³±czeniami do niego. psf analizuje nazwê tego do³±czenia, aby dowiedzieæ siê, czy ma uruchomiæ pap je¶li pod³añcuch jest w nazwie do³±czenia, i odwróciæ kolejno¶æ drukowania je¶li w nazwie jest rev. Spójrz na to wydaj±c polecenie: Pingo$ ls -l /usr/local/atalk/etc lrwxrwxrwx 1 root root 3 Feb 8 14:44 ifpap -> psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 ifpaprev -> psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 ofpap -> psf -rwxr-xr-x 1 root root 49299 Feb 8 14:44 papd -rw-r--r-- 1 root root 35 Feb 9 13:48 papd.conf -rwxr-xr-x 1 root root 11395 Feb 8 14:44 psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 tfpap -> psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 tfpaprev -> psf Pingo$ Tak wiêc filtr o nazwie ifpap uruchomi pap, ifpaprev odwróci kolejno¶æ stron i uruchomi pap. Zamienia on zwyk³y tekst na PostScript, tak ¿eby¶ nie skoñczy³ na komunikacie z b³êdem. Jedyny filtr jaki musisz zainstalowaæ to of: :of=/usr/local/atalk/etc/ofpap: gdzie /usr/local/bin/myif jest prostym skryptem pow³oki, który pozwala mi na przerywanie linii w tek¶cie, które zosta³y zapisane programem, który automatycznie ³amie linie (bp. textedit). Niestety filtr psf nie robi nic takiego i ignoruje ustawienia szeroko¶ci papieru. Ja napisa³em swój w³asny filtr linebreak.c <http://www.giub.unibe.ch/~eugster/linebreak.c>, który robi to dla mnie i umie¶æ nastêpuj±ce linie w "myif": #!/bin/sh /usr/local/bin/linebreak $* | /usr/local/atalk/etc/ifpap $* Je¶li w ten sposób ustawisz filtr tekstowy, to linbreak bêdzie uwa¿a³ tylko na szeroko¶æ strony (ustawion± pw), podczas gdy ifpap (psf) sprawdza tylko d³ugo¶æ. Wygl±da na to, ¿e psf zak³ada, ¿e pierwsza linia to 0, tak wiêc ustaw pl#63 je¶li chcesz mieæ 64 linii na stronie. Je¶li nie chcesz ³amania linii, to po prostu umie¶æ liniê: :if=/usr/local/atalk/etc/ifpap:\ Teraz zapisz swój nowy printcap. Je¶li spróbujesz teraz co¶ wydrukowaæ, dowiesz siê, ¿e jeszcze nie dzia³a, wiêc czytaj nastêpny paragraf. Jak wspomnia³em wcze¶niej, UNIX-owa nazwa drukarki w printcapie nie ma odpowiednika dla nazwy drukarki w AppleTalk. Musisz stworzyæ plik .paprc w swoim katalogu zadañ, który bêdzie zawiera³ adres drukarki w AppleTalk. Jest to tylko jedna linia. Zauwa¿, ¿e nie musia³em umieszczaæ nazwy drukarki w cudzys³owia w tym pliku, ale inni pisz± mi, ¿e u nich to dzia³a³o tylko z cydzys³owami. To spróbuj najpierw bez cydzys³owów: Pingo$ cat /usr/spool/theobald/.paprc Theobald Chapin, III:LaserWriter@VLSB To teraz mo¿esz zaczynaæ. Je¶li dostaniesz komunikat o b³êdzie jak np. "Turing:LaserWriter@Tech Support": NBP wtedy spróbuj z cudzys³owami. Mo¿e byæ te¿ tak, ¿e musisz wstawiæ tylko nazwe przed dwukropkiem w cudzys³owa, tak: "Theobald Chapin, III":LaserWriter@VLSB. Je¶li masz jeszcze jakie¶ problemy, to my¶l i kombinuj ;) NIe znam ¿adnego uniwersalnego sposobu na rozwi±zanie tego problemu. Wiêcej na temat hackowania i ró¿nych obej¶æ z filtrami znajdziesz w sekcji ``Znane problemy''. 33..22.. PPrrzzeetteessttuujj ddrruukkaarrkkêê.. Najpierw sprawd¼ czy demon drukarki jest rzeczywi¶cie uruchomiony: Pingo$ ps -xa | grep lpd 45 ? SW 0:00 (lpd) 346 pp0 D 0:00 grep lpd Pingo$ Spróbuj wydrukowaæ plik w PostScripcie i plik tekstowy, ¿eby siê przekonaæ, ¿e wszystko dzia³a. Przypuszczalnie musisz zrestartowaæ demona poleceniem lpc. Uruchom lpc i napisz restart lp, down lp i up lp. Potem sprawd¼ status: lpc> status lp: queuing is enabled printing is enabled no entries no daemon present lpc> lpc> quit Teraz wydrukuj swój plik poleceniem Pingo$ lpr -P lp filename Je¶li wszystko jest w porz±dku, to plik status w katalogu zadañ powienien teraz zawieraæ naj¶wie¿sze informacje na temat twojej drukarki: Pingo$ cat /usr/spool/theobald/status job: Paul; status: busy; source: LocalTalk Pingo$ 33..33.. SSkkoojjaarrzz ttêê ddrruukkaarrkkêê zz jjaakk±±¶¶ nnaazzww±± ddllaa AApppplleeTTaallkk.. Je¶li teraz pójdziesz do Mac-a i spróbujesz wybrac swoj± now± drukarkê dowiesz siê, ¿e poka¿e siê ona z nazw± twojego serwera Linux-owego. To mo¿e nie byæ zbyt zadowalaj±ce, dlatego musisz stworzyæ, albo wyedytowaæ plik papd.conf w katalogu etc AppleTalk, /usr/local/atalk/etc/papd.conf (przeczytaj "man papd" je¶li chcesz znaæ wiêcej szczegó³ów). Minimum tego co musisz zrobiæ to umieszczenie w tym pliku nazwy jak± chcesz nadaæ drukarce, a na koñcu dopisz :\ tak jak w printcap-ie. W drugiej linii podajesz nazwê jak± ta drukarka ma w Linux-ie opcj± pr. Mój plik wygl±da tak: Pingo$ cat /usr/local/atalk/etc/papd.conf Pingo Mac LaserWriter:\ :pr=lp: Pingo$ Oznacza to, ¿e (domy¶lna) zmienna lp zawiera nazwê: Pingo Mac LaserWriter dla klienta AppleShare. Dowiesz siê równie¿, ¿e teraz u¿ytkownik na Mac-u mo¿e drukowaæ bezpo¶rednio na drukarce Theobald Chaplin III jak i poprzez Linux-a, gdzie nazwa drukarki to Pingo Mac LaserWriter. Dla mnie jest wa¿ne, aby móc drukowaæ bezpo¶renio na tej drukarce, a podczas pracy na Mac-u drukowanie poprzez Linux-a wydaje siê o wiele szybsze, poniewa¿ Linux zkolejkuje zadanie i zniknie ono natychmiast z mojego desktopu. Je¶li chcesz zarejestrowaæ swoj± drukarkê w jakiej¶ strefie AppleTalk (nie w domy¶lnej strefie), po prostu podajesz tê strefê wraz z rozszerzeniem @nazwa_strefy w pliku papd.conf: MotorsLab@EEAP:\ :pr=ee3rd: 33..44.. JJaakkaa jjeesstt rróó¿¿nniiccaa mmiiêêddzzyy llookkaallnn±± ddrruukkaarrkk±± ppoodd³³±±cczzoonn±± ddoo kkoommppuutt eerraa LLiinnuuxx--oowweeggoo?? Ta sekcja nie jest jeszcze ca³kiem gotowa !!! /etc/princap: lp:lp=/dev/lp1:sd=/usr/spool/lp1:sh /usr/local/atalk/etc/papd.conf: HP LJIIIp:\ :pr=lp:\ :pd=/usr/local/atalk/etc/HP_LaserJet_IIIP.ppd: Sprawd¼ szczegó³y na stronie U¿ywanie ghostscript-a wraz z Netatalk <http://artoo.hitchcock.org/~flowerpt/projects/linux- netatalk/ghostscript.html>. 44.. RRoozzwwii±±zzyywwaanniiee pprroobblleemmóóww.. 44..11.. OOggóóllnnaa ssttrraatteeggiiaa.. Je¶li masz jakie¶ problemy podczas drukowania, nawet je¶li dzia³a³o kiedy wszystko ustawia³e¶ tak jak opisa³em, to spójrz do /usr/adm/mesaages (albo do /usr/log/messages albo /var/log/messages - przyp. t³um.) oraz do /usr/adm/syslog (patrz poprzednia uwaga). Je¶li tylko spróbujesz co¶ wydrukowaæ u¿ywaj±c filtru psf, to znajdziesz podobne linie w wymienionych wy¿ej plikach: Feb 12 17:47:52 Pingo ofpap[1443]: starting for ? Feb 12 17:47:52 Pingo ofpap[1443]: sending to pap[1444] Feb 12 17:47:52 Pingo ofpap[1443]: straight text Feb 12 17:47:59 Pingo ofpap[1443]: 1444 done Feb 12 17:47:59 Pingo ofpap[1443]: pausing Feb 12 17:48:01 Pingo ifpap[1447]: starting for ? Feb 12 17:48:01 Pingo ifpap[1447]: sending to pap[1448] Feb 12 17:48:01 Pingo ifpap[1447]: straight text Feb 12 17:48:09 Pingo ifpap[1447]: 1448 done Feb 12 17:48:09 Pingo ofpap[1443]: restarting Feb 12 17:48:09 Pingo ifpap[1447]: done Feb 12 17:48:09 Pingo ofpap[1443]: done Feb 12 18:00:46 Pingo ofpap[1481]: starting for ? Feb 12 18:00:46 Pingo ofpap[1481]: sending to pap[1482] Feb 12 18:00:46 Pingo ofpap[1481]: straight text Feb 12 18:00:51 Pingo ofpap[1481]: 1482 done Feb 12 18:00:51 Pingo ofpap[1481]: pausing Feb 12 18:00:52 Pingo ifpap[1485]: starting for ? Feb 12 18:00:52 Pingo ifpap[1485]: sending to pap[1486] Feb 12 18:00:52 Pingo ifpap[1485]: straight text Feb 12 18:00:57 Pingo ifpap[1485]: 1486 done Feb 12 18:00:57 Pingo ofpap[1481]: restarting Feb 12 18:00:57 Pingo ofpap[1481]: done Feb 12 18:00:57 Pingo ifpap[1485]: done Je¶li co¶ nie dzia³a, otrzymasz komunikat w /usr/adm/syslog jak ten: Feb 12 10:04:59 Pingo papd[70]: No such printer: "lp" Feb 12 10:04:59 Pingo papd[70]: printcap problem: "lp" (twoja domy¶lna zmienna lp nie jest zdefiniowana) Feb 12 17:02:21 Pingo ofpap[1149]: 1150 died with 1 Feb 12 17:02:21 Pingo lpd[1148]: lp: output filter died (1) Feb 12 17:02:26 Pingo lpd[1148]: lp: Daemon filter 'f' terminated (11) Feb 12 17:04:48 Pingo lpd[1195]: lp: Daemon filter 'f' terminated (11) Feb 12 17:08:03 Pingo lpd[1216]: lp: Daemon filter 'f' terminated (11) Feb 12 17:10:00 Pingo lpd[1228]: cannot execv /usr/local/bin/linebreak|/usr/local/atalk/ifpap Feb 12 17:11:51 Pingo lpd[1244]: /usr/adm/lpd-errs: No such file or directory (/etc/printcap nie akceptuje strumieni w definicji if; oto dlaczego u¿ywa³em skryptu /usr/local/bin/myif. Zapomnia³em tak¿e stworzyæ pliku /usr/adm/lpd-errs, który zdefiniowa³em w /etc/printcap) 44..22.. NNiieezznnaannee pprroobblleemmyy Najpierw przeczytaj sekcjê o ``Znanych problemach''. Je¶li nie bêdzie tam nic pomocnego dla ciebie, to wy¶lij do mnie list i do³±cz do niego pliki /etc/printcap oraz /usr/local/atalk/etc/papd.conf. nnbbppllkkuupp ppookkaazzuujjee nnaazzwwêê ddrruukkaarrkkii ii jjeejj aaddrreess,, aallee jjaa nniiee ddoossttaajjêê ¿¿aaddnneejj ooddppoowwiieeddzzii zz pprrooggrraammuu ppaappssttaattuuss oodd tteejj ddrruukkaarrkkii.. 44..33.. ZZnnaannee pprroobblleemmyy.. Dostajê du¿o listów od ludzi, którzy maj± problemy, wiêc umieszczê tutaj rozwi±zania dla wszystkich. Bêdzie to rosn±ca, nieposortowana lista. Po prostu sprawd¼ czy twój problem jest tu opisany. 44..33..11.. nniiee mmaa wwyyddrruukkuu zzwwyykk³³eeggoo pplliikkuu tteekkssttoowweeggoo Sprawd¼ czy nie masz w pliku /usr/adm/lpd-errs czego¶ takiego: unprintable character (0x9a)! Jest to problem dotycz±cy psf, filtru u¿ytego do drukowania. Zlokalizuj plik psf.c w swojej dystrybucji netatalk i uczyñ go zapisywalnym chmod 644 psf.c Zlokalizuj drug± liniê, w której jest ³añcuch unprintable character. Pierwsze wystapienie (z dwóch) powino byæ w linii 402 a drugie - w 496 lub podobnie. Druga linia to jest przypuszczalnie ta, która ci sprawia k³opoty. Zamieñ if ( !isascii( *p ) || !isprint( *p )) { if ( !literal ) { fprintf( stderr, "unprintable character (0x%x)!\n", (unsigned char)*p ); return( 2 ); /* Toss job */ } printf( "\\%o", (unsigned)*p ); na if ( !isascii( *p ) || !isprint( *p )) { if ( !literal ) { fprintf( stderr, "unprintable character (0x%x) converted to ?!\n", (unsigned char)*p ); /* return( 2 );*/ /* Toss job */ putchar( '?' ); /* Don't toss job! */ } else{ printf( "\\%o", (unsigned)*p ); } Teraz napisz "make" w wierszu poleceñ w katalogu netatalk (nie w tym, w którym jest psf.c, bo make nie bêdzie w tym przypadku zna³o ¶cie¿ki do pap !). Potem skopiuj nowe psf do odpowiedniego katalogu (/usr/local/atalk/etc). To co siê dzieje to: program zamienia niedrukowalny znak na znak "?" i nie przerywa pracy. Mo¿e kto¶ ma lepszy pomys³ na to jak przekonwertowaæ niedrukowalny znak na jego odpowiednik w PostScripcie ? Ale je¶li to bêdziesz robi³, to uwa¿aj na prawa autorskie w psf ! 44..33..22.. nniiee mmaa uummllaauuttóóww,, aannii zznnaakkóóww nnaarrooddoowwyycchh Jak w³a¶nie wy¿ej wspomnia³em, psf nie obs³uguje rozszerzonych zbiorów znaków. Ale nenscript to potrafi. Ale poniewa¿ nie jest to filtr, który móg³by zostaæ u¿yty bezpo¶rednio w printcap-ie, bêdziesz musia³ to obej¶æ. Ja mam zdefiniowan± dodatkow± drukarkê, która obs³uguje zwyk³y tekst u¿ywaj±c nenscriptu. /etc/printcap wygl±da tak: # # Apple LaserPrinter Select 360 on AppleTalk: # lp|Pingo LaserWriter|Theobald Chapin, III:\ :sd=/usr/spool/theobald:\ :lp=/dev/null:\ :pl#61:\ :pw#80:\ :mx#0:\ :sh:\ :sf:\ :lf=/var/adm/lpd-errs:\ :if=/usr/local/bin/myif:\ :of=/usr/local/atalk/etc/ofpap: # # Special setup for plain text files, to convert to PostScript using nenscript # instead of psf (which doesn't process the whole ISO characterset) # text:\ :sd=/usr/spool/textprinter:\ :lp=/dev/null:\ :mx#0:\ :sh:\ :sf:\ :lf=/var/adm/lpd-errs:\ :of=/usr/local/bin/textfilter: /usr/local/bin/textfilter jest skryptem w pow³oce: #!/bin/sh /usr/bin/nenscript -P lp -2 -r -T US -i "Werner Eugster" Niestety nie znalaz³em sposobu na zachowanie nazwy pliku do drukowania i dlatego u¿ywam opcji -i z moim nazwiskiem, ¿eby oznaczyæ wydruk. Mo¿e znajdziesz jaki¶ lepszy sposób u¿ywaj±c np. Unix-owej zmiennej ¶rodowiskowej z loginem. W tym ustawieniu otrzymujê tekst na papierze w uk³adzie poziomym (opcja -r) w dwóch kolumnach (-2) wys³any na standardow± drukarkê lp. Aby wydrukowaæ zwyk³y plik tekstowy u¿ywam polecenia lpr -P text plain.txt Tak wiêc przede wszystkim, drukarka zdefiniowana jako text zamienia zwyk³y tekstowy plik na PostScript u¿ywaj±c nenscript (który obs³uguje pe³en zestaw znaków ISO), ktory przekazuje go dalej do drukarki zdefiniowanej jako lp. Przez to, u¿ywaj±c polecenia lpq zobaczysz, ¿e zadanie drukowania pojawi siê przy drukarce lp i przychodz±cego ze standardowego wej¶cia, co jest poprawne. Je¶li kto¶ zna jaki¶ sposób, ¿eby umie¶ciæ na wydruku nazwê pliku, to bêdê bardzo wdziêczny za tê informacjê ! 44..33..33.. mmoojjee uussttaawwiieenniiaa dd³³uuggoo¶¶ccii ii sszzeerrookkoo¶¶ccii ssttrroonnyy ssaa iiggnnoorroowwaannee To by³ mój b³±d. Sprawd¼ czê¶æ powy¿ej, gdzie opisujê myif. Musisz dodaæ $* dwa razy w drugiej linii w pliku, która teraz wygl±da tak: #!/bin/sh /usr/local/bin/linebreak $* | /usr/local/atalk/etc/ifpap $* 44..33..44.. zzaaddaanniiee jjeesstt wwyyss³³aannee ddoo ddrruukkaarrkkii,, aallee nniiee zzoossttaajjee wwyyddrruukkoowwaannee Jest wiele takich problemów. Jeden, o którym dowiedzia³em siê od Paolo Supino to ten: _"_P_o_d_c_z_a_s _k_r_ó_t_k_i_e_j _i_n_s_p_e_k_c_j_i _w_y_d_r_u_k_u _z _n_b_p_l_k_u_p _(_¿_e_b_y _z_o_b_a_c_z_y_æ _c_z_y _s_± _t_a_k _j_a_k_i_e_¶ _d_z_i_w_n_e _r_z_e_c_z_y_)_, _z_o_b_a_c_z_y_³_e_m_, _¿_e _n_a_s_z_a _d_r_u_k_a_r_k_a _n_a _s_i_e_c_i _m_a _t_e_n _s_a_m _n_u_m_e_r _c_o _s_e_r_w_e_r _N_T _(_k_t_ó_r_y _k_o_l_e_j_k_u_j_e _z_a_d_a_n_i_a _z _P_C_-_t_ó_w_)_. _T_o _b_y_³_o ¼¼llee. 1. Serwer NT jest bbaarrddzzoo z³ym spoolerem. 2. Powinien on kolejkowaæ tylko maszyny Windows-owe. 3. Pomimo tego, i¿ nie mia³ on przechwytywaæ wszystkiego co przez niego przesz³o - on to robi³. _R_o_z_w_i_±_z_a_n_i_e_: _W_y_³_±_c_z_y_æ _z_u_p_e_³_n_i_e _s_e_r_w_e_r _d_r_u_k_o_w_a_n_i_a _d_l_a _M_a_c_-_ó_w _n_a _N_T_. _W_y_e_d_y_t_o_w_a_æ _p_l_i_k .paprc _w _k_a_t_a_l_o_g_u _z_a_d_a_ñ _t_a_k_, _¿_e_b_y _w_s_k_a_z_y_w_a_³ _o_n _b_e_z_p_o_¶_r_e_d_n_i_o _n_a _d_r_u_k_a_r_k_ê_. _Z_r_e_s_t_a_r_t_o_w_a_æ _k_o_m_p_u_t_e_r_, _¿_e_b_y _m_u _s_i_ê _p_a_m_i_ê_c _o_d_¶_w_i_e_¿_y_³_a_. 44..33..55.. mmoojjaa ddrruukkaarrkkaa nniiee bbiieerrzzee ppaappiieerruu zz tteeggoo zzaassoobbnniikkaa,, zz kkttóórreeggoo jjaa cchhccêê Domy¶lnie wszystko jest drukowane na papierze ze standardowego zasobnika. Je¶li chcesz tak ustawiæ drukarkê, aby bra³a papier z innego zasobnika ni¿ ze standardowego, to spróbuj tego: Zmodyfikuj swój plik /usr/local/bin/myif i przepu¶æ wszystko przez program awk, czy jaki¶ inny, który potrafi zapisaæ dodatkow± liniê do strumienia po nag³ówku. Np. Ja spróbowa³em tak: #!/bin/sh /usr/local/bin/linebreak $* | awk '{if(NR==1&&$1~"%!"){print;print "statusdict begin /manualfeed true store end\n";}else{print}}' | /usr/local/atalk/etc/ifpap $* (upewnij siê, ¿e nie ma fizycznych ³amañ linii w linii drugiej). papier z podajnika rêcznego. Dla innych podajników zamieñ tekst w cuszys³owach ("statusdict begin /manualfeed true store end\n") na odpowiednie polecenie z tej listy: Podajnik | Polecenie PostScriptu ------------------+--------------------------------------------------- przedni | "statusdict begin 0 setpapertray end" | tylny | "statusdict begin 1 setpapertray end" | automatyczny | "statusdict begin /manualfeed true store end" Polecenia PostScriptu do zdefiniowania wyj¶ciowych "szufladek": Szufladka | Polecenie PostScriptu ------------------+--------------------------------------------------- górna | "0 statusdict /setoutputtray get exec" | dolna | "1 statusdict /setoutputtray get exec" Oczywi¶cie je¶li chcesz zdefiniowaæ podajnik wej¶ciowy ii szufladkê wyj¶ciow±, to musisz wstawiæ dwie linie do pliku PostScriptowego. Chocia¿ to dzia³a dla wej¶cia, które ju¿ jest PostScriptem. Je¶li chcesz to osi±gn±æ dla tekstu, który jest dopiero zamieniany na PostScript, to musisz zmodyfikowaæ plik psf.c i skompilowaæ nowy filtr psf. (nie zapomnij zainstalowaæ go w katalogu /usr/local/atalk/etc !). Wszystko co musisz zrobiæ, to znale¼æ liniê %%!PS-Adobe-2.0 (ok. linii 379, musi to byæ funkcja textps(). Dodaj now± liniê: printf( "statusdict begin /manualfeed true store end\n" ); (i znowu - mo¿esz zamieniæ tekst w cudzys³owach na ten, który ci odpowiada). Potem skompiluj ponownie psf i zainstaluj go. Davis Goodman skoñczy³ na takim skrypcie myif, który sprawdza czy chcesz drukowaæ w rozmiarach listowych czy normalnych. Je¶li jest to normalny, to wykonywane jest polecenie PostScriptu powoduj±ce wybór tylnego podajnika, w innym przypadku papier pobierany jest z podajnika standardowego. #!/bin/sh bounding=`grep BoundingBox $8 | cut -d" " -f5 ` if [ "$bounding" = "" ]; then /usr/bin/awk '{if(NR==1&&$1~"%!"){print;print "statusdict begin 1 setpapertray end\n";}else{print}}' | /usr/local/atalk/etc/ifpap $* else /usr/local/atalk/etc/ifpap $* fi To dzia³a z Netscape a twoje w³asne oprogramowanie mo¿e przyjmowaæ inne warto¶ci. Za³±czy³em ten przyk³ad tylko po to, ¿eby ci wskazaæ, gdzie nale¿y zacz±æ je¶li chcesz robiæ podobne sztuczki. Jeszcze jeden przyk³ad jest od Tomasa Pospiska, który zdefiniowa³ nazwy drukarek dla ró¿nych podajników w tej samej drukarce w /etc/printcap. ¯eby wydrukowaæ na papierze z konkretnego podajnika wysy³asz zadanie na odpowiedni± drukarkê. Jego printcap wygl±da tak: # LaserWriter Pro 630 (Default Tray) lp:\ :sd=/usr/spool/lp1:\ :lp=/dev/null:\ :pl#63:pw#85:\ :mx#0:\ :sh:sf:\ :lf=/var/log/lp-errs:\ :if=/usr/lib/atalk/filters/myif:\ :of=/usr/lib/atalk/filters/ofpap: # # LaserWriter Pro 630 (Manual Tray) lpm:\ :sd=/usr/spool/lpm:\ :lp=/dev/null:\ :pl#63:pw#85:\ :mx#0:\ :sh:sf:\ :lf=/var/log/lp-errs:\ :if=/usr/lib/atalk/filters/myif_manual:\ :of=/usr/lib/atalk/filters/ofpap: a filtr myif wygl±da tak: #!/bin/sh /usr/bin/awk '{if(NR==1&&$1~"%!"){print;print "statusdict begin /manualfeed true store end\n";}else{print}}' | /usr/lib/atalk/filters/ifpap $* Jak dot±d dosta³em konstruktywne komentarze i pytania od ludzi z COM domena 11 EDU (USA) 12 US domena (USA) 1 GOV domena USA 2 NET domena 1 Australia 1 Austria 2 Belgia 1 Francja 2 Niemcy 5 Islandia 1 W³ochy 3 Japonia 1 Holandia 1 Portugalia 2 Wileka Brytania 1 Szwajcaria 1 © 13 Marca 1997 Werner Eugster (eugster@giub.unibe.ch) 55.. OOdd tt³³uummaacczzaa.. 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 to pisz do mnie: B.Maruszewski@zsmeie.torun.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.ippt.gov.pl w katalogu /pub/Linux/JTZ/. Przet³umaczone przeze mnie dokumenty znajduj± siê tak¿e na mojej stronie WWW. <http://www.zsmeie.torun.pl/~bart/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@ippt.gov.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