Springe zum Hauptinhalt

Archiv

CUPS - Grundlagen, Prinzipien

Das Druckproblem

  • Ausgabe von Druckdaten auf Druckern besteht aus 2 Schritten:
    • Wandlung der Druckdaten in druckerlesbares Format
    • Ausgabe der Daten auf Drucker
  • in UNIX-Systemen wird die Seitenbeschreibungssprache (PDL) Postscript (PS) oft als Datenformat für die Ausgabe benutzt. Diese können Postscriptdrucker selbst verarbeiten, machen daraus Rastergrafiken (RIP). Damit müssen die Daten nur noch zum Drucker geschickt werden. (Im Handbuch zu KDEPrint erfolgt eine gute Einführung in die Grundlagen des Druckens)
  • es gibt in UNIX-Systemen kein Standard-Druck-Interface
    (wie z.B. das Graphical Device Interface (GDI) in Windows)
  • UNIX-Systeme nutzen meist Berkley- (lpr) oder SystemV- (lp) Drucksystem
  • keine einheitlichen Drucker-Treiber: einfacher Datentransfer zum Drucker
  • Folge: Druckerhersteller haben kein Interesse an UNIX-Treibern
  • Lösung: CUPS stellt einheitliches Drucker-Interface bereit
    • einheitliche Netzsicht aller Drucker
    • Authentisierung
    • Encryption
    • Dateiformatwandlung
    • Druckerjob-Optionen
  • seit 1. CUPS-Version 1999 wurde CUPS Standard in vielen Linux-Distributionen

CUPS Technologie

  • CUPS ist ein Drucksystem für UNIX-Systeme, das Druckdateien auf beliebigen Druckern ausgeben kann
  • CUPS basiert auf dem Internet Printing Protocol (IPP)
  • IPP ist ein Standard-Protokoll für das Drucken sowie das Management von Druck-Jobs, -Options und die Zugriffssteuerung zu Servern und Druckern (z.B. Authentisierung, Zugriffskontrolle und Verschlüsselung)
  • IPP basiert auf dem HTTP-Standard. Dadurch sind viele Aufgaben der Druckerverwaltung per WEB-Browser möglich: z.B. Anzeige Statusinformationen, Dokumentation, Verwaltung von Servern, Druckern, Jobs und Klassen. CUPS nutzt für seine Kommunikation die Ports 631 (http) und 443 (https).
  • CUPS stellt eine kompatible Nutzer-Schnittstelle zu den bekannten Berkley (lpr) und SysV (lp) Drucksystemen her
  • Client/Server sind oft auf dem selben Rechner. Client ist eine Anwendung, die eine Datei druckt. Der Server (cupsd) läuft im Hintergrund, empfängt die Datei und druckt sie aus.
  • Druckdateien werden zu Jobs zusammengefasst. Sie erhalten eine Nummer und werden einem ausgewählten Ziel (Drucker) zugeordnet. Jobs können Optionen haben wie Papierausrichtung, Mediengröße, Kopienzahl, Prioritäten usw.
  • Drucker können zu Klassen zusammengefasst werden. Werden Jobs zu Klassen gesandt, so wir der erste freie Drucker der Klasse zur Abarbeitung genutzt. Implizite Klassen entstehen, wenn mehrere Server einen speziellen Drucker bedienen. Jobs werden dann entsprechend geroutet.
  • FILTER sind Programme, die ggf. eine Formatumwandlung oder Seitenauswahl realisieren - dienen z.B. auch dem Page-Accounting (pstops). CUPS kennt viele Dateiformate, z.B. PS, PDF, image-Formate, Text (vgl. /etc/cups/mime.types ). CUPS kennt auch verschiedene Raster-Filter, die Bitmaps erzeugen.
  • Printer Driver wandeln Jobformat in Druckerformat (z.B. PCL oder Epson). Sie enthalten immer eine PPD (Postscript Printer Description), mit der die Eigenschaften der Drucker beschrieben werden und die CUPS auch für NICHT-PS-Drucker verwendet. Einige Treiberquellen sind:
  • BACKENDS senden die fertigen Druckdaten zum Drucker. Backends gibt es zur Ausgabe auf serielle, parallele und USB Ports sowie die Netztreiber ipp, jetdirect (AppSocket) und lpd. Zusätzlich gibt es das smb Backend für SAMBA. CUPS sucht selbst nach Druckern und bietet geeignete Backends zur Auswahl an vereinfachte Darstellung).
  • Das CUPS-Netzwerk ermöglicht die Nutzung von IPP-Druckern an beliebigen Orten im Netzwerk. Durch Broadcasting können Server Drucker im Netz bekannt machen.
  • es gibt eine Reihe von Graphical User Interfaces (GUI) für CUPS:

