  Drukowanie w Linux-ie
  Autor: Grant Taylor, gtaylor+pht@picante.com
  v3.14, 23 Września 1997
  Wersja polska: Bartosz Maruszewski B.Maruszewski@jtz.org.pl
  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 [gt    ]= 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.


  ______________________________________________________________________

  1.  Wprowadzenie.


  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.


  1.1.  Historia


  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.McCauley@bham.ac.uk>; przez kolejne dwa lata
     współtworzyliśmy PHT. Po jakimś czasie dołączyliśmy pracę Karla
     Auera<Karl.Auer@anu.edu.au>. 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.


  1.2.  Prawa autorskie.


  Prawa autorskie należą do Granta Taylora (c) 1997. Proszę kopiować i
  dystrybuować ten dokument do woli, ale nie modyfikoewać ani nie
  zapomnieć mojego nazwiska.


  2.  Jak drukować.


  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 lpr. 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!


  3.  Urządzenia dotyczące drukarki w jądrze.



  3.1.  Urządzenie lp.


  Jądro Linux-a (<=2.1.32), zakładając, że wkompilowałeś lub załadowałeś
  urządzenie lp (polecenie cat /proc/devices powinno pokazać urządzenie
  lp), dostarcza jedno lub więcej urządzeń /dev/lp0, /dev/lp1 i
  /dev/lp2. Nie są one kojarzone dynamicznie, ale są one na stałe
  przypisane konkretnym adresom I/O. Oznacza to, że twoja pierwsza
  drukarka może być na lp0, albo lp1 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 plip oraz lp. Ale
  można załadować jeden albo drugi sterownik w każdej chwili; ręcznie
  albo przez kerneld 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ć plip na jednym porcie, a lp 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 tunelp
  <http://www.picante.com/~gtaylor/pht/man/tunelp.html>, przy pomocy
  którego "root" może ustawiać przerwania i inne opcje na urządzeniu lp.

  Jeśli urządzenie lp 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 insmod (albo w pliku /etc/conf.modules, żeby działało
  także dla kerneld). Parametry to: io=port0,port1,port2 i
  irq=irq0,irq1,irq2. Więcej informacji znajdziesz w podręczniku
  systemowym man na stronie dotyczącej insmod.

  **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 (lp0) 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


  3.2.  Urządzenie parport (jądra >= 2.1.33)


  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>.


  3.3.  Urządzenia szeregowe.


  Urządzenia szeregowe pod Linux-em zwykle nazywają się /dev/ttyS1 lub
  podobnie. Narzędzie stty
  <http://www.picante.com/~gtaylor/pht/man/stty.html> pozwala na
  interaktywne przeglądanie lub określanie ustawień dla portu
  szeregowego; setserial
  <http://www.picante.com/~gtaylor/pht/man/setserial.html> 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 cat plik
  > /dev/ttyS2 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.


  4.  Obsługiwane drukarki.


  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 nie 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 działają 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ą.


  5.  Jakie oprogramowanie do kolejkowania ?


  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 lpsched. 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.


  6.  Jak to działa - podstawy.


  Ż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:


     lpd
        Demon kolejkowania. Jeden z nich jest uruchomiony, aby
        kontrolować wszystko na maszynie, I jeden jest uruchamiany dla
        drukarki podczas drukowania.

     lpr
        Polecenie dla użytkowników do kolejkowania wydruków. Lpr
        kontaktuje się z lpd i umieszcza nowe zadanie w katalogu
        kolejkowania.

     lpq
        Wyświetla wydruki umieszczone w kolejce.

     lpc
        Polecenie do kontrolowania systemu lpd. Poleceniem tym możesz
        wystartować, zatrzymać, zmienić porządek w kolejce drukowania.

     lprm
        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 lpr, 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
  ...


  7.  Jak poustawiać to wszystko - podstawy.



  7.1.  Tradycyjna konfiguracja lpd.


  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 lp, dj i deskjet, 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 printcap.

  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 - if i of. if - 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ć.


  7.2.  Prawa dostępu do plików.


  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...


  8.  Zdobywanie oprogramowania do drukowania.


  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.


  8.1.  Magicfilter.


  "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




  8.2.  Filtr APS.


  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 if 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.



  8.3.  EZ-Magic.


  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.




  9.  Rozwiązania sprzedawców.


  [ Sekcja ta, jest z definicji niekompletna. Przysyłaj szczegóły twojej
  ulubionej dystrybucji. ]


  9.1.  RedHat.


  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 gs i nenscript.  Rozwiązanie to działa
  całkiem dobrze i jest łatwe do ustawienia dla popularnych przypadków.


  9.2.  Inne dystrybucje.


  Proszę o informacje jakie są rozwiązania w innych dystrybucjach.


  10.  Ghostscript.


  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 gs, 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.


  10.1.  Wywoływanie Ghosscript-u.


  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




  10.2.  Dostrajanie wyników w Ghostscripcie.


  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).


  10.2.1.  Umiejscowienie i rozmiar wyniku.


  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.


  10.2.2.  Gamma, rozmiar pikseli itp.



  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 gs 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 colorcir.ps, który dostarczany jest wraz
  z ghostscriptem (w podkatalogu examples) jako przykładowa strona.


  11.  Jak drukować poprzez sieć.


  Jedną z zalet lpd jest to, że można przy jego pomocy drukować na
  drukarkach przyłączonych fizycznie do innych komputerów. Jeśli dobrze
  dobierzesz kombinację skryptów i narzędzi, to możesz drukować przy
  pomocy lpr na wszelkiego rodzaju sieciach.


  11.1.  Na hoście unix/lpd.


  Aby pozwolić odległym maszynom drukować na twojej drukarce, musisz je
  umieścić w /etc/hosts.equiv lub /etc/hosts.lpd. (Zauważ, że
  hosts.equiv ma kilka innych efektów; upewnij się, że wiesz co robisz
  jeśli umieszczasz tam jakąś maszynę). Używając opcji rs możesz
  pozwolić tylko wybranym użytkownikom na drukowanie; informacje na ten
  temat znajdziesz na stronie podręcznika systemowego na temat lpd.


  11.1.1.  Przy pomocy lpd.


  Aby wydrukować coś na innej maszynie, musisz zrobić pozycję w
  /etc/printcap podobną do tej:


  # REMOTE djet500
  lp|dj|deskjet:\
          :sd=/var/spool/lpd/dj:\
          :rm=jakaś.odległa.maszyna.pl:\
          :rp=nazwa_drukarki:\
          :lp=/dev/null:\
          :sh:



  Zauważ, że lokalnie nadal znajduje się katalog zadań obsługiwany przez
  lpd. Jeśli odległa maszyna jest zajętą albo wyłączona, to zadania do
  drukowania czekają lokalnie aż będą mogły zostać wysłane.

  11.1.2.  Przy pomocy rlpr.


  Żeby ominąć konfigurowanie lokalnego lpd, możesz użyć rlpr, aby wysłać
  coś bezpośrednio do kolejki na odległej maszynie. Jest to bardzo
  użyteczne jeśli drukujesz na różnych drukarkach tylko okazyjnie. Z
  ogłoszenia o rlpr:

  Rlpr używa protokołu TCP/IP, aby wysłać zadania do drukowania do
  serwera lpd gdziekolwiek w sieci.

  W przeciwieństwie do lpr, ten *nie* wymaga, żeby drukarki, na których
  chcesz drukować były znane dla lokalnej maszyny (np. w /etc/printcap)
  i przez to jest bardziej elastyczny i wymaga mniejszego nakładu pracy
  administratora.

  rlpr może zostać użyty gdziekolwiek, gdzie mógłby zostać użyty zwykły
  lpr, i jest kompatybilny w dół z tradycyjnym lpr z BSD.

  Najważniejszą zaletą rlpr jest, to że można drukować *skądkolwiek
  dokądkolwiek*, niezależnie od tego jak jest skonfigurowany system, z
  którego chcesz drukować. Może też być użyty jako serwer, tak że
  klienci uruchomieni na innych maszynach jak np.: netscape, xemacs,
  itp. mogą drukować na twojej drukarce małym nakładem wysiłku.

  Rlpr dostępny jest na SUNSite Polska
  <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/printing/>.


  11.2.  Na Win95, WinNT, LanManager lub Sambie.


  Jest dostępne mini-HOWTO "Printing to Windows", które zawiera więcej
  inormacji niż ta sekcja.

  Możliwe jest przekierowanie kolejki lpd poprzez program smbclient
  (część pakietu Samba) do serwisu drukowania Samby opartego na TCP/IP.
  Samba zawiera odpowiedni skrypt pod nazwą smbprint. Krótko mówiąc
  umieszczasz plik konfiguracyjny dla konkretnej drukarki w katalogu
  zadań i instalujesz skrypt smbprint jako if.

  Odpowiednia pozycja w /etc/printcap powinna wyglądać tak:


  lp|remote-smbprinter:\
      :lp=/dev/null:sh:\
      :sd=/var/spool/lpd/lp:\
      :if=/usr/local/sbin/smbprint:



  Aby uzyskać więcej informacji na temat konfigurowania takich
  przypadków przeczytaj dokumentację zawartą w skrypcie smbprint.

  Możesz także użyć smbclient, aby wysłać zadanie drukowania
  bezpośrednio do serwisu drukowania SMB bez włączania w to lpd. Zobacz
  informacje w podręczniku systemowym.


  11.3.  Na drukarce NetWare.


  Pakiet ncpfs zawiera narzędzie zwane nprint, które udostępnia te same
  funkcje co smbprint, ale dla NetWare. Pakiet ten można zdobyć z
  SunSITE Polska
  <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 nprint działał poprzez lpd, musisz napisać mały skrypt, aby
  drukować "stdin" na drukarkach NetWare i zainstalować go jako if dla
  kolejki lpd. Otrzymasz coś takiego:


  sub2|remote-NWprinter:\
          :lp=/dev/null:sh:\
          :sd=/var/spool/lpd/sub2:\
          :if=/var/spool/lpd/nprint-script:



  Skrypt "nprint-script" może wyglądać tak:


  #! /bin/sh
  # Powinieneś najpierw sprawdzić konto guest bez hasła!
  /usr/local/bin/nprint -S sieć -U nazwa -P hasło -q nazwa-kolejki -




  11.4.  Na drukarce EtherTalk (Apple).


  Pakiet netatalk zawiera coś podobnego do nprint i smbclient. Werner
  Eugster udokumentował procedurę dla drukowania do i z sieci Apple o
  wiele lepiej niż ja kiedykolwiek; zobacz to w Netatalk-HOWTO
  <http://thehamptons.com/anders/netatalk/>.

  Netatalk nie działa z kartą SMC Etherpower PCI z chip-em DEC tulip.


  11.5.  Na drukarce HP i innych ethernetowych drukarkach.


  Drukarki HP i niektóre inne mają ethernetowy interfejs, do którego
  możesz drukować bezpośrednio używając lpd. Powinieneś postępować
  zgodnie z instrukcją, którą dostałeś do drukarki albo jej sterownika,
  ale ogólnie takie drukarki "mają uruchomionego" lpd i dostarczają
  jedną lub więcej kolejek, do których możesz drukować. HP może pracować
  np. z takim /etc/printcap:


  lj-5|remote-hplj:\
          :lp=/dev/null:sh:\
          :sd=/var/spool/lpd/lj-5:\
          :rm=nazwa.drukarki.pl:rp=raw:



  Drukarki HP LaserJet z interfejsami Jet Direct obsługują generalnie
  dwie wbudowane kolejki - "surową" (raw), która akceptuje PCL (i
  możliwe, że PostScript) oraz "tekstową", która akceptuje zwykłe ASCII
  i radzi sobie od razu z "efektem schodków".
  W środowisku wielkoskalowym, szczególnie w dużych środowiskach, gdzie
  niektóre drukarki nie obsługują PostScript-u, może być pożyteczne
  ustawienie specjalnego serwera drukowania, do którego drukują
  wszystkie maszyny i na którym uruchamiane są wszystkie zadania
  ghostscript-a.

  Pozwala to twojemu Linux-owi działać jako serwer wydruków dla
  drukarki, i użtykownicy mogą robić swoje wydruki szybko i zajmować się
  swoimi rzeczami zamiast czekać aż drukarka skończy drukować pracę
  kogoś innego.

  Aby to zrobić, ustaw na swoim Linux-ie kolejkę, która wskazuje na HP
  LJ wyposażoną w ethernet. Teraz ustaw kolejkę u wszystkich swoich
  klientów na tego Linux-a.

  Niektóre drukarki sieciowe HP wyraźnie nie akceptują ustawień strony
  tytułowej (banner page) wysłanej przez klienta; można wyłączyć ich
  wewnętrznie generowaną taką stronę przez połączenie się z drukarką
  telnet-em, wciśnięcie dwa razy <<ENTER>>, wpisanie "banner: 0" i
  następnie "quit". Są inne ustawienia, które możesz także w taki sposób
  zmienić - wpisz "?", żeby wyświetlić ich listę.


  11.5.1.  Na starszych drukarkach HP.


  Niektóre drukarki (oraz "czarne pudełka" z sieciowym drukowaniem)
  obsługują tylko prościutkie nie-protokołowane czyste połączenia TCP.
  Zauważalne w tej kategorii są wczesne modele kart JetDirect (właczając
  niektóre JetDirectEx). Ogólnie, aby drukować na takiej drukarce,
  musisz otworzyć połączenie TCP na danym porcie (z reguły 9100) i
  umieścić tam swoje zadanie do wydrukowania. Można to zaimplementować
  m.in. w Perl-u:

































  #!/usr/bin/perl
  # Thanks to Dan McLaughlin for writing the original version of this
  # script (And to Jim W. Jones for sitting next to Dan when writing me
  # for help ;)

  $fileName = @ARGV[0];

  open(IN,"$fileName") || die "Can't open file $fileName";

  $dpi300     = "\x1B*t300R";
  $dosCr      = "\x1B&k3G";
  $ends = "\x0A";

  $port =  9100 unless $port;
  $them = "bach.sr.hp.com" unless $them;

  $AF_INET = 2;
  $SOCK_STREAM = 1;
  $SIG{'INT'} = 'dokill';
  $sockaddr = 'S n a4 x8';

  chop($hostname = `hostname`);
  ($name,$aliases,$proto) = getprotobyname('tcp');
  ($name,$aliases,$port) = getservbyname($port,'tcp')
      unless $port =~ /^\d+$/;;
  ($name,$aliases,$type,$len,$thisaddr) =
          gethostbyname($hostname);
  ($name,$aliases,$type,$len,$thataddr) = gethostbyname($them);
  $this = pack($sockaddr, $AF_INET, 0, $thisaddr);
  $that = pack($sockaddr, $AF_INET, $port, $thataddr);

  if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
  #    print "socket ok\n";
  }
  else {
      die $!;
  }
  # Give the socket an address.
  if (bind(S, $this)) {
  #    print "bind ok\n";
  }
  else {
      die $!;
  }

  # Call up the server.

  if (connect(S,$that)) {
  #    print "connect ok\n";
  }
  else {
      die $!;
  }

  # Set socket to be command buffered.

  select(S); $| = 1; select(STDOUT);

  #    print S "@PJL ECHO Hi $hostname! $ends";
  #    print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends";
  #    print S $dpi300;

  # Avoid deadlock by forking.

  if($child = fork) {
      print S $dosCr;
      print S $TimesNewR;

      while (<IN>) {
          print S;
      }
      sleep 3;
      do dokill();
  } else {
      while(<S>) {
          print;
      }
  }

  sub dokill {
      kill 9,$child if $child;
  }




  11.6.  Uruchamianie if  dla odległych drukarek.


  Jedną wadą lpd jest to, że if nie są uruchamiane dla drukarek
  odległych. Jeśli okaże się, że potrzebujesz if, możesz ustawić
  podwójną kolejkę i ponownie zkolejkować dany wydruk. Weź ten printcap
  jako przykład:


  lj-5:remote-hplj:\
          :lp=/dev/null:sh:\
          :sd=/var/spool/lpd/lj-5:\
          :if=/usr/lib/lpd/filter-lj-5:
  lj-5-remote:lp=/dev/null:sh:rm=nazwa.drukarki.pl:\
          :rp=raw:sd=/var/spool/lpd/lj-5-raw:



  w świetle tego, skrypt filter-lj-5 to:


  #!/bin/sh
  gs <opcje> -q -dSAFER -sOutputFile=- - | \
          lpr -Plj-5-remote -U$5



  Opcja -U dla lpr działa tylko wtedy jeśli lpr jest uruchomiony jako
  demon i ustawia ona poprawnie zleceniodawcę kolejki w ponownie
  zainicjowanej kolejce. Powinieneś raczej użyć bardziej pewnej metody
  na zdobycie identyfikatora użytkownika, ponieważ niezawsze jest to
  argument 5. Zobacz w podręcznik systemowym na temat printcap.


  11.7.  Z Windows.


  Drukowanie z Windows (czy OS/2) na Linux-ie jest obsługiwane poprzez
  SMB w pakiecie SAMBA, który także umożliwia współdzielenie plików dla
  Windows.

  Samba zawiera całkiem pokaźną dokumentację. Możesz albo skonfigurować
  magic-filter na Linux-ie i drukować tam PostScript, albo zainstalować
  sterowniki dla konkretnej drukarki na wszystkich komputerach z
  Winndows i mieć kolejkę dla nich bez żadnych filtrów. Poleganie na
  tych sterownikach może czasami dawać lepsze efekty, ale jest to
  uciążliwe ze strony administratora jeśli jest dużo komputerów z
  Windows. Więc spróbuj najpierw PostScript-u.


  11.8.  Z Apple.


  Netatalk obsługuje drukowanie z Apple poprzez EtherTalk.  Na stronie
  Netatalk HOWTO <http://thehamptons.com/anders/netatalk/> znajdziesz
  więcej informacji.


  11.9.  Z Netware.


  Jest jakaś obsługa drukowania z Netware przez Linux-a oferowana przez
  czy z powodu Calder-y, ale nie mam pojęcia czy Linux może oferować
  drukarki dla klientów Netware.



  12.  Jak drukować na fax-ie.



  12.1.  Używanie faxmodemu.


  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ą HylaFax. 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 efax, prosty program wysyłający fax-y - jest on
  lepszym wyborem dla Linux-owców. Program mgetty może odbierać faxy (a
  nawet wysyłać pocztę głosową na niektórych modemach!).


  12.2.  Używanie Zdalnego Serwisu Drukowania.


  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/>.


  13.  Jak wygenerować coś wartego drukowania.


  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.



  13.1.  Języki "Markup".


  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"...


     nroff
        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. man -t coś| lpr.

     TeX
        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 wciąż 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 dvi (DeVice Independent - czyli
        niezależny od urządzenia [przyp. tłum.]) i można go zamienić na
        PostScript lub Hewlett Packard PCL przy pomocy dvips lub dvilj.
        [TeX czyta się "tech" - przyp. tłum.].

     SGML
        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.

     HTML
        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.


  13.2.  WYSIWYG.


  [ 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.


     LyX
        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.

     Andrew User Interface System
        AUIS zawiera ez - 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).

     Oferty komercyjne
        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 <jeff@I_RATUS.org> 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 Applixware; Ich stronę można
        znaleźć pod adresem www.redhat.com.

        Inni sprzedawcy niech mi dadzą znać jakie mają oferty.



  14.  Podgląd przed wydrukiem.


  Prawie wszystko co możesz wydrukować, możesz też zobaczyć na ekranie.


  14.1.  PostScript.


  Ghostscript posiada sterownik do X11; najlepiej jeśli jest on użyty
  pod kontrolą podglądarki PostScript o nazwie Ghostview.  Najnowsza
  wersja tego programu powinna być także w stanie wyświetlić pliki PDF.


  14.2.  TeX dvi.


  Niezależne od urządzenia (DeVice Independant) pliki TeX-a mogą być
  wyświetlane w X11 używając xdvi. Nowsze wersje xdvi wywołują
  ghostscript, aby wykonać polecenia typowo PostScriptowe.

  Jest także sterownik na VT100. Nazywa się dgvt. Tmview działa z Linux-
  em i svgalib jeśli to wszystko na co cię stać.



  15.  Drukarki szeregowe pod lpd.



  15.1.  Ustawianie w printcap-ie.


  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 printcap
  <http://www.picante.com/~gtaylor/pht/man/printcap.html> i zapamiętaj
  znaczenia: br#, fc#, xc#, fs# i xs#. Ostatnie cztery z tych atrybutów
  to mapy bitowe oznaczające ustawienia portu. Atrybut br# jest
  prędkością: np. br#9600.

  Tłumaczenie z postaci stty na printcap jest bardzo proste. Jeśli
  musisz, to zobacz stronę podręcznika systemowego na temat stty.

  Użyj stty, aby ustawić port drukarki, tak żebyś mógł wysłać plik do
  tego portu (poleceniem cat) i otrzymał poprawny wydruk. Oto co
  wyświetla polecenie stty -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).

  stty używa się właściwie w dziwny sposób. Ponieważ polecenie stty
  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 cat plik > /dev/ttyS2 (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 fc# i fs#. Zauważysz, że nazwy (po
  ilości bodów) są identyczne z tymi z polecenie stty. A nie mówiłem, że
  to będzie proste ?

  Zobacz, które z tych ustawień mają znak "-" na początku przy poleceniu
  stty. 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 fc#. Pamiętaj oczywiście, że
  będziesz ustawiał bity zaraz po tym jak je wyzerujesz, tak więc możesz
  użyć "fc#0177777" (ja tak robię).

  Teraz zrób to samo dla tych ustawień, które nie mają znaku "-" na
  początku w poleceniu stty. 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 fs#.
  ("fs#02275 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 "xc#0157777" i "xs#0".


  15.2.  Starsze drukarki szeregowe, które gubią znaki.


  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 rzeczywiste stop dla drukowania. Potem odkrył, że żeby
  naprawić tę niedogodność wystarczy wyłączyć FIFO w układzie 16550
  poleceniem setserial (żeby to zrobić po prostu podajesz typ ukladu
  uart jako 8250).


  16.  Wyrazy uznania.


  Informacje na temat smbprint zostały zaczerpnięte z artykułu Marcela
  Roelofsa <marcel@paragon.nl>.

  Informacje na temat nprint 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.


  16.1.  Od tłumacza.


  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 (C) 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
































































