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

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(41 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Druckerserver-Einführung (Debian) =
+
=Vorarbeiten=
 +
;Im Nameserver eintragen und testen
 +
cups.it2XX.int IN A 172.26.2XX.3
  
== Was ist CUPS? ==
+
=Debian Template klonen=
 +
=== DATEN ===
 +
{| class="wikitable" style="background-color: #f2f2f2;"
 +
! Parameter !! Wert !! Erläuterung
 +
|-
 +
| '''Netzwerk (NIC)''' || LAN || Interface-Zuweisung in VirtualBox
 +
|-
 +
| '''IP''' || 172.26.2XX.3 || Statische IP
 +
|-
 +
| '''CIDR''' || 24 || Classless Inter-Domain Routing Präfixlänge
 +
|-
 +
| '''GW''' || 172.26.2XX.1 || GATEWAY
 +
|-
 +
| '''NS''' || 10.88.2XX.21 || Resolver
 +
|-
 +
| '''FQDN''' || cups.it2XX.int || Fully Qualified Domain Name
 +
|-
 +
| '''SHORT''' || cups || Short Name
 +
|-
 +
| '''DOM''' || it2XX.int|| Domain Name
 +
|}
  
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'''
+
= Zertifikat holen =
* Drucker lassen sich lokal nutzen, verwalten und im Netzwerk freigeben
+
;Wir befinden uns auf dem CUPS-Server
* CUPS wandelt Druckdaten intern immer in '''PDF''' um, bevor sie an den Drucker gesendet werden
+
* wget https://web.samogo.de/certs/it2XX.int.tgz -O it.int.tgz
* Moderne Drucker mit AirPrint-Unterstützung können direkt über den Treiber '''IPP Everywhere''' eingebunden werden – ohne PPD-Datei
+
* tar -C /tmp -xvzf it.int.tgz
 +
* mv /tmp/fullchain.pem /etc/ssl/own.crt
 +
* mv /tmp/privkey.pem /etc/ssl/own.key
  
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.
+
=Apache2=
 
+
;Installation
= Server =
+
*apt install apache2
 
+
;SSL Modul aktivieren
Auf dem Server wird CUPS installiert, konfiguriert, im Netz freigegeben und die PDF-Ausgabe in ein öffentlich erreichbares Webverzeichnis gelegt.
+
*a2enmod ssl
 
+
;Konfiguration
== Installation ==
+
*vi /etc/apache2/sites-enabled/000-default.conf
 
+
<pre>
;CUPS-Server installieren
+
<VirtualHost *:443>
<syntaxhighlight lang="bash">
+
DocumentRoot /var/www/html
sudo apt install cups cups-client cups-bsd
+
ErrorLog ${APACHE_LOG_DIR}/error.log
</syntaxhighlight>
+
CustomLog ${APACHE_LOG_DIR}/access.log combined
  
* '''cups''' – Server-Komponente
+
SSLEngine on
* '''cups-client''' – Client-Komponente (wird auf dem Server für lokale Tests mitbenötigt)
+
SSLCertificateFile /etc/ssl/own.crt
* '''cups-bsd''' – Kompatibilitätslayer für das alte BSD-Drucksystem
+
SSLCertificateKeyFile /etc/ssl/own.key
 
+
</VirtualHost>
;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">
 
sudo mkdir -p /var/www/html/pdfs
 
sudo chgrp www-data /var/www/html/pdfs
 
sudo chmod 2775 /var/www/html/pdfs
 
</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
 
<syntaxhighlight lang="bash">
 
sudo vi /etc/cups/cups-pdf.conf
 
</syntaxhighlight>
 
 
 
<pre>
 
Out /var/www/html/pdfs
 
Grp www-data
 
 
</pre>
 
</pre>
 +
;Restart und Kontrolle
 +
*systemctl restart apache2
 +
*ss -lntp | grep apache2
  
* '''Out''' – fester, gemeinsamer Ausgabeordner (kein <code>${USER}</code> mehr → nicht pro Benutzer getrennt)
+
= Server =
* '''Grp''' – Gruppe, der die erzeugten PDF-Dateien zugeordnet werden, damit Apache sie lesen darf
+
;Installation
 
+
*sudo apt install cups printer-driver-cups-pdf libreoffice
;CUPS neu starten, damit die Konfiguration greift
+
;Queue mit cups-pdf-Backend anlegen
<syntaxhighlight lang="bash">
+
Wichtig: die Device-URI muss explizit auf <code>cups-pdf:/</code> gesetzt werden. Ohne diesen Schritt bleiben Druckjobs im allgemeinen Spool <code>/var/spool/cups</code> hängen, statt vom cups-pdf-Backend verarbeitet zu werden.
sudo systemctl restart cups
+
*sudo lpadmin -p PDF -v cups-pdf:/ -P /usr/share/ppd/cups-pdf/CUPS-PDF_opt.ppd -E
</syntaxhighlight>
+
;Kontrolle
 
+
*lpstat -v PDF
Die PDFs sind danach unter '''http://<server-ip>/pdfs/''' erreichbar (sofern das Apache-Verzeichnislisting aktiviert ist bzw. der Dateiname bekannt ist).
+
Erwartete Ausgabe:
 
 
'''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 ==
 
 
 
<syntaxhighlight lang="bash">
 
systemctl start|stop|restart|status cups
 
</syntaxhighlight>
 
 
 
== Netzwerkzugang konfigurieren ==
 
 
 
Standardmäßig hört CUPS nur auf '''localhost''' (Port 631):
 
 
 
<syntaxhighlight lang="bash">
 
ss -lntp | grep 631
 
</syntaxhighlight>
 
 
 
 
<pre>
 
<pre>
LISTEN 0  128  127.0.0.1:631  0.0.0.0:*  users:(("cupsd",pid=491,fd=9))
+
device for PDF: cups-pdf:/
LISTEN 0  128      [::1]:631    [::]:*  users:(("cupsd",pid=491,fd=8))
 
 
</pre>
 
</pre>
 
+
Steht hier etwas anderes, an dieser Stelle nicht weitermachen.
=== Alles freischalten ===
+
;Freigabe aktivieren
 
+
*sudo lpadmin -p PDF -o printer-is-shared=true
<syntaxhighlight lang="bash">
+
*sudo cupsctl --share-printers --remote-any
sudo cupsctl --remote-admin --remote-any --share-printers
+
;Ausgabeverzeichnis festlegen
sudo systemctl restart cups
+
Die PDFs sollen direkt nach <code>/var/www/html</code> geschrieben werden (später Basis für einen Apache-Webserver).
</syntaxhighlight>
+
*sudo vi /etc/cups/cups-pdf.conf
 
 
Zugang überprüfen:
 
 
 
<syntaxhighlight lang="bash">
 
ss -lntp | grep 631
 
</syntaxhighlight>
 
 
 
 
<pre>
 
<pre>
LISTEN 0  128  0.0.0.0:631  0.0.0.0:*  users:(("cupsd",pid=4247,fd=6))
+
Out /var/www/html
 +
AnonDirName /var/www/html
 +
UserUMask 0000
 +
Grp lpadmin
 +
DecodeHexStrings 1
 
</pre>
 
</pre>
 +
;Berechtigungen setzen
 +
*sudo rm -f /var/www/html/index.html
 +
*sudo chown root:lpadmin /var/www/html
 +
*sudo chmod 1777 /var/www/html
 +
;AppArmor-Profil deaktivieren
 +
Der CUPS-Daemon ruft intern Ghostscript auf, das je nach Dokument diverse Systemdateien liest (Fonts, Papierformate, Temp-Verzeichnisse). Das AppArmor-Profil <code>usr.sbin.cupsd</code> blockiert diesen Zugriff standardmäßig. Statt einzelne Pfade freizugeben, wird das Profil komplett deaktiviert:
 +
*sudo ln -sf /etc/apparmor.d/usr.sbin.cupsd /etc/apparmor.d/disable/
 +
*sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.cupsd
 +
;CUPS neu starten
 +
*sudo systemctl restart cups
 +
;Test
 +
*lpstat -p PDF
 +
*echo "Testseite" > test.txt
 +
*lp -d PDF test.txt
 +
*sleep 3
 +
*ls -la /var/www/html
  
{| class="wikitable"
+
= Client =
! Variante !! Befehl !! Wann verwenden?
+
== Linux (grafisch) ==
|-
+
;Vorab
| Schnell || <code>cupsctl --remote-admin --remote-any --share-printers</code> || Testen / Labor
+
*[[Importieren der CA in Firefox ESR Manuell]]
|-
+
;Installation
| Präzise || <code>cupsd.conf</code> manuell editieren || Produktion / bestimmte IP
+
*sudo apt install cups system-config-printer
|}
+
;Drucker hinzufügen
 
+
# GNOME Settings → Printers öffnen
== Weboberfläche (CUPS-Verwaltung) ==
+
# '''Add Printer...''' anklicken
 
+
# Falls der Drucker nicht automatisch per Netzwerk-Discovery erscheint: Adresse manuell eingeben
CUPS besitzt einen integrierten Webserver auf '''Port 631''':
 
 
 
 
<pre>
 
<pre>
http://localhost:631
+
ipp://<server-ip>:631/printers/PDF
http://<server-ip>:631
 
 
</pre>
 
</pre>
 +
# Drucker '''PDF''' bestätigen und hinzufügen
 +
;Drucken
 +
# Beliebige Datei öffnen (z. B. in LibreOffice)
 +
# ''Drucken'' → Drucker '''PDF''' auswählen
 +
# Drucken
 +
Die fertige PDF landet auf dem '''Server''' unter <code>/var/www/html</code>.
 +
;Wenn es grafisch zickt
 +
*sudo lpadmin -p PDF -E -v ipp://<server-ip>:631/printers/PDF -m everywhere
  
* Drucker hinzufügen, verwalten und Aufträge einsehen
+
== Windows (grafisch) ==
* Für administrative Aktionen ist eine Anmeldung erforderlich
+
;Drucker hinzufügen
* Nur Mitglieder der Gruppe '''lpadmin''' dürfen administrieren:
+
# ''Einstellungen'' ''Bluetooth & Geräte'' → ''Drucker & Scanner''
 
+
# '''Gerät hinzufügen''' '''Der gewünschte Drucker ist nicht aufgeführt'''
<syntaxhighlight lang="bash">
+
# '''Freigegebenen Drucker über den Namen oder die TCP/IP-Adresse auswählen'''
sudo adduser meinbenutzer lpadmin
+
# URL eingeben:
</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 =
 
 
 
Auf dem Client wird nur die Client-Komponente installiert, keine vollständige Server-Komponente. Der Client nutzt die vom Server freigegebenen Drucker.
 
 
 
== Installation ==
 
 
 
;Nur Client-Werkzeuge installieren
 
<syntaxhighlight lang="bash">
 
sudo apt install cups-client cups-bsd
 
</syntaxhighlight>
 
 
 
* '''cups-client''' – Kommandozeilenwerkzeuge (<code>lp</code>, <code>lpr</code>, <code>lpstat</code>, …) und Zugriff auf entfernte Drucker
 
* '''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">
 
sudo vi /etc/cups/client.conf
 
</syntaxhighlight>
 
 
 
 
<pre>
 
<pre>
ServerName <server-ip>
+
http://<server-ip>:631/printers/PDF
 
</pre>
 
</pre>
 
+
# Als Treiber unter Hersteller '''Generic''' den Treiber '''MS Publisher Imagesetter''' auswählen (generischer PostScript-Treiber). '''MS Publisher Color Printer''' funktioniert alternativ ebenfalls.
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''':
+
;Drucken
* ''Zeige freigegebene Drucker von anderen Systemen'' – bindet Netzwerkdrucker automatisch ein
+
# Beliebige Datei öffnen (z. B. Word)
 
+
# ''Drucken'' → Drucker '''PDF''' auswählen
== Netzwerkprotokolle (zum manuellen Einbinden eines Druckers) ==
+
# Drucken
 
+
Die fertige PDF landet auf dem '''Server''' unter <code>/var/www/html</code>.
{| 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">
 
lpstat -p -d
 
lpq
 
</syntaxhighlight>
 
 
 
* '''lpstat -p -d''' – Status aller Drucker und Standarddrucker anzeigen
 
* '''lpq''' – aktuelle Warteschlange des Standarddruckers anzeigen
 
 
 
= Links =
 
 
 
* https://wiki.ubuntuusers.de/CUPS/
 
* https://www.cups-pdf.de/
 
* https://openprinting.github.io/cups/
 

Aktuelle Version vom 24. Juli 2026, 11:57 Uhr

Vorarbeiten

Im Nameserver eintragen und testen

cups.it2XX.int IN A 172.26.2XX.3

Debian Template klonen

DATEN

Parameter Wert Erläuterung
Netzwerk (NIC) LAN Interface-Zuweisung in VirtualBox
IP 172.26.2XX.3 Statische IP
CIDR 24 Classless Inter-Domain Routing Präfixlänge
GW 172.26.2XX.1 GATEWAY
NS 10.88.2XX.21 Resolver
FQDN cups.it2XX.int Fully Qualified Domain Name
SHORT cups Short Name
DOM it2XX.int Domain Name


Zertifikat holen

Wir befinden uns auf dem CUPS-Server

Apache2

Installation
  • apt install apache2
SSL Modul aktivieren
  • a2enmod ssl
Konfiguration
  • vi /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:443>
	DocumentRoot /var/www/html
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	SSLEngine on
	SSLCertificateFile /etc/ssl/own.crt
	SSLCertificateKeyFile /etc/ssl/own.key
</VirtualHost>
Restart und Kontrolle
  • systemctl restart apache2
  • ss -lntp | grep apache2

Server

Installation
  • sudo apt install cups printer-driver-cups-pdf libreoffice
Queue mit cups-pdf-Backend anlegen

Wichtig: die Device-URI muss explizit auf cups-pdf:/ gesetzt werden. Ohne diesen Schritt bleiben Druckjobs im allgemeinen Spool /var/spool/cups hängen, statt vom cups-pdf-Backend verarbeitet zu werden.

  • sudo lpadmin -p PDF -v cups-pdf:/ -P /usr/share/ppd/cups-pdf/CUPS-PDF_opt.ppd -E
Kontrolle
  • lpstat -v PDF

Erwartete Ausgabe:

device for PDF: cups-pdf:/

Steht hier etwas anderes, an dieser Stelle nicht weitermachen.

Freigabe aktivieren
  • sudo lpadmin -p PDF -o printer-is-shared=true
  • sudo cupsctl --share-printers --remote-any
Ausgabeverzeichnis festlegen

Die PDFs sollen direkt nach /var/www/html geschrieben werden (später Basis für einen Apache-Webserver).

  • sudo vi /etc/cups/cups-pdf.conf
Out /var/www/html
AnonDirName /var/www/html
UserUMask 0000
Grp lpadmin
DecodeHexStrings 1
Berechtigungen setzen
  • sudo rm -f /var/www/html/index.html
  • sudo chown root:lpadmin /var/www/html
  • sudo chmod 1777 /var/www/html
AppArmor-Profil deaktivieren

Der CUPS-Daemon ruft intern Ghostscript auf, das je nach Dokument diverse Systemdateien liest (Fonts, Papierformate, Temp-Verzeichnisse). Das AppArmor-Profil usr.sbin.cupsd blockiert diesen Zugriff standardmäßig. Statt einzelne Pfade freizugeben, wird das Profil komplett deaktiviert:

  • sudo ln -sf /etc/apparmor.d/usr.sbin.cupsd /etc/apparmor.d/disable/
  • sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.cupsd
CUPS neu starten
  • sudo systemctl restart cups
Test
  • lpstat -p PDF
  • echo "Testseite" > test.txt
  • lp -d PDF test.txt
  • sleep 3
  • ls -la /var/www/html

Client

Linux (grafisch)

Vorab
Installation
  • sudo apt install cups system-config-printer
Drucker hinzufügen
  1. GNOME Settings → Printers öffnen
  2. Add Printer... anklicken
  3. Falls der Drucker nicht automatisch per Netzwerk-Discovery erscheint: Adresse manuell eingeben
ipp://<server-ip>:631/printers/PDF
  1. Drucker PDF bestätigen und hinzufügen
Drucken
  1. Beliebige Datei öffnen (z. B. in LibreOffice)
  2. Drucken → Drucker PDF auswählen
  3. Drucken

Die fertige PDF landet auf dem Server unter /var/www/html.

Wenn es grafisch zickt
  • sudo lpadmin -p PDF -E -v ipp://<server-ip>:631/printers/PDF -m everywhere

Windows (grafisch)

Drucker hinzufügen
  1. EinstellungenBluetooth & GeräteDrucker & Scanner
  2. Gerät hinzufügenDer gewünschte Drucker ist nicht aufgeführt
  3. Freigegebenen Drucker über den Namen oder die TCP/IP-Adresse auswählen
  4. URL eingeben:
http://<server-ip>:631/printers/PDF
  1. Als Treiber unter Hersteller Generic den Treiber MS Publisher Imagesetter auswählen (generischer PostScript-Treiber). MS Publisher Color Printer funktioniert alternativ ebenfalls.
Drucken
  1. Beliebige Datei öffnen (z. B. Word)
  2. Drucken → Drucker PDF auswählen
  3. Drucken

Die fertige PDF landet auf dem Server unter /var/www/html.