Drukowanie na Linux-ie w użyciu.

Autor: Mark Komarinski , markk@auratek.com
v1.2.1, 24 Marca 1997
Wersja polska: Bartosz Maruszewski B.Maruszewski@jtz.org.pl
v1.02, 26 Lipca 1997

1. Wprowadzenie.

Dokument ten opisuje jak używać systemu kolejkowania do drukarek liniowych dostarczanego wraz z systemem operacyjnym Linux. Dokument ten jest dodatkiem do dokumentu Drukowanie w Linux-ie, który omawia instalację i ustawienie systemu drukowania. Materiał zaprezentowany z tym HOWTO powinien być tak samo ważny dla wszystkich systemów operacyjnych typu BSD w tym także dla Linux-a.
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.

1.1 Historia tego dokumentu.

Uwaga od Marka Komarinskiego <markk@auratek.com>:

Chciałbym podziękować Mattowi Fosterowi za duży wkład pracy przy ponownym pisaniu tego HOWTO. Utrzymuję jego styl i dodaję nowości tak żeby wszystko było w miarę świeże.

Uwaga od Matta Fostera <mwf@engr.uark.edu>:

Wersja bieżąca tego HOWTO jest napisanym od nowa dokumentem, którego oryginał napisali Grant Taylor <grant@god.tufts.edu> i Brian McCauley <B.A.McCauley@bham.ac.uk>. Starałem się zachować mniej więcej to samo co oni napisali, ale zupełnie zmieniłem wygląd i styl tego dokumentu oraz zasięg materiału zawartego tutaj. Czuję, że to uczyni dokument ten bardziej kompletnym i łatwiejszym do przeczytania. Mogę tylko mieć nadzieję, że się zgadzasz.

1.2 Historia Wersji.

v1.2.1

v1.2 v1.11

v1.1

v1.0

1.3 Prawa autorskie i znaki handlowe.

Niektóre nazwy/nazwiska wymienione w tym HOWTO są prawami autorskimi lub znakami handlowymi pewnych firm/osób. Występują one w wersji pełnej lub skróconej.

(c) 1995 Matt Foster (mwf@engr.uark.edu)
(c) 1996-1997 Mark F. Komarinski (markk@auratek.com)

Wszelkie tłumaczenia, prace pochodne, prace zebrane zawierające dokumenty HOWTO muszą zawierać tę notatkę o prawach autorskich. Oznacza to, że nie możesz stworzyć pracy pochodzącej z HOWTO i nałożyć na jej dystrybucję dodatkowych ograniczeń. Wyjątki od tej zasady mogą być uczynione pod pewnymi warunkami; skontaktuj się z koordynatorem programu Linux HOWTO pod niżej podanym adresem.

Krótko mówiąc, chcemy promować szerzenie tych dokumentów przez wszelkie dostępne kanały. Chcielibyśmy także utrzymać prawa autorskie nałożone na te dokumenty, i być powiadomieni o planach dotyczących redystrybucji HOWTO.

Jeśli masz pytania skontaktuj się z Gregiem Hankisem, koordynatorem programu Linux HOWTO po adresem gregh@sunsite.unc.edu.

1.4 Ściąganie dokumentów HOWTO dotyczących drukowania.

Jeśli chcesz sobie wydrukować to HOWTO, to polecam wersję PostScriptową. Jest ona sformatowana w taki sposób, że jest łatwiejsza do czytania i ładniejsza. Wersję angielską w PostScripcie możesz pobrać z SUNSite Polska.
Niestety nie dostarczamy jeszcze wersji polskiej w PostScripcie - szukamy kogoś, kto by nam pomógł rozwiązać problem polskich liter ;) albo na nowszą wersję narzędzi SGML, któraby obsługiwała ISO-8859-2.

1.5 Komentarze.

Pytania, komentarze czy poprawki dotyczące tego dokumentu mogą być kierowane do < markk@auratek.com>.

1.6 Podziękowania.

Kieruje je do wszystkich, którzy poświęcili czas na czytanie wersji alfa i odpowiedzieli wieloma pożytecznymi uwagami i sugestiami - niektórzy z was mogą zobaczyć odzwierciedlenie swoich komentarzy w tej wersji dokumentu.

Chciałbym także podziękować Mattowi Fosterowi, który napisał to HOWTO od nowa.

1.7 Od tłumacza.

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

