Drukowanie w Linux-ie
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:
generowanie 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.
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, b) podrzucić mi informację co powinno tu być, a nie
ma tego.
Strona domowa tego HOWTO jest dobrym miejscem na szukanie
nowszych wersji tego dokumentu; jest ona oczywiście także
dystrybuowana przez Projekt Dokumentacji Linux-a; archiwum zawierające
dokumenty HOWTO możesz znaleźć w Polsce pod adresem
ftp.icm.edu.pl w katalogu
/pub/Linux/sunsite/docs/HOWTO.
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:
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.
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.
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 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, 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.
3.3 Urządzenia szeregowe.
Urządzenia szeregowe pod Linux-em zwykle nazywają się
/dev/ttyS1 lub podobnie. Narzędzie
stty pozwala na interaktywne przeglądanie lub określanie
ustawień dla portu szeregowego;
setserial
pozwoli ci na kontrolowanie kilku rozszerzonych właściwości oraz na
skonfigurowanie IRQ i adresów I/O dla niestandardowych
portów. Więcej na temat portów szeregowych znajdziesz w
Serial-HOWTO dostępnym także w języku polskim.
Jeśli używasz wolnej drukarki szeregowej z kontrolą przepływu (flow
control), może się okazać, że niektóre z twoich wydruków są
obcinane. Może być to spowodowane zachowaniem portu szeregowego,
który wyrzuca wszystkie znaki ze swojego bufora po 30 sekundach od
momentu zamknięcia portu. W buforze może się znajdować do 4096
znaków a jeśli twoja drukarka używa kontroli przepływu i jest
wystarczająco wolna, tak że nie może przyjąć wszystkich 4096 znaków
z portu w ciągu 30 sekund, po tym jak oprogramowanie drukujące
zakmnęło port, to końcowa zawartość bufora zostanie utracona. Jeśli
w wyniku polecenia 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 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.
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:
lpdDemon
kolejkowania. Jeden z nich jest uruchomiony, aby kontrolować
wszystko na maszynie, I jeden jest uruchamiany dla drukarki podczas
drukowania.
lprPolecenie
dla użytkowników do kolejkowania wydruków. Lpr kontaktuje się z
lpd i umieszcza nowe zadanie w katalogu kolejkowania.
lpqWyświetla
wydruki umieszczone w kolejce.
lpcPolecenie
do kontrolowania systemu lpd. Poleceniem tym możesz wystartować,
zatrzymać, zmienić porządek w kolejce drukowania.
lprmUsuwa 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.
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 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).
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.
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.
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.
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.
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. 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.
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ę.
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 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.
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"...
nroffTo 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.
TeXoraz 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.].
SGMLDostę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.
HTMLKtoś 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.
LyXJest to zakończenie dla LaTeX-a, które wygląda
bardzo obiecująco. Odwiedź
stronę domową LyX-a jeśli
chcesz więcej informacji.
Andrew User Interface SystemAUIS 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 komercyjnePrzynajmniej 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.
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 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 © 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.plOficjalną stroną tłumaczeń HOWTO jest
http://www.jtz.org.pl/Aktualne wersje przetłumaczonych dokumentów znajdują się na
tejże stronie. Dostępne są także poprzez anonimowe ftp pod adresem
ftp.jtz.org.pl w katalogu /JTZ.
Przetłumaczone przeze mnie dokumenty znajdują się także na
mojej stronie WWW. Są tam też odwołania do Polskiej Strony
Tłumaczeniowej.
Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę
dyskusyjną jtz@jtz.org.pl. Jeśli chcesz sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Wyszukiwarka