|
|
| Zeile 1: |
Zeile 1: |
| = Druckerserver-Einführung (Debian) =
| |
|
| |
| == Was ist CUPS? ==
| |
|
| |
| Das '''C'''ommon '''U'''nix '''P'''rinting '''S'''ystem (CUPS) ist das am weitesten verbreitete Drucksystem auf Linux-Systemen. Es wurde von Michael Sweet entwickelt, später von Apple aufgekauft und seit September 2020 wird es als Fork unter der Leitung von OpenPrinting weiterentwickelt.
| |
|
| |
| * Aufgebaut als '''Client/Server-System'''
| |
| * Drucker lassen sich lokal nutzen, verwalten und im Netzwerk freigeben
| |
| * CUPS wandelt Druckdaten intern immer in '''PDF''' um, bevor sie an den Drucker gesendet werden
| |
| * Moderne Drucker mit AirPrint-Unterstützung können direkt über den Treiber '''IPP Everywhere''' eingebunden werden – ohne PPD-Datei
| |
|
| |
| Dieser Artikel behandelt einen Debian-Server, der Drucker (bzw. den virtuellen CUPS-PDF-Drucker) verwaltet und im Netz freigibt, sowie Debian-Clients, die diese Freigaben nutzen.
| |
|
| |
| = Server = | | = Server = |
|
| |
|
| Auf dem Server wird CUPS installiert, konfiguriert, im Netz freigegeben und die PDF-Ausgabe in ein öffentlich erreichbares Webverzeichnis gelegt.
| | ;Installation |
| | |
| == Installation ==
| |
| | |
| ;CUPS-Server installieren
| |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| sudo apt install cups cups-client cups-bsd | | sudo apt install printer-driver-cups-pdf libreoffice nfs-kernel-server |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| * '''cups''' – Server-Komponente
| | ;Gemeinsames Ausgabeverzeichnis statt pro-User-Ordner |
| * '''cups-client''' – Client-Komponente (wird auf dem Server für lokale Tests mitbenötigt)
| |
| * '''cups-bsd''' – Kompatibilitätslayer für das alte BSD-Drucksystem
| |
| | |
| ;Optionale Treiberpakete (nur nötig, wenn echte Drucker angeschlossen werden) | |
| <syntaxhighlight lang="bash">
| |
| sudo apt install hplip printer-driver-gutenprint
| |
| </syntaxhighlight>
| |
| | |
| * '''hplip''' – Treiber für HP-Drucker
| |
| * '''printer-driver-gutenprint''' – Treiber für viele Farb-Tintendrucker
| |
| | |
| == CUPS-PDF (virtueller Drucker) ==
| |
| | |
| [https://www.cups-pdf.de/ CUPS-PDF] ist ein virtueller Drucker – ideal zum Testen ohne echte Hardware.
| |
| | |
| <syntaxhighlight lang="bash">
| |
| sudo apt install printer-driver-cups-pdf libreoffice apache2
| |
| </syntaxhighlight>
| |
| | |
| '''Hinweis:''' CUPS-PDF kann nur PostScript- und Bild-Dateien verarbeiten. Bei anderen Formaten entstehen leere PDFs.
| |
| | |
| === Öffentliches Webverzeichnis für die PDFs anlegen ===
| |
| | |
| Standardmäßig legt CUPS-PDF pro Benutzer einen eigenen Unterordner an (<code>${USER}</code> im Pfad). Damit alle erzeugten PDFs stattdessen in einem gemeinsamen, über den Webserver erreichbaren Verzeichnis landen, wird ein fester Pfad ohne <code>${USER}</code> verwendet.
| |
| | |
| ;Verzeichnis anlegen und Rechte setzen
| |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| sudo mkdir -p /var/www/html/pdfs | | sudo mkdir -p /srv/nfs/pdfs |
| sudo chgrp www-data /var/www/html/pdfs | | sudo chgrp lp /srv/nfs/pdfs |
| sudo chmod 2775 /var/www/html/pdfs | | sudo chmod 2775 /srv/nfs/pdfs |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
| * '''chgrp www-data''' – Gruppe des Verzeichnisses ist die Webserver-Gruppe
| |
| * '''chmod 2775''' – SetGID-Bit sorgt dafür, dass neu erzeugte PDFs automatisch der Gruppe ''www-data'' zugeordnet werden
| |
|
| |
|
| ;CUPS-PDF konfigurieren | | ;CUPS-PDF konfigurieren |
| Zeile 65: |
Zeile 19: |
|
| |
|
| <pre> | | <pre> |
| Out /var/www/html/pdfs | | Out /srv/nfs/pdfs |
| Grp www-data
| |
| </pre> | | </pre> |
|
| |
|
| * '''Out''' – fester, gemeinsamer Ausgabeordner (kein <code>${USER}</code> mehr → nicht pro Benutzer getrennt)
| | Mit gesetztem <code>Out</code>-Pfad ignoriert CUPS-PDF den <code>${USER}</code>-Unterordner komplett – alle PDFs landen unabhängig vom sendenden User in genau diesem einen Verzeichnis. |
| * '''Grp''' – Gruppe, der die erzeugten PDF-Dateien zugeordnet werden, damit Apache sie lesen darf
| |
| | |
| ;CUPS neu starten, damit die Konfiguration greift
| |
| <syntaxhighlight lang="bash"> | |
| sudo systemctl restart cups
| |
| </syntaxhighlight> | |
| | |
| Die PDFs sind danach unter '''http://<server-ip>/pdfs/''' erreichbar (sofern das Apache-Verzeichnislisting aktiviert ist bzw. der Dateiname bekannt ist).
| |
| | |
| '''Sicherheitshinweis:''' Dieses Verzeichnis ist ''öffentlich ohne Zugriffsschutz'' erreichbar – jeder gedruckte Inhalt landet für alle sichtbar im Netz. Für den produktiven Einsatz sollte mindestens eine HTTP-Basic-Auth oder eine IP-Beschränkung in der Apache-Konfiguration ergänzt werden.
| |
| | |
| == Dienst steuern ==
| |
|
| |
|
| | ;Per NFS freigeben |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| systemctl start|stop|restart|status cups
| | sudo vi /etc/exports |
| </syntaxhighlight>
| |
| | |
| == Netzwerkzugang konfigurieren ==
| |
| | |
| Standardmäßig hört CUPS nur auf '''localhost''' (Port 631):
| |
| | |
| <syntaxhighlight lang="bash">
| |
| ss -lntp | grep 631
| |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| <pre> | | <pre> |
| LISTEN 0 128 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=491,fd=9))
| | /srv/nfs/pdfs <client-subnet>(rw,sync,no_subtree_check) |
| LISTEN 0 128 [::1]:631 [::]:* users:(("cupsd",pid=491,fd=8))
| |
| </pre> | | </pre> |
|
| |
| === Alles freischalten ===
| |
|
| |
|
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| sudo cupsctl --remote-admin --remote-any --share-printers | | sudo exportfs -ra |
| | sudo systemctl restart nfs-kernel-server |
| | sudo cupsctl --share-printers |
| sudo systemctl restart cups | | sudo systemctl restart cups |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
| Zugang überprüfen:
| |
|
| |
| <syntaxhighlight lang="bash">
| |
| ss -lntp | grep 631
| |
| </syntaxhighlight>
| |
|
| |
| <pre>
| |
| LISTEN 0 128 0.0.0.0:631 0.0.0.0:* users:(("cupsd",pid=4247,fd=6))
| |
| </pre>
| |
|
| |
| {| class="wikitable"
| |
| ! Variante !! Befehl !! Wann verwenden?
| |
| |-
| |
| | Schnell || <code>cupsctl --remote-admin --remote-any --share-printers</code> || Testen / Labor
| |
| |-
| |
| | Präzise || <code>cupsd.conf</code> manuell editieren || Produktion / bestimmte IP
| |
| |}
| |
|
| |
| == Weboberfläche (CUPS-Verwaltung) ==
| |
|
| |
| CUPS besitzt einen integrierten Webserver auf '''Port 631''':
| |
|
| |
| <pre>
| |
| http://localhost:631
| |
| http://<server-ip>:631
| |
| </pre>
| |
|
| |
| * Drucker hinzufügen, verwalten und Aufträge einsehen
| |
| * Für administrative Aktionen ist eine Anmeldung erforderlich
| |
| * Nur Mitglieder der Gruppe '''lpadmin''' dürfen administrieren:
| |
|
| |
| <syntaxhighlight lang="bash">
| |
| sudo adduser meinbenutzer lpadmin
| |
| </syntaxhighlight>
| |
|
| |
| == Drucker hinzufügen ==
| |
|
| |
| Unter '''Verwaltung → Drucker hinzufügen''':
| |
|
| |
| # Gerät/Anschluss auswählen
| |
| # Verbindung festlegen (USB, Netzwerk, IPP, …)
| |
| # Name vergeben ('''keine Leer- oder Sonderzeichen''')
| |
| # Marke und Modell auswählen
| |
| # Standardeinstellungen festlegen (z. B. Papierformat)
| |
| # Testseite drucken: ''Drucker → Wartung → Testseite drucken''
| |
|
| |
| == Druckerserver im Netzwerk ==
| |
|
| |
| <syntaxhighlight lang="bash">
| |
| sudo cupsctl --share-printers # Lokale Drucker freigeben
| |
| sudo cupsctl --remote-admin # Remote-Administration erlauben
| |
| </syntaxhighlight>
| |
|
| |
| In der Weboberfläche unter '''Verwaltung → Server''':
| |
| * ''Freigeben von Druckern'' – gibt lokale Drucker im Netz frei
| |
| * ''Erlaube entfernte Verwaltung'' – Weboberfläche von anderen Rechnern erreichbar
| |
|
| |
| == Warteschlange und Status (Server) ==
| |
|
| |
| * '''Aufträge''' – Druckaufträge einsehen, neu starten, löschen
| |
| * '''Drucker''' – Übersicht aller Drucker, Status prüfen, Drucker deaktivieren
| |
|
| |
|
| = Client = | | = Client = |
|
| |
|
| Auf dem Client wird nur die Client-Komponente installiert, keine vollständige Server-Komponente. Der Client nutzt die vom Server freigegebenen Drucker.
| | ;Installation |
| | |
| == Installation ==
| |
| | |
| ;Nur Client-Werkzeuge installieren
| |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| sudo apt install cups-client cups-bsd | | sudo apt install cups-client nfs-common |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| * '''cups-client''' – Kommandozeilenwerkzeuge (<code>lp</code>, <code>lpr</code>, <code>lpstat</code>, …) und Zugriff auf entfernte Drucker
| | ;Mit dem Druck-Server verbinden |
| * '''cups-bsd''' – Kompatibilitätslayer für ältere Druckbefehle (<code>lpr</code>, <code>lpq</code>)
| |
| | |
| '''Hinweis:''' Für einen reinen Client wird '''kein''' <code>cupsd</code>-Dienst benötigt – es muss also kein lokaler CUPS-Server laufen.
| |
| | |
| == Server-Drucker automatisch einbinden ==
| |
| | |
| Damit freigegebene Netzwerkdrucker automatisch erscheinen, wird der CUPS-Browsing-Client aktiviert:
| |
| | |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| sudo vi /etc/cups/client.conf | | sudo vi /etc/cups/client.conf |
| Zeile 197: |
Zeile 56: |
| </pre> | | </pre> |
|
| |
|
| Alternativ, um automatisch nach freigegebenen Druckern im Netz zu suchen, in der lokalen Weboberfläche (falls <code>cups-client</code> einen minimalen Client-Dienst mitbringt) unter '''Verwaltung → Server''':
| | ;NFS-Freigabe einbinden |
| * ''Zeige freigegebene Drucker von anderen Systemen'' – bindet Netzwerkdrucker automatisch ein
| |
| | |
| == Netzwerkprotokolle (zum manuellen Einbinden eines Druckers) ==
| |
| | |
| {| class="wikitable"
| |
| ! Protokoll !! URL-Format !! Hinweis
| |
| |-
| |
| | '''IPP''' || <code>ipp://hostname/printers/druckername</code> || Empfohlen, universell
| |
| |-
| |
| | '''LPD/LPR''' || <code>lpd://servername/warteschlange</code> || Ältere Geräte/Router
| |
| |-
| |
| | '''SMB''' || <code>smb://domäne/server/drucker</code> || Windows-Druckserver (smbclient nötig)
| |
| |-
| |
| | '''Socket''' || <code>socket://hostname:9100</code> || Notlösung im LAN (HP JetDirect)
| |
| |}
| |
| | |
| == Drucken vom Client ==
| |
| | |
| <syntaxhighlight lang="bash">
| |
| lp -d druckername datei.pdf
| |
| </syntaxhighlight>
| |
| | |
| ;PDFs aus dem gemeinsamen Webverzeichnis abrufen | |
| Da die PDFs auf dem Server öffentlich unter '''http://<server-ip>/pdfs/''' liegen, können sie vom Client direkt im Browser oder per <code>curl</code>/<code>wget</code> abgerufen werden – ein Login auf dem Server ist dafür nicht nötig.
| |
| | |
| == Warteschlange und Status (Client) ==
| |
| | |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| lpstat -p -d
| | sudo mkdir -p /mnt/pdfs |
| lpq
| | sudo mount <server-ip>:/srv/nfs/pdfs /mnt/pdfs |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| * '''lpstat -p -d''' – Status aller Drucker und Standarddrucker anzeigen
| | == Drucken (grafisch) == |
| * '''lpq''' – aktuelle Warteschlange des Standarddruckers anzeigen
| |
|
| |
|
| = Links =
| | # Datei öffnen (z. B. in LibreOffice) |
| | # ''Datei → Drucken'' |
| | # Als Drucker den freigegebenen '''PDF'''-Drucker auswählen |
| | # Drucken |
|
| |
|
| * https://wiki.ubuntuusers.de/CUPS/
| | Die fertige PDF erscheint direkt unter <code>/mnt/pdfs/</code> auf dem Client – kein Login auf dem Server, kein User-Abgleich nötig, da alle in denselben NFS-gemounteten Ordner schreiben. |
| * https://www.cups-pdf.de/
| |
| * https://openprinting.github.io/cups/
| |
Server
- Installation
sudo apt install printer-driver-cups-pdf libreoffice nfs-kernel-server
- Gemeinsames Ausgabeverzeichnis statt pro-User-Ordner
sudo mkdir -p /srv/nfs/pdfs
sudo chgrp lp /srv/nfs/pdfs
sudo chmod 2775 /srv/nfs/pdfs
- CUPS-PDF konfigurieren
sudo vi /etc/cups/cups-pdf.conf
Out /srv/nfs/pdfs
Mit gesetztem Out-Pfad ignoriert CUPS-PDF den ${USER}-Unterordner komplett – alle PDFs landen unabhängig vom sendenden User in genau diesem einen Verzeichnis.
- Per NFS freigeben
/srv/nfs/pdfs <client-subnet>(rw,sync,no_subtree_check)
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server
sudo cupsctl --share-printers
sudo systemctl restart cups
Client
- Installation
sudo apt install cups-client nfs-common
- Mit dem Druck-Server verbinden
sudo vi /etc/cups/client.conf
ServerName <server-ip>
- NFS-Freigabe einbinden
sudo mkdir -p /mnt/pdfs
sudo mount <server-ip>:/srv/nfs/pdfs /mnt/pdfs
Drucken (grafisch)
- Datei öffnen (z. B. in LibreOffice)
- Datei → Drucken
- Als Drucker den freigegebenen PDF-Drucker auswählen
- Drucken
Die fertige PDF erscheint direkt unter /mnt/pdfs/ auf dem Client – kein Login auf dem Server, kein User-Abgleich nötig, da alle in denselben NFS-gemounteten Ordner schreiben.