Przetłumaczone przeze mnie dokumenty znajdują się także na mojej stronie WWW. Są tam też odwołania do Polskiej Strony Tłumaczeniowej.

Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę dyskusyjną jtz@ippt.gov.pl. Jeśli chcesz sie na nią zapisać, to wyślij list o treści subscribe jtz Imię Nazwisko na adres majordomo@ippt.gov.pl

2. Drukowanie pod Linux-em.

Sekcja ta omawia jak drukować pliki, sprawdzać kolejkę wydruków, usuwać zadania z kolejki wydruków, formatować pliki przed ich wydrukowaniem i jak skonfigurować środowisko do drukowania.

2.1 Historia drukowania na Linux-ie.

System drukowania na Linux-ie - system lp - jest przeniesionym źródłem kodu napisanego przez regentów Uniwersytetu Californii dla wersji UNIX-a "Berkeley Software Distribution".

2.2 Drukowanie pliku przy użyciu lpr.

Najbardziej prostą metodą na drukowanie w Linux-ie jest wysłanie pliku do wydrukowania do urządzenia drukarki. Jednym ze sposobów na zrobienie tego jest użycie polecenia cat. Jako "root" możesz zrobić coś takiego:

# cat thesis.txt > /dev/lp

W tym wypadku, /dev/lp jest symbolicznym dołączeniem do rzeczywistego urządzenia drukarki - niech to będzie igłówka, laserówka, "typesetter" czy ploter. (Więcej informacji na temat dołączeń symbolicznych znajdziesz na stronie podręcznika systemowego ln(1)).

Z przyczyn bezpieczeństwa, tylko "root" i użytkownicy należący do tej samej grupy co demon drukowania mogą pisać bezpośrednio na drukarkę. Oto dlaczego polecenia takie jak: lpr, lprm, czy lpq muszą być używane, żeby mieć dostęp do drukarki.

Z tego powodu użytkownicy muszą używać lpr, aby wydrukować jakiś plik. Polecenie to troszczy się o wszystko co jest potrzebne do wydrukowania danego pliku, a potem przekazuje kontrolę do innego programu - lpd czyli "line printer daemon". Demon ten informuje drukarkę jak ma wydrukować dany plik.

Kiedy wykonywany jest lpr, najpierw kopiuje on podany plik do konkretnego katalogu (katalogu zadań), gdzie plik ten pozostaje dopóki lpd go nie wydrukuje. Jak lpd się dowie, że jest jakiś plik do wydrukowania, to utworzy kopię siebie (co my programiści nazywamy rozmnożeniem/klonowaniem). Kopia ta wydrukuje nasz plik, podczas gdy oryginał będzie czekał na dalsze zadania. Pozwala to na obsługiwanie wielu zadań na raz.

Składnia polecenia lpr jest bardzo znana:

$ lpr [ opcje ] [ nazwa_pliku ... ]

Jeśli nazwa_pliku nie jest podana, lpr spodziewa się danych ze standardowego wejścia (zwykle klawiatury lub wyjścia innego programu). To pozwala użytkownikowi na przekierowanie wyjścia poleceń do kolejki drukowania. Np:

$ cat thesis.txt | lpr

lub

$ pr -l60 thesis.txt | lpr

Polecenie lpr przyjmuje kilka argumentów z linii poleceń, które pozwalają użytkownikowi kontrolować jego działanie. Niektóre z bardziej popularnych argumentów to: -Pdrukarka określa drukarkę, na której ma być dane zadanie wydrukowane, -h nie pozwala wydrukować strony tytułowej (z identyfikatorem itp.), -s tworzy symboliczne dołączenie zamiast kopiować plik do katalogu zadań (przydatne do dużych plików) i -#il określa ilość kopii do wydrukowania. Przykład może wyglądać tak:

$ lpr -#2 -sP dj thesis.txt

Polecenie to stworzy symboliczne dołączenie do pliku thesis.txt w katalogu zadań dla drukarki o nazwie dj, a następnie przekaże zadanie do lpd. Następnie wydrukuje drugą kopię tego pliku.

Wszystkie dostępne opcje znajdziesz w podręczniku systemowym lpr(1).

2.3 Przeglądanie kolejki zadań przy pomocy lpq.

Aby zobaczyć zawartość kolejki do drukowania użyj polecenia lpq. Wydane bez argumentów, zwraca zawartość kolejki dla domyślnej drukarki.

Rezultat polecenia lpq może być przydatny do różnych celów.