Arbeiten mit CUPS

  • Wenn ich drucken möchte, muss ich zuerst wissen, ob Drucken möglich ist und welche Drucker ich benutzen kann. Hier wird speziell CUPS betrachtet.
  • läuft mein CUPS-Server ?
    • Starte unter KDE konqueror und lade URL print:/printers oder print:/manager
      Konqueror-KDE-Dienste-Drucksystem-Drucker/Verwaltung
      (cups muss schon laufen, wenn konqueror gestartet wird !)
    • Test ob lokaler CUPS-Server läuft (nicht im Netz !):
      http://localhost:631/
      wenn nicht:

Warnung!
Verbindung fehlgeschlagen
localhost:631 hat den Verbindungsaufbau verweigert.


Alternativ:

Beispiel
# Kommandozeile:
ps ax | grep cupsd
   17561 ?        Ss     0:00 cupsd
lpstat -r
   Scheduler läuft
   lpstat: Kann Server nicht erreichen
# hierbei wird cupsd auch ggf. im Netz gefunden !

  • wenn CUPS noch nicht läuft, dann vgl. Punkt CUPS installieren
  • sind Drucker vorhanden ?
    • im KDE-Kontrollzentrum-Geräte-Drucker anzeigen
    • im konqueror laden URL print:/printers
      zeigt nur Queues eines lokalen cupsd an, print:/manager zeigt auch die im Netz
    • direkter WEB-Kontakt zum lokalen cupsd
      http://localhost:631/printers/
      Alternativ:

Beispiel
# Kommandozeile:
lpstat -a
   Kein systemweites Standardziel
   lpstat: Keine Ziele hinzugefügt.
# wenn Drucker schon da sind:
   lp1 akzeptiert Anfragen seit Fr 02 Mär 2007 08:03:29 CET

Einrichten eines Druckers

Heute wird in Linux-Distributionen in der Regel CUPS per default installiert. Daher ist meist der erste Wunsch einen lokalen Drucker einzurichten.

Grundlagen

  • für jeden physischen Drucker wird (mind.) eine Drucker-Queue eingerichtet
  • Jede Drucker-Queue hat einen Namen
  • Namen bestehen aus Buchstaben, Ziffern und _
  • Namen dürfen max. 127 Zeichen lang sein
  • sie sind NICHT CASE sensitive: LP1 Lp1 lp1 sind alle identisch !

Druckertreiber

  • Druckertreiber unter CUPS setzen sich in der Regel zusammen aus Filtern zur Konvertierung der Datenformate und Backends zur Umwandlung in die Druckersprache und Ausgabe
  • wenn der benötigte Treiber nicht vorhanden ist, muss er installiert werden
  • beste Quelle dazu ist http://www.linux-foundation.org/en/OpenPrinting (Database Printer Driver)
  • Hinweise zur Installation von Treibern findet man insbesondere unter foomatic
  • Postscript-Treiber und PPDs

Geräte

  • Drucker-Queues sind mit Drucker-Geräten (devices) verbunden
  • Geräte können der parallele Port, USB, ein Netzwerk-Interface o.a. sein
  • zu jedem Gerät muss es ein sog. Backend geben, ein Programm, das die fertigen Druckerdaten direkt auf den Drucker über das betreffende Interface ausgibt.
  • für Geräte nutzt CUPS URIs (Uniform Resource Identifiers), z.B.:
parallel:/dev/lp0 
lpd://pserver1.hrz.tu-chemnitz.de/drucker1
  • Anzeige einer Liste verfügbarer Interfaces (Backends) für Drucker:
lpinfo -v  
    network socket
    network http
    network ipp
    network lpd
    direct parallel:/dev/lp0
    serial serial:/dev/ttyS0?baud=115200
    direct usb://EPSON/Stylus%20Photo%20R300
    direct usb:/dev/usb/lp1
    network smb
    file file
  • lokale Drucker gehören zu den Gruppen direct (USB, parallel) oder serial (heute eher unüblich)
  • das Device file muss ab cups-1.2 explizit erlaubt werden
    (cupsd.conf: FileDevice Yes ### VORSICHT: Sicherheitsrisiko !)
    URI lautet dann z.B.: file:/tmp/test.ps
  • Netzwerkdrucker vom Typ ipp oder http
    • Jobs an Drucker oder Server senden, die IPP-Protokoll verstehen
    • URI lautet: http://<hostname>:631/printers/<queuename>
  • verschiedene Hersteller nutzen verschiedene Interfaces, z.B.:
socket://server:9100  # HP (parallel 1)
socket://server:4010  # Linksys (parallel 1)
  • Hinweis zu USB-2.0 - der EHCI-Treiber in Linux erkennt mitunter neue Geräte nicht, dann hilft evtl. noch den Treiber zu entladen (rmmod ehci_hcd) und mit USB-1 zu versuchen. Ist zwar langsamer geht aber in der Regel.

Geräteeigenschaften

  • Treiber brauchen genaue Angaben über Eigenschaften und Fähigkeiten des Druckers
  • PPD (Postscript Printer Description) dient der Beschreibung dieser Eigenschaften
  • ursprünglich von Adobe "erfunden" werden PPDs von CUPS auch für nicht-PS-Drucker genutzt
  • was beinhalten PPDs:
    • Beispiel der Standard-Postscript-PPD: postscript.ppd (ASCII-Text)
    • Beispiel der Standard-CUPS-PPD: cups6.ppd (ASCII-Text)
    • geräteabh. Druckoptionen: duplex, sortieren, lochen, Papierformate, Medientypen, Farben, Auflösungen
    • über Schlüsselworte werden Geräteeigenschaften beschrieben
    • Schlüsselworte mit Default beschreiben Standardeinstellungen (z.B. A4)
    • PPDs können auch speziellen Code für den Treiber bereitstellen
    • CUPS-PPD-Erweiterungen
  • Anzeige im System vorhandener PPDs:

Beispiel
lpinfo -m | more  # Anzeige vorhandener PPDs
# sehr viel !

Einrichten eines Druckers per WEB

  • Beispiel eines lokalen Druckers mit CUPS-eigener WEB-Schnittstelle
  • Ab cups-1.2 werden im WEB-Admin-Menü lokale Drucker angezeigt
    (mit bidirektionalem Interface): http://localhost:631/admin
  • allgemein:*Drucker hinzufügen*
    • Name: gibt Name der Drucker-Queue an
    • Standort: des Druckers (Raum) und/oder Rechner an dem Drucker angeschlossen ist
    • Beschreibung: Angaben zu Verwendungszweck und Eigenschaften
    • 2.Menü: Druckeranschluss (seriell, parallel, usb, Netz, ...)
      bei lokalen Druckern sollte hier der eigene Typ angezeigt werden !
    • 3.Menü: Hersteller des Druckers (für Treiberauswahl)
    • 4.Menü: Treiberauswahl: hier werden die verfügbaren PPDs des Herstellers angezeigt. Ist der gewünschte Drucker nicht vorhanden, so muss man eine geeignete PPD installieren, siehe unter neue Druckertreiber installieren. (PPDs gespeichert unter /usr/share/cups/model/)
    • hier erfolgt ggf. Passwort-Abfrage für Admin
    • ==> jetzt wird Treiber installiert ! (nach /etc/cups/ppd/_name_.ppd
    • Menü *Drucker konfigurieren*
      WICHTIG: Grundeinstellungen kontrollieren: A4, 600 dpi, Fehlerrichtlinie
    • Anzeige fertige Drucker-Queue
      • wurden vorher noch keine Druckereinstellungen abgefragt, dann jetzt explizit kontrollieren ! * Testseite drucken zur Kontrolle (auf Ränder und Druckbild achten) (/usr/share/cups/data/testprint.ps)

Warnung! WICHTIG : Papiergröße A4 ! Duplexer, Papierfächer u.a. kontrollieren Fehlerrichtlinie (stop/retry/cancel ?) ## Verhalten bei Fehlern

Einrichten einer Queue per Kommandozeile

Beispiel
$ lpinfo -v         # Anzeige vorhandener Drucker, z.B.:
  direct usb://EPSON/Stylus%20Photo%20R300
# Einrichten eines Druckers 
# lpadmin -p queue1 \
          -D "lokaler Drucker an meinem Rechner" \
          -L "Standort in meinem Zimmer" \
          -E -v usb://EPSON/Stylus%20Photo%20R300 \
          -m Epson_StylusPhotoR300_cd-mausi.ppd
# Setzen des default Druckers
  lpadmin -d queue1
# Löschen eines Druckers
  lpadmin -x queue1

  • weitere Optionen, die ggf. per WEB nicht gesetzt werden können:

Beispiel
# max. Jobgröße in KB im Quotazeitraum
          -o job-k-limit=value
# max. Seitenanzahl im Quotazeitraum
          -o job-page-limit=value
# Quotazeitraum in Sek.
          -o job-quota-period=value
# Default Parameter aus PPD setzen - vgl. loptions -l
          -o name=value

Steuerung des Druckens

  • der Administrator kann die Benutzung der Queues steuern:
    1. Senden von Jobs in eine Queue
    2. Ausgabe von Jobs auf den Drucker
  • die Steuerung kann über die WEB-Schnittstelle von CUPS erfolgen
    Drucker stoppen/starten und Aufträge ablehnen/annehmen
    (es wird nach dem Admin-Passwort gefragt - z.B. root)
  • Steuerung per Kommandozeile:

Beispiel
# Anzeige des Queue-Status:
lpq -P queue1
# die folgenden Kommandos als Systemadministrator
# Stoppen/Starten der Jobausgabe auf Drucker:
cupsdisable queue1 # Ausgabe stoppen
/usr/sbin/cupsenable queue1  # Ausgabe starten (cups 1.2.x)
/usr/bin/cupsenable  queue1  # Ausgabe starten (cups 1.1.x)
/usr/bin/enable  queue1  # Ausgabe starten (cups 1.1.x)
# wird Drucker unbereit, setzt CUPS oft Queue automatisch in STOPP-Zustand
# ACHTUNG: Kommando enable ist auch eine bash-inline Kommando

# Senden von Druckjobs verbieten/erlauben:
/usr/sbin/reject queue1 # keine Jobs annehmen
/usr/sbin/accept queue1 # Jobs annehmen

Drucken mit CUPS

  • alle Druckaufgaben werden in Form von Jobs an anzugebende Drucker geschickt
  • Jobs werden immer in Queues verwaltet, die Druckern zugeordnet sind
  • ein Drucker kann über mehrere Queues bedient werden
  • mehrere Server können einen Drucker bedienen - virtuelle Klassen

Kommandozeile

Beispiel
# welche Drucker vorhanden
lpstat -p
# Standarddrucker
lpstat -d
# Drucken Datei datei.ps doppelseitig auf Drucker queue1
lpr -P queue1 -o sides=two-sided-long-edge datei.ps

  • aus Kompatibilitätsgründen sind lp-Kommandos Aliases zu lp.cups und lpr.cups
  • Auswahl einiger Optionen per Argument -o
    • Eingabefach vorn und einseitig: -o InputSlot=MPTray -o Duplex=DuplexNoTumble
    • Drucken beidseitig: lp -o sides=two-sided-long-edge
    • Daten können verschlüsselt werden: lp -E
    • Seitenauswahl: lp -o page-ranges=1-4,7-10
    • N-Up - N Seiten pro Blatt: lp -o number-up=4 (keine Sortierangaben !)
    • eigene Optionen angebbar: -o konto=afsgroup
  • druckerspezifische Optionen abfragen per lpoptions -l -p<queue>

Beispiel
Duplex/Duplex: DuplexTumble DuplexNoTumble *None
ManualFeed/ManualFeed: True False
InputSlot/Medien-Quelle : *AutoSelect Tray1 Tray2 MPTray
Resolution/Auflösung: 300dpi *600dpi 1200dpi
TonerSaveMode/Toner Save: *Off On

  • Statusinfos per lpq, lpstat, oder per WEB http://localhost:631/printers
  • Abbruch von Jobs per cancel, lprm oder WEB
  • Manipulation des Queuestatus ist priviligiert (disable, reject)
  • Druckeroptionen können permanent gespeichert werden:
    • im System unter /etc/cups/lpoptions (gelten dann global)
    • pro Nutzer: $HOME/.lpoptions
      Speicherung ALLER Optionen ist Problem ! Im URZ werden bei URZ-login Defaultdrucker aus .lpoptions gelöscht !

KDE - kprinter

  • KDE ist im URZ Default Desktop
  • CUPS wird von KDE per CUPS-API angesprochen - z.B. beim Aufruf von KDE-Anwendungen aus KDE-Dateimanager konqueror
  • kprinter ist spezielles KDE-Programm, das von Kommandozeile und aus anderen Applikationen zum Drucken per KDE-Schnittstelle genutzt werden kann
  • kprinter ist vom URZ empfohlenes Werkzeug zum Drucken und ist per default in anderen Anwendungen wie firefox, und Adobe Reader zur Druckausgabesteuerung konfiguriert
  • Cups-Konfiguration erfolgt per Hauptmenü->Eigenschaften - man kann direkte Abbildung zu Eigenschaften aus PPD (s.o.) erkennen
  • einige Screenshots
  • Preview geht bei kprinter NUR per Abspeicherung als PS/PDF

GNOME

  • GNOME nutzt eigene CUPS-API
  • GNOME-Filemanager nautilus stellt Schnittstelle zu Applikationen her, die mit CUPS-API drucken
  • GNOME besitzt kein Pendant zu kprinter
  • einige Screenshots

WEB-Browser

  • nutzen eigen Postscript-Treiber (intern)
  • besitzen eigene CUPS-Schnittstelle, die im URZ per default bisher nicht genutzt wird (vgl. kprinter)
  • direkte Nutzung von CUPS steuerbar mit URI: about:config
    Filter: print.postscript.cups.enabled TRUE
  • einige Screenshots
  • Gestaltung Seitenlayout per Menü Datei-"Seite einrichten"
  • Einstellung (weniger) Eigenschaften im Menü Drucken,
  • Tipp Preview: Druckbefehl in Druckeigenschaften z.B. gv/evince o.a.
    cat >/tmp/.seamon;gv /tmp/.seamon;rm /tmp/.seamon;
  • Einstellen von Browsereigenschaften: about:config
    (firefox-Einstellungen zum Drucken - auch CUPS)

AdobeReader

  • nutzt ab Version 7.0.5 eigene CUPS-Schnittstelle (Anpassung Windows Menü)
  • im URZ noch nicht freigeschaltet, da fehlerhaft (hier Version 7.0.1 mit kprinter)
  • einige Screenshots

OpenOffice

  • Einrichten lokaler Drucker mit spadmin möglich, z.B. in Version 2.1:
    /usr/lib/openoffice.org2.1/program/spadmin
  • CUPS-Einstellung fest in System-Konfiguration verankert
  • bei Nutzung CUPS werden automatisch ALLE CUPS-Drucker zugreifbar
  • Preview ist nur per Drucken in Datei möglich - gute Alternative Export PDF
  • einige Screenshots

Gimp

  • Konfiguration der Drucker im Menü Drucken
  • einige Screenshots
  • gimp mit eigenen Treibern (gutenprint)
  • GIMP-Probleme mit Postscript-Level 2 Treiber:
    CMD: export LC_NUMERIC=C gimp

CUPS installieren

  • in den meisten Linux-Systeme ist CUPS installiert
  • wenn nicht ist erster Weg Suche nach Paketen zum aktuellen System unter Namen cups
  • Quelle: http://www.cups.org/software.php
  • nach Installation Grundzustand wie zu Beginn des Kurses diskutiert
  • cups.spec zu RPM von cups-1.2.2-1.8

Wo stehen die Daten zu CUPS

  • ein einfacher Verzeichnisüberblick (Standard)
    Verzeichnis Inhalt
    /etc/cups Konfigurationen cupsd.conf, printers.conf ...
    /usr/bin Nutzerprogramme lp* cups* ...
    /usr/include Include-Programme zu CUPS API
    /usr/lib Libs
    /usr/lib/cups Server Programme wie Filter und Backends
    /usr/sbin Admin Programme
    /usr/share/cups Datenfiles wie PPDs, Fonts, Testseiten, ...
    /usr/share/doc/cups-1.x.y Dokumentation in HTML - Help-URL
    /var/cache/cups Cache für ppds.dat jobs.dat ...
    /var/log/cups Log-Dateien ErrorLog AccessLog, PageLog, ...
    /var/run/cups Domain Socket und Status File
    /var/spool/cups SPOOL-Verz. für Jobs und Jobstatusfiles
-- Main.MatthiasEhrig - 29 Mar 2007