Linux - Netzwerk und Serveradminstration Drucker Server: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
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/
 

Version vom 23. Juli 2026, 12:59 Uhr

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
sudo vi /etc/exports
/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)

  1. Datei öffnen (z. B. in LibreOffice)
  2. Datei → Drucken
  3. Als Drucker den freigegebenen PDF-Drucker auswählen
  4. 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.