$ lpq
lp is ready and printing
Rank   Owner      Job  Files                            Total Size
active mwf        31   thesis.txt                       682048 bytes

2.4 Anulowanie zadania przy pomocy lprm.

Inną przydatną cechą każdego systemu drukowania jest możliwość anulowania zadania, które zostało umieszczone w kolejce. Aby to zrobić użyj lprm.

$ lprm -

Powyższe polecenie anuluje wszystkie zadania, które są własnością użytkownika wydającego to polecenie. Pojedyncze zadanie może być anulowane przez zdobycie numeru tego zadania (z polecenia lpq) i podanie go do lprm:

$ lprm 31

Spowodowałoby skasowanie zadania nr 31 - thesis.txt na drukarce domyślnej.

2.5 Kontrolowanie programu lpd przy pomocy lpc.

Program lpc(8) używany jest do kontrolowania drukarek, które obsługuje lpd. Możesz włączyć lub wyłączyć drukarkę albo jej kolejkę, zmienić kolejność w kolejce zadań oraz otrzymać raport na temat drukarek i ich kolejek. Lpc jest używany głównie w sytuacjach kiedy do komputera podłączonych jest kilka drukarek.

$ lpc

Powyższe polecenie wystartuje program lpc. Domyślnie, uruchamia się interaktywny tryb i możesz zacząć wydawać polecenia. Inną opcją jest wprowadzenie polecenia lpc z linii argumentów.

$ lpc status all

Lista dostępnych poleceń jest w podręczniku systemowym lpd, a tutaj podaję kilka najważniejszych, których będziesz najczęściej używał. Polecenie oznaczone opcją może być albo nazwą drukarki (lp, print, itp.) albo słowem "all", co oznacza wszystkie drukarki.

2.6 "Printtool" z RedHat-a.

Tylko krótka notatka na temat zadziwiającego programu printtool z dystrybucji RedHat. Wygląda na to, że robi on wszystko to co robiłby filtr magiczny. RedHat instaluje od razu wiele programów filtrujących. Oto jak ustawiłem swoją drukarkę HP LJ 4L podłączoną do portu równoległego na RH 4.0.

Na jedno zawołanie możesz mieć definicje dla różnych drukarek w /etc/printcap. Dla różnych rozmiarów papieru, rozdzielczości, itd.

3. Drukowanie plików.

Ta sekcja omawia drukowanie plików z jakimi się spotkasz na Linux-ie.

3.1 Drukowanie plików graficznych.

Drukowanie takich plików na drukarce zwykle zależy od rodzaju grafiki i drukarki. Igłówki z reguły nie wchodzą w grę z powodu różnic w sposobach obsługi plików graficznych. Najlepszym wyborem byłoby tu sprawdzenie czy twoja drukarka jest kompatybilna z Epson-em albo IBM ProPrinter, a następnie konwersja do PostScriptu i użycie ghostscriptu do wydrukowania (zobacz następną sekcję).

Jeśli masz drukarkę laserową, to sytuacja jest trochę łatwiejsza ponieważ większość jest kompatybilna z PCL. To daje ci kilka opcji do wyboru. Niektóre programy umieją wysyłać bezpośrednio w PCL. Jeśli nie, to programy takie jak NetPBM potrafią konwertować na PCL. Ostatnią opcją jest użycie ghostscriptu (zobacz następcją sekcję).

Najepszą opcją do wyboru jest instalacja pakietów takich jak NetPBM i ghostscriptu, a potem instalacja magicznego filtra do automagicznej obróbki grafiki.

3.2 Drukowanie plików PostScriptowych.

Drukowanie takich plików na drukarce, która potrafi interpretować ten język jest proste; po prostu użyj lpr a drukarka zajmię się resztą. Dla tych z nas, którzy nie mają takich drukarek pozostają inne środki. Na szczęście są dostępne programy, które potafią robić użytek z PostScriptu i tłumaczyć go na język zrozumiały dla większości drukarek. Najbardziej znanym programem z tego rodzaju jest GhostScript.

Jest on odpowiedzialny za konwersję wszystkich opisów w PostScripcie na język zrozumiały dla danej druarki. Aby wydrukować plik w PostScripcie za pomocą ghostscriptu możesz zrobić coś takiego:

$ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr thesis.ps

Zauważ w powyższym przykładzie, że właściwie przesyłamy wynik z programu ghostscript do lpr używając opcji -sOutputFile.

