Przejdź do głównej zawartości

printcap


  • printcap – baza/plik konfiguracyjny (zwykle /etc/printcap) używany przez systemy wydruku w stylu BSD (lpr/lpd, LPRng). Definiuje kolejki drukarek, ich aliasy, urządzenia, filtry, katalogi bufora i parametry pracy.
  • Konteksty użycia: klasyczne środowiska lpd/LPRng, integracje i zgodność narzędzi lpr, lpq, lprm. W systemach z CUPS plik printcap bywa automatycznie generowany (np. jako symlink/plik zgodności) dla narzędzi oczekujących formatu BSD.
  • Dostępność: systemy BSD (FreeBSD, OpenBSD, NetBSD), starsze/konserwatywne dystrybucje Linux (LPRng), a w nowoczesnych systemach – głównie jako warstwa zgodności obok CUPS.

# Lokalizacja (typowo)
/etc/printcap
# Ogólna struktura wpisu (format termcap‑like; wartości rozdzielone dwukropkami):
Nazwa|alias1|alias2:\
:klucz=wartość:\
:inna#liczba:\
:flaga: ...
# Przykład kontynuacji linii – backslash na końcu oznacza kontynuację w następnym wierszu.
  • Booleany: obecność :flaga: = włączone; :flaga@: = wyłączone/usuń.
  • Numeryczne: :klucz#123:.
  • Tekstowe: :klucz=wartość: (dwukropek w wartości należy escape’ować \:).
  • Kontynuacja linii znakiem \\ na końcu wiersza; komentarze zaczynają się od #.
  • Wpisy mogą dziedziczyć inne przez :tc=nazwa_bazowa: (template capabilities).

ParametrOpis
lpUrządzenie lokalne (np. /dev/lp0, /dev/usb/lp0) lub rzadziej polecenie urządzenia.
rmNazwa hosta zdalnego serwera lpd (remote machine).
rpNazwa zdalnej kolejki na hoście rm (remote printer).
sdKatalog bufora (spool directory), np. /var/spool/lpd/nazwa.
lfLog błędów lpd dla tej kolejki (np. /var/log/lpd-errs).
afPlik rozliczeń (accounting file) – rozmiar/strony wydruków.
mxMaksymalny rozmiar pliku w bajtach (#0 = bez limitu).
ifInput filter – filtr wejściowy (np. konwersja tekst→PS). Wykonywany dla zwykłych zadań.
ofOutput filter – filtr wyjściowy (na poziomie urządzenia).
df/gf/nf/tf/vf/...Filtry dla konkretnych typów danych (DVI, plot, ditroff, troff, raster itp.) – zależne od implementacji.
pwSzerokość strony (znaki) do składania banera/tekstu.
plDługość strony (wiersze).
foForm feed on open – wyślij FF na otwarciu urządzenia.
ffCiąg znaków wysyłany jako form feed.
rsOgranicz zdalnych użytkowników (ścisła kontrola nazw; semantyka zależna od wdrożenia).
shSuppress header – nie drukuj banera/nagłówka.
rwOtwórz urządzenie w trybie read-write (dla niektórych sterowników).
brPrędkość portu szeregowego (baud rate), gdy lp wskazuje TTY.
tcDziedziczenie parametrów z innego wpisu (template capability).

Uwaga: Zestaw i znaczenie pól może się różnić między BSD, LPRng i wariantami dostępnymi w Linuksie/BusyBox. Zawsze weryfikuj w lokalnym man printcap.


# 1) Lokalna drukarka równoległa/USB z filtrem wejściowym i brakiem limitu wielkości
lp|localprinter:\
:lp=/dev/usb/lp0:sd=/var/spool/lpd/lp:mx#0:sh:\
:lf=/var/log/lpd-errs:if=/usr/local/libexec/if-text:
# Użycie: lpr -P lp plik.txt
# 2) Zdalna kolejka na serwerze lpd
hp|hp_office:\
:rm=printserver.lan:rp=HP_LaserJet:sd=/var/spool/lpd/hp:sh:\
:lf=/var/log/lpd-errs:mx#0:
# Użycie: lpr -P hp dokument.pdf
# 3) Wspólna baza ustawień (tc=) + aliasy i rozliczanie
psbase:\
:lf=/var/log/lpd-errs:mx#0:sh:
color|pscolor|Color_PS:\
:tc=psbase:lp=/dev/usb/lp1:sd=/var/spool/lpd/color:\
:af=/var/log/lp-account/color:if=/usr/local/libexec/if-ps:
# Użycie: lpq -P color ; lprm -P color JOBID

  • CUPS a printcap: W systemach z CUPS plik printcap bywa automatycznie tworzony (np. w /etc/printcap lub /run/cups/printcap) wyłącznie dla zgodności z narzędziami BSD. Edycja ręczna może być nadpisywana przez CUPS.
  • Uprawnienia i katalogi bufora: Upewnij się, że katalogi sd istnieją oraz mają właściwego właściciela/grupę (np. lp, daemon) i prawa. W LPRng pomocny bywa checkpc -f do tworzenia/poprawy struktur spoolera.
  • Filtry muszą być wykonywalne: Skrypty w if/of/... powinny mieć shebang, prawa +x i poprawne ścieżki do konwerterów (ghostscript, enscript, itp.).
  • Nazwy i aliasy: Pierwsza nazwa to główna kolejka, kolejne to aliasy (lpr -P alias). Warto unikać spacji i znaków specjalnych.
  • Dzielenie i czytelność: Używaj kontynuacji linii \\ oraz komentarzy #. Dwukropek w wartościach escape’uj \:.
  • Różnice implementacyjne: Niektóre pola (np. zestaw filtrów df/gf/nf/tf/vf) występują w klasycznych BSD; LPRng dodaje własne; BusyBox może mieć ograniczenia.

Błąd / KomunikatPrzyczynaRozwiązanie
lpr: lp: unknown printer / unknown queueBrak wpisu lub zła nazwa kolejkiZweryfikuj wpis w /etc/printcap, aliasy i literówki; odśwież/usługi lpd/CUPS.
lpd: cannot create temp file / brak uprawnień w sdZłe prawa/właściciel katalogu buforaPopraw właściciela (chown -R lp:lp) i prawa (chmod 700/750) w sd; uruchom checkpc -f (LPRng).
filter exited with non-zero statusBłąd w filtrze if/of/...Sprawdź log lf, prawa +x, zależności (gs, a2ps/enscript), uruchom filtr ręcznie z testowym plikiem.
Brak wydruku, komunikat o offlineZłe lp (ścieżka urządzenia) lub problem sprzętowyZweryfikuj /dev/usb/lp*, udev, kable; dla sieci – sprawdź rm/rp, port 515/TCP i czy lpd na serwerze działa.
Odrzucenie zadań z powodu mxLimit rozmiaru za niskiUstaw mx#0 (brak limitu) lub zwiększ wartość.
Dziedziczenie tc nie działaOdwołanie do nieistniejącej bazyUpewnij się, że wpis bazowy istnieje nad korzystającym i jest poprawny składniowo.