Będą dwa kroki. Najpierw upewnisz się, że możesz drukować na Linux-ie potem upewnisz się, że ta drukarka jest dostępna dla klientów AppleShare.
Mówiąc jaśniej: najpierw ustawisz swoją drukarkę, żeby była
dostępna dla UNIX-a (lpd - demona drukowania) (sekcja 3.1 do
3.2), a potem udostępnisz ją innym użytkownikom w strefie AppleTalk
(sekcja 3.3) co jest oczywiście opcjonalne.
Wielu ludzi nie lubi ustawiania z dwóch powodów:
(1) Jeśli
drukarka AppleTalk jest już dostepna w strefie AppleTalk, to
użytkownicy Mac-ów mogą się do niej bezpośrednio dołączyć. Więc nie
ma potrzeby istnienia kolejki na Linux-ie. Jednak ja jestem
użytkownikiem Linux-a i chcę mieć dostęp do tej drukarki i dlatego
mój poniższy opis robi dokładnie to: pozwala użytkownikowi Linux-a na
drukowanie na drukarce AplleTalk.
(2) Jeśli twoja drukarka
jest drukarką lokalną podłączoną do równoległego portu Linux-a
(np. /dev/lp1), to jest kilka zmian w pliku
/etc/printcap. Ja pokażę przykład ustawienia z drukarką
lokalną, którego nie testowałem, ale dostałem od innego
użytkownika. Przeczytaj
sekcję 3.4 na ten
temat i sprawdź szczegółowe informacje na temat
używania Ghostscript-u razem z Netatalk napisane przez
Mike'a Pearsona i Billa McGonigle'a.
Jeśli twoja drukarka może już drukować przy pomocy polecenia
Pingo$ lpr -P lp test.eps
to możesz przeskoczyć ten pierwszy krok.
W innym przypadku stań się "root-em" i idź do katalogu /etc, żeby wyedytować plik printcap. Szczegóły znajdziesz na stronie podręcznika systemowego "man". Ja opiszę tylko jak ustawić LaseWriter, tak żeby działał z poleceniem lpr z Linux-a.
Dodaj pozycję dla swojej drukarki do pliku printcap. Ja mam zdefiniowaną tylko LaserWriter i mój plik wygląda tak:
lp|Pingo LaserWriter|Theobald Chapin, III:\
:sd=/usr/spool/theobald:\
:lp=/dev/null:\
:pl#63:pw#85:\
:mx#0:\
:sh:sf:\
:lf=/usr/adm/lpd-errs:\
:if=/usr/local/bin/myif:\
:of=/usr/local/atalk/etc/ofpap:
Pierwsza linia definiuje trzy logiczne nazwy, które nie muszą mieć żadnego podobieństwa do nazw, jakie chcesz nadać tej drukarce w kliencie AppleShare. Dlatego nazwałem ją lp, ponieważ jest to nazwa stosowana w większości UNIX-ów. Inne nazwy stosuję tylko po to, żeby wiedzieć co to właściwie za drukarka.
Potem musisz mieć katalog zadań, gdzie demon będzie składował
zadania. Ja nazwałem swój katalog zadań
/usr/spool/theobald w tej samej hierarchii co katalog
poczty.
Pingo$ ls -l drwxrwxr-x 2 root mail 1024 Feb 8 08:46 mail drwxr-xr-x 2 root mail 2048 Feb 8 17:23 mqueue drwxrwxr-x 5 news news 1024 Sep 1 1994 news drwxrwxr-x 2 root lp 1024 Feb 9 13:15 theobald
Stwórz go używając mkdir a potem ustaw właściciela (root), grupę (lp)
Pingo$ chown root.lp theobald
i prawa dostępu
Pingo$ chmod 775 theobald
Potem stworzyłem dwa pliki: lock i status w tym katalogu:
Pingo$ cd theobald Pingo$ touch lock; chown root.root lock; chmod 004 lock Pingo$ touch status; chown root.root status; chmod 664 status
teraz możesz zdefiniować ten katalog jako katalog zadań jak ja to zrobiłem w linii 2.
Jeśli twoja drukarka jest lokalną drukarką dołączoną do urządzenia
takiego jak/dev/lp1, to to jest urządzenie, którego
potrzebujesz. Użyjesz mknod, aby utworzyć to urządzenie jeśli go
jeszcze nie ma. Dla drukarki w AppleTalk nie chcesz właściwie
drukować do żadnego urządzenia, ale wysłać zadanie do tej drukarki
używając programu pap z katalogu
/usr/local/atalk/bin. Zrobi się to przy pomocy filtra psf,
który uruchomi program pap, aby mieć dostęp do drukarki. Dlatego,
po tym jak zadanie zostało wysłane do LaserWriter, jest ono ciągle
w Linux-ie, ponieważ demon drukowania lpd ma na samym końcu wysłać
to zadania na urządzenie. Dlatego zdefiniujemy urządzenie
/dev/null jako urządzenie drukarki, które wyśle twoje
zadanie w próżnię (bo chcesz mieć tylko to co się pojawiło na
drukarce AppleTalk, prawda?). Dlatego w trzeciej linii wpiszemy
:lp=/dev/null:\. Przeczytaj stronę podręcznika systemowego
na temat psf, jeśli masz więcej niż jedną drukarkę AppleTalk i
jeśli masz problemy z używaniem urządzenia /dev/null jako
urządzenia drukarki.
Użyj pól pl i pw dla określenia długości strony (linie) i szerokości (znaki). Polem mx możesz zdefiniować maksymalny rozmiar pliku drukowanego. Jeśli plik jest większy, demon drukarki obetnie go, albo odmówi drukowania. Jeśli ustawisz tę wartość na 0 (mx#0), oznacza to, iż można drukować pliki o nieograniczonych rozmiarach. Uważaj, bo przypadkowo papier może się skończyć jeśli nikt się nie będzie o to troszczyć. A twoja głodna drukarka będzie wołać o papier ! Tak więc radzę nie ustawiać pola mx na 0 jeśli skończyłeś już testować i wszystko jest w porządku.
Polem sh możemy zabronić drukowania strony początkowej (z identyfikatorem właściciela itp.)
Polem sf możemy zabronić drukowania feed forms.
Ja zdefiniowałem do tego celu plik
/usr/adm/lpd-errs. Będziesz musiał stworzyć ten plik samemu
(np. poleceniem touch /usr/adm/lpd-errs)
To jest ważne ! Jak już to opisałem, twoje zadanie zostanie
wysłane do drukarki AppleTalk tylko jeśli zainstalujesz odpowiedni
filtr, który uruchomi program, pap. Pakiet netatalk używa
konceptu hackerskiego, używając filtru psf, ale z różnymi
dołączeniami do niego. psf analizuje nazwę tego dołączenia,
aby dowiedzieć się, czy ma uruchomić pap jeśli podłańcuch jest w
nazwie dołączenia, i odwrócić kolejność drukowania jeśli w nazwie
jest rev. Spójrz na to wydając polecenie:
Pingo$ ls -l /usr/local/atalk/etc lrwxrwxrwx 1 root root 3 Feb 8 14:44 ifpap -> psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 ifpaprev -> psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 ofpap -> psf -rwxr-xr-x 1 root root 49299 Feb 8 14:44 papd -rw-r--r-- 1 root root 35 Feb 9 13:48 papd.conf -rwxr-xr-x 1 root root 11395 Feb 8 14:44 psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 tfpap -> psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 tfpaprev -> psf Pingo$
Tak więc filtr o nazwie ifpap uruchomi pap, ifpaprev
odwróci kolejność stron i uruchomi pap. Zamienia on zwykły
tekst na PostScript, tak żebyś nie skończył na komunikacie z
błędem.
Jedyny filtr jaki musisz zainstalować to of:
:of=/usr/local/atalk/etc/ofpap:
gdzie /usr/local/bin/myif jest prostym skryptem powłoki,
który pozwala mi na przerywanie linii w tekście, które zostały
zapisane programem, który automatycznie łamie linie
(bp. textedit). Niestety filtr psf nie robi nic takiego i
ignoruje ustawienia szerokości papieru. Ja napisałem swój własny
filtr
linebreak.c, który robi to dla mnie i umieść następujące
linie w "myif":
#!/bin/sh /usr/local/bin/linebreak $* | /usr/local/atalk/etc/ifpap $*
Jeśli w ten sposób ustawisz filtr tekstowy, to linbreak będzie
uważał tylko na szerokość strony (ustawioną pw), podczas gdy
ifpap (psf) sprawdza tylko długość. Wygląda na to, że
psf zakłada, że pierwsza linia to 0, tak więc ustaw
pl#63 jeśli chcesz mieć 64 linii na stronie.
Jeśli nie chcesz łamania linii, to po prostu umieść linię:
:if=/usr/local/atalk/etc/ifpap:\
Teraz zapisz swój nowy printcap. Jeśli spróbujesz teraz coś wydrukować, dowiesz się, że jeszcze nie działa, więc czytaj następny paragraf.
Jak wspomniałem wcześniej, UNIX-owa nazwa drukarki w printcapie nie
ma odpowiednika dla nazwy drukarki w AppleTalk. Musisz stworzyć
plik .paprc w swoim katalogu zadań, który będzie zawierał
adres drukarki w AppleTalk. Jest to tylko jedna linia. Zauważ, że
nie musiałem umieszczać nazwy drukarki w cudzysłowia w tym pliku,
ale inni piszą mi, że u nich to działało tylko z cydzysłowami. To
spróbuj najpierw bez cydzysłowów:
Pingo$ cat /usr/spool/theobald/.paprc Theobald Chapin, III:LaserWriter@VLSB
To teraz możesz zaczynać.
Jeśli dostaniesz komunikat o błędzie jak
np. "Turing:LaserWriter@Tech Support": NBP wtedy spróbuj z
cudzysłowami. Może być też tak, że musisz wstawić tylko nazwe przed
dwukropkiem w cudzysłowa, tak: "Theobald Chapin,
III":LaserWriter@VLSB. Jeśli masz jeszcze jakieś problemy, to myśl
i kombinuj ;) NIe znam żadnego uniwersalnego sposobu na rozwiązanie
tego problemu.
Więcej na temat hackowania i różnych obejść z filtrami znajdziesz w sekcji Znane problemy.
Najpierw sprawdź czy demon drukarki jest rzeczywiście uruchomiony:
Pingo$ ps -xa | grep lpd 45 ? SW 0:00 (lpd) 346 pp0 D 0:00 grep lpd Pingo$
Spróbuj wydrukować plik w PostScripcie i plik tekstowy, żeby się
przekonać, że wszystko działa. Przypuszczalnie musisz zrestartować
demona poleceniem lpc. Uruchom lpc i napisz restart lp,
down lp i up lp. Potem sprawdź status:
lpc> status
lp:
queuing is enabled
printing is enabled
no entries
no daemon present
lpc>
lpc> quit
Teraz wydrukuj swój plik poleceniem
Pingo$ lpr -P lp filename
Jeśli wszystko jest w porządku, to plik status w katalogu zadań powienien teraz zawierać najświeższe informacje na temat twojej drukarki:
Pingo$ cat /usr/spool/theobald/status job: Paul; status: busy; source: LocalTalk Pingo$
Jeśli teraz pójdziesz do Mac-a i spróbujesz wybrac swoją nową
drukarkę dowiesz się, że pokaże się ona z nazwą twojego serwera
Linux-owego. To może nie być zbyt zadowalające, dlatego musisz
stworzyć, albo wyedytować plik papd.conf w katalogu etc AppleTalk,
/usr/local/atalk/etc/papd.conf (przeczytaj "man papd"
jeśli chcesz znać więcej szczegółów). Minimum tego co musisz zrobić
to umieszczenie w tym pliku nazwy jaką chcesz nadać drukarce, a na
końcu dopisz :\ tak jak w printcap-ie. W drugiej linii
podajesz nazwę jaką ta drukarka ma w Linux-ie opcją pr. Mój plik
wygląda tak:
Pingo$ cat /usr/local/atalk/etc/papd.conf
Pingo Mac LaserWriter:\
:pr=lp:
Pingo$
Oznacza to, że (domyślna) zmienna lp zawiera nazwę: Pingo Mac LaserWriter dla klienta AppleShare. Dowiesz się również, że teraz użytkownik na Mac-u może drukować bezpośrednio na drukarce Theobald Chaplin III jak i poprzez Linux-a, gdzie nazwa drukarki to Pingo Mac LaserWriter. Dla mnie jest ważne, aby móc drukować bezpośrenio na tej drukarce, a podczas pracy na Mac-u drukowanie poprzez Linux-a wydaje się o wiele szybsze, ponieważ Linux zkolejkuje zadanie i zniknie ono natychmiast z mojego desktopu.
Jeśli chcesz zarejestrować swoją drukarkę w jakiejś strefie
AppleTalk (nie w domyślnej strefie), po prostu podajesz tę strefę
wraz z rozszerzeniem @nazwa_strefy w pliku papd.conf:
MotorsLab@EEAP:\
:pr=ee3rd:
Ta sekcja nie jest jeszcze całkiem gotowa !!!
/etc/princap:
lp:lp=/dev/lp1:sd=/usr/spool/lp1:sh
/usr/local/atalk/etc/papd.conf:
HP LJIIIp:\
:pr=lp:\
:pd=/usr/local/atalk/etc/HP_LaserJet_IIIP.ppd:
Sprawdź szczegóły na stronie Używanie ghostscript-a wraz z Netatalk.