CUPS zapewnia mechanizm, który umożliwia wysyłanie zadań drukowania do drukarek w standardowy sposób. Dane drukowania trafiają do harmonogramu, który wysyła zadania do systemu filtrującego, który przekształca zadanie drukowania na format zrozumiały dla drukarki. System filtrujący przekazuje następnie dane do backendu – specjalnego filtra, który wysyła dane do urządzenia lub połączenia sieciowego. System w szerokim zakresie korzysta z języka PostScript i rasteryzacji danych w celu przekształcenia danych w format odpowiedni dla drukarki docelowej.
CUPS oferuje standardowy i zmodularyzowany system drukowania, który może przetwarzać wiele formatów danych na serwerze druku. Przed CUPS trudno było znaleźć standardowy system zarządzania drukarkami, który uwzględniałby bardzo dużą różnorodność drukarek dostępnych na rynku, używających własnych języków i formatów drukowania. Na przykład, systemy drukowania System V i Berkeley były w dużym stopniu niekompatybilne ze sobą i wymagały skomplikowanych skryptów i obejść, aby przekonwertować format danych programu na format możliwy do wydrukowania. Często nie były one w stanie wykryć formatu pliku, który był wysyłany do drukarki i dlatego nie mogły automatycznie i poprawnie przekonwertować strumienia danych. Ponadto konwersja danych była wykonywana na poszczególnych stacjach roboczych, a nie na centralnym serwerze.
CUPS umożliwia producentom drukarek i twórcom sterowników do drukarek łatwiejsze tworzenie sterowników, które działają natywnie na serwerze druku. Przetwarzanie odbywa się na serwerze, co pozwala na łatwiejsze drukowanie w sieci niż w przypadku innych uniksowych systemów drukowania. Po zainstalowaniu Samby użytkownicy mogą adresować drukarki na zdalnych komputerach z systemem Windows, a ogólne sterowniki PostScript mogą być używane do drukowania w sieci.
SchedulerEdit
Scheduler CUPS implementuje Internet Printing Protocol (IPP) poprzez HTTP/1.1. Aplikacja pomocnicza (cups-lpd) konwertuje żądania protokołu Line Printer Daemon (LPD) na IPP. Terminarz udostępnia również interfejs internetowy do zarządzania zadaniami drukowania, konfiguracją serwera i dokumentacją dotyczącą samego CUPS.
Moduł autoryzacji kontroluje, które wiadomości IPP i HTTP mogą przechodzić przez system. Po autoryzacji pakietów IPP/HTTP są one przesyłane do modułu klienta, który nasłuchuje i przetwarza połączenia przychodzące. Moduł klienta jest również odpowiedzialny za wykonywanie zewnętrznych programów CGI, które są potrzebne do obsługi drukarek internetowych, klas oraz monitorowania stanu zadań i zarządzania nimi. Gdy moduł ten przetworzy swoje żądania, wysyła je do modułu IPP, który wykonuje walidację URI (Uniform Resource Identifier), aby zapobiec omijaniu przez klienta kontroli dostępu lub uwierzytelniania na serwerze HTTP. URI jest ciągiem tekstowym, który wskazuje nazwę lub adres, który może być użyty do odniesienia się do abstrakcyjnego lub fizycznego zasobu w sieci.
Harmonogram umożliwia tworzenie klas drukarek. Aplikacje mogą wysyłać żądania do grup drukarek w danej klasie, co pozwala harmonogramowi skierować zadanie do pierwszej dostępnej drukarki w tej klasie. Moduł zadań zarządza zadaniami drukowania, wysyłając je do filtrów i procesów backendu w celu ostatecznej konwersji i drukowania oraz monitorując komunikaty o stanie z tych procesów.
Sterownik CUPS wykorzystuje moduł konfiguracyjny, który przetwarza pliki konfiguracyjne, inicjalizuje struktury danych CUPS oraz uruchamia i zatrzymuje program CUPS. Moduł konfiguracyjny zatrzymuje usługi CUPS podczas przetwarzania pliku konfiguracyjnego, a następnie uruchamia je ponownie po zakończeniu przetwarzania.
Moduł logowania obsługuje rejestrowanie zdarzeń harmonogramu w plikach dziennika dostępu, błędów i stron. Moduł główny obsługuje limit czasu i wysyłanie żądań wejścia/wyjścia dla połączeń klienckich, obserwację sygnałów, obsługę błędów i wyjść procesów potomnych oraz przeładowywanie plików konfiguracyjnych serwera w razie potrzeby.
Inne moduły używane przez scheduler obejmują:
- moduł MIME, który obsługuje bazę typów i konwersji Multipurpose Internet Mail Extensions (MIME) używaną w procesie filtrowania, który przekształca dane drukowania na format odpowiedni dla urządzenia drukującego;
- moduł PPD, który obsługuje listę plików Postscript Printer Description (PPD);
- moduł devices, który zarządza listą urządzeń dostępnych w systemie;
- moduł printers, który obsługuje drukarki i PPD w ramach CUPS.
Filter systemEdit
CUPS może przetwarzać różne formaty danych na serwerze druku. Przekształca on dane zadania drukowania na ostateczny język/format drukarki za pomocą serii filtrów. Do identyfikacji formatów plików używa typów MIME.
Bazy danych MIMEEEdit
Po przypisaniu przez system CUPS zadania drukowania do harmonogramu jest ono przekazywane do systemu filtrów CUPS. Ten konwertuje dane na format odpowiedni dla drukarki. Podczas uruchamiania demon CUPS ładuje dwie bazy danych MIME: mime.types
, która określa znane typy plików, dla których CUPS może przyjmować dane, oraz mime.convs
, która definiuje programy przetwarzające poszczególne typy MIME.
Plik mime.types
ma następującą składnię:
mimetype { | }
Na przykład, aby wykryć plik HTML, należałoby zastosować następujący wpis:
text/html html htm \
printable(0,1024) + (string(0,"<HTML>") string(0,"<!DOCTYPE"))
Drugi wiersz dopasowuje zawartość pliku do określonego typu MIME przez określenie, czy pierwszy kilobajt tekstu w pliku zawiera znaki drukowalne i czy te znaki zawierają znaczniki HTML. Jeśli powyższy wzorzec pasuje, to system filtrujący oznaczyłby plik jako typ MIME text/html.
Plik mime.convs
ma składnię:
source destination cost program
Pole źródłowe wyznacza typ MIME, który jest określany przez sprawdzenie pliku mime.types
, podczas gdy pole docelowe wymienia typ żądanego wyjścia i określa, jaki program powinien zostać użyty. To również jest pobierane z pliku mime.types
. Pole kosztu pomaga w wyborze zestawu filtrów podczas konwersji pliku. Ostatnie pole, program, określa program filtrujący, który ma być użyty do wykonania konwersji danych.
Kilka przykładów:
text/plain application/postscript 50 texttopsapplication/vnd.cups-postscript application/vnd.cups-raster 50 pstorasterimage/* application/vnd.cups-postscript 50 imagetopsimage/* application/vnd.cups-raster 50 imagetoraster
Proces filtrowaniaEdit
Proces filtrowania działa w ten sposób, że przyjmuje dane wejściowe wstępnie sformatowane z sześcioma argumentami:
- identyfikator zadania drukowania
- nazwa użytkownika
- nazwa zadania
- liczba kopii do wydrukowania
- wszelkie opcje drukowania
- nazwa pliku (choć jest to zbędne, jeśli został on przekierowany ze standardowego wejścia).
Następnie określa typ wprowadzanych danych i filtr, który ma być użyty poprzez wykorzystanie baz danych MIME; na przykład dane obrazu zostaną wykryte i przetworzone przez określony filtr, a dane HTML wykryte i przetworzone przez inny filtr.
CUPS może przekonwertować dostarczone dane na dane PostScript lub bezpośrednio na dane rastrowe. Jeśli dane są konwertowane na PostScript, stosowany jest dodatkowy filtr zwany prefiltrem, który przepuszcza dane PostScript przez inny konwerter PostScript, aby mógł on dodać opcje specyficzne dla drukarki, takie jak wybór zakresu stron do wydrukowania, ustawienie trybu n-up i inne rzeczy specyficzne dla urządzenia. Po wstępnym filtrowaniu, dane mogą być albo wysłane bezpośrednio do backendu CUPS, jeśli używasz drukarki PostScript, albo mogą być przekazane do innego filtra, takiego jak Foomatic z linuxprinting.org. Alternatywnie, można je przekazać do Ghostscript, który konwertuje PostScript na pośredni format rastrowy CUPS. Pośredni format rastrowy jest następnie przekazywany do filtra końcowego, który konwertuje dane rastrowe do formatu specyficznego dla drukarki. Domyślne filtry dołączone do CUPS obejmują:
- raster do PCL
- raster do ESC/P lub ESC/P2 (język drukarek Epson, obecnie w dużym stopniu zastąpiony przez ich nowy format ESC/P-Raster)
- raster do Dymo (inna firma produkująca drukarki).
- raster do Zebra Programming Language lub ZPL (język drukarek firmy Zebra Technologies)
Od 2009 r. inne zastrzeżone języki, takie jak GDI lub SPL (Samsung Printer Language) są obsługiwane przez Splix, translator rastrów do SPL.
Jednakże kilka innych alternatyw może zintegrować się z CUPS. HPLIP (wcześniej znany jako HP-IJS) zapewnia sterowniki Linux+CUPS dla drukarek HP, Gutenprint (wcześniej znany jako Gimp-Print) to szereg wysokiej jakości sterowników dla (głównie) drukarek atramentowych, a TurboPrint dla Linuksa ma inny szereg wysokiej jakości sterowników dla szerokiej gamy drukarek.
BackendyEdit
Sterowniki tylne to sposoby, w jakie CUPS wysyła dane do drukarek. Dla CUPS dostępnych jest kilka backendów: porty równoległe, szeregowe i USB, cups-pdf PDF Virtual Printing, jak również backendy sieciowe, które działają poprzez protokoły IPP, JetDirect (AppSocket), Line Printer Daemon („LPD”) i SMB.
Nowy mdns
backend w CUPS 1.4 zapewnia wykrywanie drukarek oparte na protokole Bonjour (DNS-SD). W CUPS 1.6 obsługiwane jest także wykrywanie i udostępnianie drukarek Bonjour przy użyciu Avahi.