Ghostview jest interfejsem graficznym pod XWindows dla ghostscriptu. Pozwala on na podgląd pliku w PostScripcie przed wydrukowaniem. Ghostview i ghostscript - oba można otrzymać z ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/apps/graphics/viewers/X.

3.3 Drukowanie plików PDF.

Adobe wypuścił czytarkę Acrobat dla Linux-a i jest ona dostępna na stronie domowej WWW tej firmy. Poprzednia wersja - xpdf - jest także dostępna.

3.4 Drukowanie plików w TeX-u.

Jednym z najprostszych sposobów na drukowanie takich plików jest konwersja ich na PostScript i drukowanie za pomocą ghostscriptu. Aby to zrobić musisz najpierw przkonwertować je z TeX-a na format znany jako DVI (co jest skrótem od DeVice Independent - czyli niezależne od urządzenia). Można to zrobić polecenem tex(1). potem musisz zmienić plik DVI na PostScript przy pomocy dvips. Wszystko wygląda mniej więcej tak:

$ tex thesis.tex
$ dvips thesis.dvi

Teraz możesz wynikowy plik w PostScripcie wydrukować w sposób podany wyżej,

3.5 Drukowanie plków sformatowanych troff-em.

$ groff -Tascii thesis.tr | lpr

albo jeśli wolisz

$ groff thesis.tr > thesis.ps

a potem wydrukuj plik w PostScripcie jak wyżej.

3.6 Drukowanie stron podręcznika systemowego man.

$ man man | col -b | lpr

Strony te zawierają preformatowane dane troff-a tak więc musimy wyrzucić wszelkie podświetlenia, podkreślenia itp. Program col robi to całkiem miło, a ponieważ używamy strumieni program man nie użyje polecenia more.

4. Różności.

W sekcji tej znajdują się tematy, których nie można zaliczyć do wcześniejszych.

4.1 Formatowanie przed drukowaniem.

Ponieważ większość plików ASCII nie jest sformatowana do drukowania użyteczne jest sformatowanie ich w jakiś sposób przed wydrukowaniem. Może zawierać to umieszczenie tytułu i numeru na każdej stronie, ustawienie marginesu, podwójne przerwy między wyrazami, wcięcia albo drukowanie pliku w większej ilości kolumn. Popularnym sposobem na osiągnięcie tego jest użycie np. programu pr.

$ pr +4 -d -h"Ph.D. Thesis, 2nd Draft" -l60 thesis.txt | lpr

W powyższym przykładzie, pr przeskoczyłby pierwsze 3 strony (+4), ustawił długość strony na 60 lini (-l60), podwoił spacje (-d) i dodał napis "Ph.D. Thesis, 2nd Draft" na początku każdej strony (-h). Lpr umieściłby rezultat tego polecenia w kolejce. Zajrzyj do podręcznika systemowego pr(1) jeśli chcesz znać więcej informacji.

4.2 Zmienne Środowiskowe PRINTER.

Wszystkie polecenia w systemie drukowania Linux-a akceptują opcję -P. Opcja ta pozwala użytkownikowi na podanie, która drukarka ma być użyta. Jeśli użytkownik tego nie poda, to wybrana zostanie drukarka domyślna.

Zamiast każdorazowego podawania nazwy drukarki, możesz podać ją w zmiennej środowiskowej "PRINTER". W zależności od twojej powłoki, może to być zrobione w różny sposób. Dla bash-a będzie to:

$ PRINTER="nazwa_drukarki"; export PRINTER

Dla csh będzie to:

% setenv PRINTER "nazwa_drukarki"

Polecenia te mogą być umieszczone w skryptach startowych (.profile dla bash-a i .cshrc dla csh) albo wydane z linii poleceń. Więcej na temat zmiennych środowiskowych znajdziesz na stronach podręcznika systemowego bash(1) i csh(1).
UWAGA - Ostrzegam żebyś przypadkowo z tego podniecenia nie zaczął drukować tych stron :)) - mają one odpowiednio 4.000 i 5.500 linii.

5. Odpowiedzi na często zadawane pytania.

P1. Jak mam zapobiec efektowi schodków ?

O1. Efekt ten jest powodem tego, że niektóre drukarki spodziewają się znaków CR/LF na końcu linii, a w Unix-ach koniec linii to tylko LF (czyli przejście do nstępnej linii bez powrotu do jej początku). Najprostszym sposobem na poprawienie tego jest sprawdzenie czy twoją drukarkę można jakoś przełączyć na druki sposób - albo przy pomocy przełącznika albo wysyłając sekwencję znaków na początku każdego wydruku. Do drugiego rozwiązania potrzebujesz filtra. (Zobacz pytanie 2.)

Szybkim sposobem jest użycie filtru z wiersza poleceń. Przykładem może być:

$ cat thesis.txt | todos | lpr

P2. Co to jest filtr.

A2. Jest to program, który czyta ze standardowego wejścia (stdin), robi coś z wczytanymi danymi i zapisuje je do standardowego wyjścia (stdout). Filtry są używane do wielu rzeczy, włączając w to przeróbkę tekstu.

P3. Co to jest filtr magiczny ?

A3. Jest to filtr, który robi coś w zależności od typu pliku wejściowego. Np. jeśli plik jest czystym plikiem tekstowym, to po prostu wydrukowałby go używając standardowej metody. Jeśli plik jest w PostScripcie czy innym formacie, to wydrukowałby go używając innej metody (np. ghostscriptu). Dwoma przykładami tego są "magicfilter" i "APSfilter". Jedyną wadą tych filtrów jest to, że odpowiednie programy muszą być zainstalowane przed instalacją filtra.

Powodem tego jest to, że jeśli "magicfilter" zostaje zainstalowany, to pyta on twój system o konkretne programy (takie jak ghostscript - jeśli go znajdzie, to wie, że może obsługiwać dane typu PostScript), potem tworzy siebie na podstawie tego co znalazł. Aby obsługiwać wszystkie pliki do drukowania, musisz mieć zainstalowane przynajmniej takie programy:

P4. Co z Systemem Drukowania z Windows ? Czy Linux będzie z tym działał ?

O4. Może. Drukarki, które akceptują tylko polecenia WPS (Windows Printing System) nie będą działać z Linux-em. Natomiast te, które akceptują polecenia WPS i inne (jak np. Canon BJC 610) będą działać dopóki są ustawione na coś innego niż WPS. Inne drukarki takie jak HP DeskJet 820Cxi/Cse nie będą działać z Linux-em. Właściwie Linux może służyć jako serwer wydruków dla Win95 ponieważ Win95 ma sterowniki do tych drukarek.

P5. Co to za system ? Nie mogę wydrukować więcej niż 6 stron bo dostaję "file too large".

O5. Jedna z opcji w /etc/printcap dotyczy maksymalnego rozmiaru wydruku. Domyślną wartością jest 1000 bloków dysku (ok. 500KB). Dla PostScript-u itp. da ci to około 6-8 stron z grafiką i to koniec. Upewnij się, że dodałeś następującą linię do pozycji danej drukarki w /etc/printcap:

mx=0

Podstawowym powodem tego limitu jest dotrzymanie warunku, żeby nie zapełnić partycji na wydruki. Jest inny spośob na zrobienie tego; można kazać lpr utworzyć dołączenie symboliczne do pliku do wydrukowania. Musisz wtedy pamiętać, żeby dodać opcję -s do każdego wywołania programu lpr.

6. Rozwiązywanie problemów.

W sekcji tej znajdują się częste problemy z jakimi się możesz spotkać przy drukowaniu.

Jeśli twoja drukarka nie działa:

Odpowiedź na te pytania pomoże znaleźć rozwiązanie.

Inne sugestie do tej sekcji wysyłaj na adres < markk@auratek.com>.

7. Odwołania.

Sekcja ta zawiera odnośniki dla systemu drukowania na Linux-ie. Próbowałem utrzymać tę sekcję jak najbardziej zwięzłą. Jeśli czujesz, że zapomniałem czegoś, to nie wahaj się pisać do mnie.

Zanim wyślesz pytanie na grupę dyskusyjną, zastanów się:

Jeśli któreś z powyższych jest prawdą, to pomyśl dwa razy zanim wyślesz pytanie. A jeśli już się zdecydujesz wysłać, to postaraj się zawrzeć jak najdokładniejsze informacje. Spróbuj napisać coś więcej niż "Mam problemy z lpr. Pomóżcie !" Tego typu listy zostaną przez większość zignorowane. Podaj także wersję jądra jaką używasz, jak/kiedy pojawił się błąd i ewentualnie komunikaty jakie się pojawiły.

Strony podręcznika systemowego:

Grupy dyskusyjne (USENET; NEWS)